一、建议小写f:python
name = "宝元"
age = 18
sex = "男"
msg = F"姓名:{name},性别:{age},年龄:{sex}"
msg1 = f"姓名:{name},性别:{age},年龄:{sex}"
print(msg)
print(msg1)
结果: 姓名:宝元,性别:18,年龄:男
姓名:宝元,性别:18,年龄:男程序员
二、表达式:字典取值、列表取值、函数表达式
函数计算:
def func(a,b):
return a + b
msg = f"运行结果{func(1,2)}"
print(msg)
结果:运行结果3
列表切片:
lst = [1,2,32,34,45,5]
msg = f"运行结果:{lst[0:3]}"
print(msg)
结果:运行结果:[1, 2, 32]
字典取值:
dic = {"key":1,"key1":22}
msg = f"运行结果:{dic['key1']}"
print(msg)
结果:运行结果:22
三元表达式:
a = 10
b = 20
msg = f"{a if a > b else b}"
print(msg)
结果:20
三、迭代器: 具备__iter__()和__next__()方法就是一个迭代器
优势: 节省内存
文件句柄就是迭代器
迭代器:一个一个取值
for循环就是一个迭代器
迭代器也是一个可迭代对象
缺点: 只能一个方向直行
一次性的
不能灵活操做、不能直接查看元素个数
应用: 内存小、数据量巨大时、建议使用迭代器
四、可迭代对象: str、list、tuple。。。
优势: python中规定、只要具备__iter__()方法就是可迭代对象
可迭代对象能重复取值
使用灵活(每一个可迭代对象都有本身的方法)
可以直接查看元素的个数
缺点: 占内存
应用: 内存空间大、当数据量比较少、建议使用可迭代对象。
str.__iter__()
list.__iter__()
dict.__iter__()
set.__iter__()
tuple.__iter__()
lst = [1,2,3,4,5]
五、转换: 将可迭代对象转换成迭代器
l = lst.__iter__()
print(l)
结果:<list_iterator object at 0x00000000027187F0>
有多少个元素就只能next多少次
取值:print(l.__next__())
六、注意点:
lst = [1,2,3,4,5]
print(lst.__iter().__next__()) #lst.__iter__()是一个迭代器1
print(lst.__iter().__next__()) #lst.__iter__()是一个迭代器2
七、for循环本质:
s = "alex"
s1 = s.__iter__()
while True:
try: #尝试着运行一下缩进体中的代码
print(s1.__next__())
except StopIteration:
break
八、两种方法:
方法一:
lst = [1,2,3,54]
l = lst.__iter__()
print(l.__next__())
方法二:
lst = [1,2,3,54]
l = iter(lst)
print(next(l))
九、时间换空间:用大量的时间换取一些空间变小--只能一点点的next、例如迭代器、生成器
空间换时间:使用大量的空间来节省时间、例如列表、可迭代对象、
十、生成器的本质就是一个迭代器
十一、生成器和迭代器的区别?
迭代器:文件句柄、经过数据转换python自带提供
生成器:程序员本身实现
十二、生成器的目的:不在经过数据转换实现、而是经过代码编写实现。
生成器的定义:基于函数实现的生成器
表达式实现生成器
1三、函数体中存在yield就是定义一个生成器
def func():
print(1)
yield 5
print(func()) #建立一个生成器对象的内存地址
print时打印的是一个生成器对象的内存地址
1四、语法分析
词法分析
1五、生成器怎么用?
特色:惰性机制
def func():
yield 1 #记录执行位置的
yield 2
yield 3
a = func() #获取的是生成器的内存地址
print(next(a)) #取值
print(next(a)) #取值
print(next(a)) #取值
结果:1
2
3
1六、区分迭代器和生成器?
查看是否可用send方法
看内存地址(主推荐的)
1七、生成器必定是一个迭代器、可是迭代器不必定是一个生成器
1八、迭代器和生成器的优势:
节省空间
迭代器和生成器的缺点:
不能直接使用元素
不能直观查看元素的个数
使用不灵活
稍微消耗时间
一次性的、不能逆行
1九、yield from--将列表总体返回
def func():
yield from [1,2,23,54,5]
g = func()
for i in g:
print(i)
结果: 1
2
23
54
5
20、yield from--将列表逐个返回
def func():
yield from [1,2,23,54,5]
g = func()
print(next(g))
2一、yield from小坑
def func():
lst1 = ["卫龙","老冰棍","北冰洋","牛羊配"]
lst2 = ["馒头","花卷","豆包","大饼"]
yield from lst1
yield from lst2
g = func()
for i in g:
print(i)
结果: 卫龙
老冰棍
北冰洋
牛羊配
馒头
花卷
豆包
大饼
2二、yield 能返回多个、以元组的形式存储
yield 能返回各类数据类型(python的对象)
yield 可以写多个而且都执行
yield 可以记录执行位置
yield 后边不写内容、默认返回None
yield 都是将数据一次性返回
2三、做业题:
# 1.请写出下列代码的执行结果def func1(): print('in func1')def func2(): print('in func2')ret = func1ret() #in func1ret1 = func2ret1() #func2ret2 = retret3 = ret2ret2() #in func1ret3() #in func1# 二、def func1(): print ( 'in func1' )def func2(): print ( 'in func2' )def func3(x, y): #x = func2,y = func1 x () #func2() print ( 'in func3' ) y () #func1()print ( 111 ) #111func3 ( func2, func1 ) #in func2 #in func3 #in func1print ( 222 ) #222# 三、选作题def func1(): print('in func1')def func2(x): #x == func1 print('in func2') return x #return下func1就是把func1返回def func3(y): #y == func2 print('in func3') return yret = func2(func1) #ret == func1ret() #func1()ret2 = func3(func2) #ret == func2ret3 = ret2(func1) #func2(func1) #ret3 == func1ret3() #func1()# 结果:in func2# in func1# in func3# in func2# in func1# 四、def func(arg): return arg.replace('alex', '****')def run(): msg = "Alex和你们都是好朋友" result = func(msg) print(result)run()data = run()print(data)# 结果:Alex和你们都是好朋友# Alex和你们都是好朋友# None# 五、data_list = []def func(arg): return data_list.insert(0, arg)data = func('绕不死你')print(data) #Noneprint(data_list) #data_list = ['绕不死你']# 六、def func(): print('你好呀') return '好你妹呀'func_list = [func, func, func]for item in func_list: val = item() print(val)#你好呀# 好你妹呀# 你好呀# 好你妹呀# 你好呀# 好你妹呀# 七、def func(): print('你好呀') return '好你妹呀'func_list = [func, func, func]for i in range(len(func_list)): val = func_list[i]() print(val)# 你好呀# 好你妹呀# 你好呀# 好你妹呀# 你好呀# 好你妹呀# 八、def func(): return '大烧饼'def bar(): return '吃煎饼'def base(a1, a2): return a1() + a2()result = base(func, bar)print(result) #大烧饼吃煎饼# 九、def func(): for item in range(10): pass return itemfunc()# 结果:空# 十、def func(): for item in range(10): pass yield itemfunc()# 结果:空# 十一、item = '老男孩'def func(): item = 'alex' def inner(): print(item) for inner in range(10): pass inner()func() #类型错误、int对象不可调用# 十二、l1 = []def func(args): l1.append(args) return l1print(func(1)) #[1]print(func(2)) #[1,2]print(func(3)) #[1,2,3]# 1三、name = '宝元'def func(): global name name = '男神'print(name) #宝元func()print(name) #男神# 1四、name = '宝元'def func(): print(name)func() #宝元# 1五、name = '宝元'def func(): print(name) name = 'alex'func() #报错赋值前引用的局部变量# 1六、def func(): count = 1 def inner(): nonlocal count count += 1 print(count) print(count) inner() print(count)func()#结果: 1# 2# 2# 1七、def extendList(val,list=[]): list.append(val) return listlist1 = extendList(10)list2 = extendList(123,[])list3 = extendList('a')print('list1=%s'%list1) #list1 = [10,'a']print('list2=%s'%list2) #list2 = [123]print('list3=%s'%list3) #list3 = [10,'a']# 1八、def extendList(val,list=[]): list.append(val) return listprint('list1=%s'% extendList(10)) #list1=[10]print('list2=%s'% extendList(123,[])) #list2=[123]print('list3=%s'% extendList('a')) #list3=[10, 'a']#1八、用你的理解解释一下什么是可迭代对象,什么是迭代器。# python中规定、只要具备__iter__()方法就是可迭代对象、例如:str字符串、list列表、tuple元组#具备__iter__()和__next__()方法就是一个迭代器、例如:文件句柄就是迭代器#1九、使用while循环实现for循环的本质(面试题)s = "alex"s1 = s.__iter__()while True: try: print(s1.__next__()) except StopIteration: break