首页 > 其他分享 >Day 13 迭代器 三元表达式 列表生成式 字典生成式 生成器 递归

Day 13 迭代器 三元表达式 列表生成式 字典生成式 生成器 递归

时间:2024-11-14 12:19:41浏览次数:1  
标签:__ 13 迭代 对象 生成式 生成器 iter print def

目录

0 上节课回顾

0.1 闭包函数

函数内部的变量无法被全局的相同名字的变量修改,局部变量和全局变量不是同一种东西

def f1():
  x = 1
  def f2():
    print(1,x)
x = 10

f1()
print(2,x)

0.2 装饰器

user_dict = {'username':None}
def deco(func):
  def wrapper(*args,**kwargs):
    if not user_dice.get('username'):
      username = input('请输入用户名>>>')
      pwd = input('请输入密码>>>')
      if username == 'nick' and pwd == '123':
        print('登陆成功')
        user_dict['username'] = username
        res = func(*args,**kwargs)
        return res
      res = func(*args,**kwargs)
      return res
  return wrapper

@deco
def shopping():
  print('please shopping!')
def withdraw():
  print('please withdraw!')
shopping()
withdraw()

1 迭代器

python中一切皆对象 学过的对象:

  • 整形:height = 180 无 __iter__

  • 浮点型:salary = 3.2 无 __iter__

  • 字符串:name = 'nick' 有 name.__iter__()

  • 列表:hobby_list = ['run','read'] 有 hobby_list.__iter__()

  • 元组:hobby_tuple = ('run','read') 有 hobbu_tuple.__iter__()

  • 字典:info_dict = {'name':'nick','weight':140} 有 info_dict.__iter__()

  • 集合:hobby_set = {'read','run','sleep'} 有 hobby_set.__iter__()

  • 函数: 无 __iter__

    def func():
      pass
    
  • 文件:f = open('text.txt','w',encoding = 'utf8') #w和a都会自动生成文件f.__iter__()

只要有__iter__内置方法的对象就是可迭代对象,。。。

字符串/列表/元组/字典/集合/文件 均为可迭代对象

__next__就是在遍历可迭代对象,当遍历完就会报错

可迭代对象:拥有__iter__方法的对象 可迭代对象不一定是迭代器对象

迭代器对象:拥有__iter__方法,可迭代对象拥有__next__方法才是迭代器对象,迭代器对象一定是可迭代对象,文件本身就是迭代器对象

文件既是可迭代对象,又是迭代器对象

迭代器对象使用__iter__方法后是迭代器对象本身

2 三元表达式和列表推导式

2.1 三元表达式(三目表达式)

dog_name = 'fenggou'
if dog_name == 'fenggou':
  print('远离它')
else:
  print('盘它')
# 等价于  (但不推荐使用,不容易看懂)
print('远离它') if dog_name == 'fenggou' else print('盘它')

2.2 列表推导式

list = list()
for i in range(100):
  list.append(i)
print(list)
# 等价于 记住:傻逼采用的玩意
lis = [i for i in range(100)]
print(lis)

lis = [i*2 if i>50 else i for i in range(100)]

3 字典生成式

dic = {i:i**2 for i in range(10)}
for i in dic.items():
  print(i)

res = zip('abcd',[1,2,3,4])
for k,v in res:
  print(k,v)
# 终极版  字典生成式 + zip拉链函数
res = zip('abcd',[1,2,3,4])
dic = {k:v for k,v in res}
print(dic)  #输出结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
#区别于fromkeys
dic = dict.fromkeys('abcd',[1,2,3,4])
print(dic)  #输出结果:{'a': [1, 2, 3, 4], 'b': [1, 2, 3, 4], 'c': [1, 2, 3, 4], 'd': [1, 2, 3, 4]}

4 生成器

生成器:自定义的迭代器

4.1 yield关键字

接收值,但不会结束函数,二十继续运行下一行代码,出现yield后不会再返回值,全被接受了,举个例子

def func():
    print(1)
    print(2)
    print(2)
func()   #会输出 1 2 2
#但若变成
def func():
    print(1)
    yield 1,2,4
    print(2)
    yield
    print(2)
func()  #就不会再输出值了,而是变成了一个迭代器,即直接用__next__来进行迭代,可进行下面操作
g = func()
for i in g:
  print(i)  #输出1  (1, 2, 4)  2 None 2
 # 注意 :此时yield后面是可以接收值得,默认为None,也可以接收多个值以元组形式储存

