一、建議小寫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