標籤:help package cache names 優點 case def pytho ;內
昨日內容回顧
可迭代對象:
內部含有__iter__方法的就是可迭代對象.
可迭代對象不能取值,因為內部不含有__next__方法.
可迭代對象 ---> 迭代器.
obj.__iter__()
iter(obj)
迭代器:
內部含有__iter__,__next__ 方法的對象.
迭代器的優點:
1,節省記憶體.
2,惰性機制.
3,單向,無法復原.
如何判斷可迭代對象,迭代器.
1,__iter__ in dir(obj)
2,?
產生器:
自己用python代碼寫的迭代器就是產生器.
產生器的本身就是迭代器.
def func():
print(1111)
count = yield 222
print(count)
yield 333
g_obj = func()
g_obj.send(666)
g_obj.__next__()
--------------->>>>>>>>>>>>>本節重點 產生器運算式 列表推導式<<<<<<<<<<<<<<<<<-------------------
構建一個列表:[‘python1期‘, ‘python2期‘, ‘python3期‘, ‘python4期‘, ‘python6期‘, ‘python7期‘, ‘python8期‘, ‘python9期‘, ‘python10期‘]
l1 = []
for i in range(1,14):
l1.append(‘python%d期‘ % i)
print(l1)
列表推導式:
# l3 = [ ‘python%s期‘ % i for i in range(1, 14)]
# print(l3)
[變數(加工後的變數) for 變數 in iterable] 迴圈模式
# 優點:
# 1,節省代碼,一行搞定.
# 2,看著高大上.
# 缺點:
# ,不好排錯.
#整體:
# 凡是用列表推導式構造的列表對象,用其他方式都可構建.,
非常複雜的列表,列表推導式是構建不出的,
# 列表推導式比較有魔性.
# 構建一個列表:
# [‘技師0號‘,‘技師1號‘... ‘技師15號‘]
# print([‘技師%s號‘ % i for i in range(16)])
# [‘護士1號‘, ‘護士3號‘,‘護士5號‘, ...,‘護士13號‘]
# print([‘護士%s號‘ % i for i in range(1, 14, 2)])
# 分類:
# [變數(加工後的變數) for 變數 in iterable] 迴圈模式
# [變數(加工後的變數) for 變數 in iterable if 條件] 篩選模式
# 10以內所有數的平方
# print([i*i for i in range(11)])
# 30以內所有能被3整除的數的平方
# print([i**2 for i in range(31) if i % 3 == 0])
# 100 以內所有的奇數.
# print([i for i in range(1,101,2)])
# print([i for i in range(101) if i % 2 == 1])
產生器運算式
1.把列表解析的[]換成()得到的就是產生器運算式
2.列表解析與產生器運算式都是一種便利的編程方式,只不過產生器運算式更節省記憶體
g_obj = (‘python%s期‘ % i for i in range(1,14)) # 迴圈模式
g_obj1 = (‘python%s期‘ % i for i in range(1,14) if i % 2 == 0) # 篩選模式
print(g_obj)
print(g_obj.__next__())
print(g_obj.__next__())
print(g_obj.__next__())
print(g_obj.__next__())
for i in g_obj1:
print(i)
# 產生器:兩種方式:
# 產生器函數. yield
# 產生器運算式
# 為什麼有產生器:
# 產生器本身是自己用python代碼構建的,這樣就滿足了個人化需求,滿足以後你工作中需要.
#把列表names中有兩個"e"的字元取到# names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘],# [‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]]列表推導式# l2 = [name for i in names for name in i if name.count(‘e‘) == 2] 普通方法:# l1 = [] # for i in names:# for name in i:# if name.count(‘e‘) == 2:# l1.append(name)# print(l1)# print(l2)把mcase中的K,V索引值互換位置# mcase = {‘a‘: 10, ‘b‘: 34}# print({mcase[i]: i for i in mcase})
------>>>>>>>內建函數:
這個東西慢慢學吧,可以按住Ctrl看源碼,也可以help一下,用著就都會了
1.1範圍相關
locals :函數會以字典的類型返回當前位置的全部局部變數。
globals:函數以字典的類型返回全部全域變數。
a = 1b = 2print(locals())print(globals())# 這兩個一樣,因為是在全域執行的。##########################def func(argv): c = 2 print(locals()) print(globals())func(3)#這兩個不一樣,locals() {‘argv‘: 3, ‘c‘: 2}#globals() {‘__doc__‘: None, ‘__builtins__‘: <module ‘builtins‘ (built-in)>, ‘__cached__‘: None, ‘__loader__‘: <_frozen_importlib_external.SourceFileLoader object at 0x0000024409148978>, ‘__spec__‘: None, ‘__file__‘: ‘D:/lnh.python/.../內建函數.py‘, ‘func‘: <function func at 0x0000024408CF90D0>, ‘__name__‘: ‘__main__‘, ‘__package__‘: None}
1.2.1 字串類型代碼的執行 eval,exec,complie
eval(‘2 + 2‘) # 4
n=81eval("n + 4") # 85
eval(‘print(666)‘) # 666
exec:執行字串類型的代碼。
s = ‘‘‘
for i in [1,2,3]:
print(i)
‘‘‘
exec(s)
complie沒用,可以不記
其他函數在這我就不一一列舉了,如有需求可找度娘
python 基礎篇 14 程程器運算式 內建函數