1. 程式人生 > >python 基礎篇 14 程程器表達式 內置函數

python 基礎篇 14 程程器表達式 內置函數

條件 個性 size cached 全局 ... eval ext 對象

昨日內容回顧
可叠代對象:
內部含有__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 程程器表達式 內置函數