注意:函数本身不是可迭代对象,但在调用之后就成了迭代器

yield:接收值,但不会结束函数,然后继续下一行代码,直到return

return:返回值,直接结束函数,其他特性和yield一摸一样

5 递归

递归:函数调用函数自己 (重复 函数嵌套)

def f1():
  print('from f1')
  f1()
f1()
def guess_age(count):
  count -= 1
  if count == 1:
    return 26
  return guess_age(count) + 2
res = guess_age(5)
print(res) # 32

标签:__,13,迭代,对象,生成式,生成器,iter,print,def
From: https://www.cnblogs.com/chsun12/p/18545725

相关文章

  • 【2024-11-13】增强意志
    20:00我一向有一个看法,我觉得,每一个人的一生都是一场拼搏。人的降生,都是被动的,并非出于个人愿望。既然来到人间,就必须活下去。然而,活下去却不容易,包括旧时代的皇帝在内,馅饼并不从天上自动掉到你的嘴里来,你必须去拼搏。这是一个人生存的首要任务。          ......
  • Python 开发(11):生成器与迭代器 - 高效处理数据流
    Python开发(11):生成器与迭代器-高效处理数据流在Python中,生成器和迭代器是非常强大的工具,能够帮助开发者高效地处理大规模数据,尤其是在内存资源有限的情况下。它们通过惰性计算的方式,逐步生成数据,避免一次性加载大量数据到内存中,提升了程序的性能和效率。本文将详细介......
  • [LeetCode] 1385. Find the Distance Value Between Two Arrays
    Giventwointegerarraysarr1andarr2,andtheintegerd,returnthedistancevaluebetweenthetwoarrays.Thedistancevalueisdefinedasthenumberofelementsarr1[i]suchthatthereisnotanyelementarr2[j]where|arr1[i]-arr2[j]|<=d.Exampl......
  • 2024.11.13 前端打字机代码
    要让打字结束后保持结束状态,首先需要确认你使用的EasyTyper库的逻辑。当EasyTyper完成打字后,它通常会执行一个回调函数,告知打字过程已经结束。从你提供的代码来看,回调函数()=>{}是空的,可能是为了暂时不做任何操作。如果你希望在打字完成后让文本保持在打字结束的状态,可以......
  • el表达式+axios+vue -2024/11/13
    一个好看的界面<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>首页</title></head><body><divid="app"><el-menu:default-active=......
  • 项目冲刺11.13
    这个作业属于哪个课程计科22级34班这个作业要求在哪里作业要求这个作业的目标进行为期七天的项目冲刺并记录前言本篇博客是项目冲刺的第五篇,七篇博客的汇总如下:博客汇总第一篇博客第二篇博客第三篇博客第四篇博客第五篇博客第六篇博客......
  • 24.11.13 Javascript3
    Javascript31.dom元素获取查找元素的函数getElementById("id值")查找到唯一一个元素getElementsByClassName("class值")查找指定class的元素数组getElementsByTagName("标签名")查找指定标签名的元素......
  • 2024.11.13
    今日错题:一共10题,错误3题分析:(2)本文出现了语法错误,因为没有掌握关于“inone'sopinion”的语法所以导致了该题目的错误分析:(5)本题出现了2个不会的单词,其中一个单词有着关键性作用,出现了单词空缺,单词涉及薄弱,导致本题目出错,分析上下文无法推断出该单词的意思分析(8)本题单词出......
  • nfs服务器之间实现目录共享13
    title:nfs服务器之间实现目录共享date:2022-11-0522:41:54tags:[nfs,文件共享]categories:linux在使用airflow的时候,scheduler和worker之间的dag文件需要保持一致,而airflow没有解决这个问题,所以,需要我们自己解决dag文件的同步问题。第一个解决方案就是云服务商提供的nas......
  • nfs服务器之间实现目录共享13134
    title:nfs服务器之间实现目录共享date:2022-11-0522:41:54tags:[nfs,文件共享]categories:linux在使用airflow的时候,scheduler和worker之间的dag文件需要保持一致,而airflow没有解决这个问题,所以,需要我们自己解决dag文件的同步问题。第一个解决方案就是云服务商提供的nas......