生成器表达式 内置函数
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
一。生成器
?
生成器三種方式:
?
1)生成器函數(shù)
?
2)數(shù)據(jù)轉(zhuǎn)化
?
def gener():
??? print(111)
??? yield 222
??? print(333)
??? count = yield 444
??? print(count)
??? print(555)
??? yield 666
g = gener()
print(g)
# print(list(g))
print(g.__next__())
print(g.__next__())
print(g.send('asd'))
print(list(g))
# 輸出結(jié)果:
# <generator object gener at 0x0000017116671BF8>
# 111
# 222
# 333
# 444
# asd
# 555
# 666
# []????? 此時(shí)生成器函數(shù)運(yùn)行到y(tǒng)ield 666 的位置,所以g轉(zhuǎn)化成列表是空[]
# 如果一開(kāi)始只打印print(list(g))----->輸出結(jié)果完全不同。結(jié)果如下:
# 111
# 333
# None
# 555
# [222, 444, 666]
3)用生成器表達(dá)式
?
列表推導(dǎo)式與生成器表達(dá)式比較:
?
列表推導(dǎo)式,生成器表達(dá)式
1)列表推導(dǎo)式比較直觀,占內(nèi)存
2)生成器表達(dá)式不容易看出內(nèi)容,省內(nèi)存.
[ 變量(加工后的數(shù)據(jù)) for 變量i in 可迭代的數(shù)據(jù)類型 ] 列表的推導(dǎo)式, 循環(huán)模式
[ 變量(加工后的數(shù)據(jù)) for 變量i in 可迭代的數(shù)據(jù)類型 if 條件] 列表的推導(dǎo)式, 篩選模式
?
列表推導(dǎo)式
?
# 打印選項(xiàng)1,選項(xiàng)2。。。直到選項(xiàng)10
li = ['選項(xiàng)%s'%i for i in range(1,11)]
print(li)
# 打印30以內(nèi)能被4整除的所有整數(shù)
l1 = [i for i in range(31) if i % 4 == 0]
print(l1)
# 把{'name':'alex','age':29}里的鍵跟對(duì)應(yīng)的值調(diào)換
dic = {'name':'alex','age':29}
dict = {dic[i]:i for i in dic}
print(dict)
# 把里面有兩個(gè)e元素的羅列出來(lái)組成列表
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]
print(l2)
生成器表達(dá)式
?
#? 打印30以內(nèi)能被4整除的所有整數(shù)
l1 = (i for i in range(31) if i % 4 == 0)
print(l1)???? #<generator object <genexpr> at 0x0000026AFA1E1BF8>
for i in l1:
??? print(i)
#
# 0
# 4
# 8
# 12
# 16
# 20
# 24
# 28
?
?
二。內(nèi)置函數(shù)
?
Python自帶的函數(shù)。比如range(),input(),len(),print(),dir(),max(),int(),min(),sum(),str(),list(),tuple(),id()
?
1.
?
#print()
print('666',end='')
print('666')
# 輸出結(jié)果:? 666666
print(1,2,3,4,5,sep='|')
# 輸出結(jié)果:? 1|2|3|4|5
# 可以直接把想寫的內(nèi)容寫入文件
f = open('file','w',encoding='utf-8')
print(666,file=f)
f.close()
2.
?
dir() 查找對(duì)象的所有方法
print(dir([]))
3.
?
locals()? 將局部的變量?jī)?chǔ)存起來(lái)
globals() 將全局的變量,函數(shù)名,等等 儲(chǔ)存起來(lái).
def func():
??? name = 'alex'
??? print(locals())
??? print(globals())
func()
4.
?
help(str) 將你查詢的對(duì)象所有信息都拿出來(lái).
5.
?
# abs()取絕對(duì)值
print(abs(-1))
# 結(jié)果:? 1
def func(ret):
??? print(44)
# 最大值
ret = max(1,2,-3,key=abs)
print(ret)???? #-3
# #最小值
ret = min([1,2,3])
print(ret)????? #1
# #sum iterable,初始值
ret = sum([1,2,3],10)
print(ret)?????? #16
6.
?
#callable 判斷此變量是不是函數(shù)名
name = 'alex'
print(callable(name))?? #False
def func():
??? print(666)
print(callable(func))?? #True
7.
?
#hash() 通過(guò)哈希表的規(guī)則,將對(duì)象轉(zhuǎn)換成哈希值
print(hash('fdsakfhdsafsda'))
print(hash('fd'))
print(hash('fsdsafsda'))
print(hash('fdsdsafsda'))
print(hash('dsakhdsafsda'))
print(hash(('a','b')))
print(hash(True))
# 輸出結(jié)果:
# 1415579162147690152
# 5615420092049468879
# 4610262276372645226
# -5880321922146481963
# -9092531373745077475
# 1754971611771896552
# 1
8.
?
#all 可迭代對(duì)象里面的所有的值轉(zhuǎn)化成bool值如果都是True則,返回True
print(all([1,2,3,0]))??? #False
9.
?
#十進(jìn)制轉(zhuǎn)化成二進(jìn)制
print(bin(100))???? #0b1100100
# #將十進(jìn)制轉(zhuǎn)化成八進(jìn)制
print(oct(9))???? #0o11
# #將十進(jìn)制轉(zhuǎn)化成十六進(jìn)制
print(hex(33))???? #0x21
10.
?
#數(shù)據(jù)類型str()
#float? :有限小數(shù),無(wú)線循環(huán)小數(shù),不包含(無(wú)線不循環(huán)小數(shù))
print(1.35432,type(1.35432))??? #1.35432 <class 'float'>
print(float(3))????? #3.0
11.
?
complex()
'''
實(shí)數(shù): 有理數(shù),無(wú)理數(shù).
虛數(shù):j2
復(fù)數(shù): 1 + 2j
'''
12.
?
#divmod() 分頁(yè)
print(divmod(7,2)) #(3,1)(商,余數(shù))
13.重要的
?
#enumerate(iterable,start 起始值) 枚舉
l = ['手機(jī)','電話','耳機(jī)',]
for i in enumerate(l):
??? print(i)
# 輸出結(jié)果:
# (0, '手機(jī)')
# (1, '電話')
# (2, '耳機(jī)')
l = ['手機(jī)','電話','耳機(jī)',]
for i,j in enumerate(l,100):
??? print(i,j)
# 輸出結(jié)果:
# 100 手機(jī)
# 101 電話
# 102 耳機(jī)
14.
?
#eval 有返回值 除去字符串兩邊的引號(hào),返回里面的內(nèi)容
#exec 沒(méi)有返回值 除去字符串兩邊的引號(hào),執(zhí)行里面的代碼??? #流程語(yǔ)句
s = "{'name':'alex'}"
s1 = "1+2+3+4"
print(eval(s),type(eval(s)))?????????? #{'name': 'alex'} <class 'dict'>
print(exec(s),type(exec(s)))?????????? #None <class 'NoneType'>
print(eval(s1))??????????????????????? #10
code = '''for i in range(10):
??? print(i)'''
print(exec(code))???????????????????? # 0 1 2 3 4 5 6 7 8 9 None
?
?
轉(zhuǎn)載于:https://my.oschina.net/u/3657436/blog/1619889
總結(jié)
以上是生活随笔為你收集整理的生成器表达式 内置函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: SVN与git的区别【图文经典版】
- 下一篇: 【368天】跃迁之路——程序员高效学习方