python 基礎篇 14 程程器表達式 內置函數
昨日內容回顧
可叠代對象:
內部含有__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 = 1 b = 2 print(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=81
eval("n + 4") # 85
eval(‘print(666)‘) # 666
exec:執行字符串類型的代碼。
s = ‘‘‘
for i in [1,2,3]:
print(i)
‘‘‘
exec(s)
complie沒用,可以不記
其他函數在這我就不一一列舉了,如有需求可找度娘
python 基礎篇 14 程程器表達式 內置函數