生成器表達式 內置函數

一。生成器
 
生成器三種方式:
 
1)生成器函數
 
2)數據轉化
 函數


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))
# 輸出結果:
# <generator object gener at 0x0000017116671BF8>
# 111
# 222
# 333
# 444
# asd
# 555
# 666
# []      此時生成器函數運行到yield 666 的位置,因此g轉化成列表是空[]code

# 若是一開始只打印print(list(g))----->輸出結果徹底不一樣。結果以下:
# 111
# 333
# None
# 555
# [222, 444, 666]對象


3)用生成器表達式
 
列表推導式與生成器表達式比較:
 
列表推導式,生成器表達式
1)列表推導式比較直觀,佔內存
2)生成器表達式不容易看出內容,省內存.
[ 變量(加工後的數據) for 變量i in 可迭代的數據類型 ] 列表的推導式, 循環模式
[ 變量(加工後的數據) for 變量i in 可迭代的數據類型 if 條件] 列表的推導式, 篩選模式
 
列表推導式
 內存


# 打印選項1,選項2。。。直到選項10
li = ['選項%s'%i for i in range(1,11)]
print(li)utf-8

# 打印30之內能被4整除的全部整數
l1 = [i for i in range(31) if i % 4 == 0]
print(l1)字符串

# 把{'name':'alex','age':29}裏的鍵跟對應的值調換
dic = {'name':'alex','age':29}
dict = {dic[i]:i for i in dic}
print(dict)input

# 把裏面有兩個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]
print(l2)generator


生成器表達式
 hash


#  打印30之內能被4整除的全部整數
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
# 28it


 
 
二。內置函數
 
Python自帶的函數。好比range(),input(),len(),print(),dir(),max(),int(),min(),sum(),str(),list(),tuple(),id()
 
1.
 


#print()
print('666',end='')
print('666')
# 輸出結果:  666666
print(1,2,3,4,5,sep='|')
# 輸出結果:  1|2|3|4|5

# 能夠直接把想寫的內容寫入文件
f = open('file','w',encoding='utf-8')
print(666,file=f)
f.close()


2.
 
dir() 查找對象的全部方法
print(dir([]))
3.
 


locals()  將局部的變量儲存起來
globals() 將全局的變量,函數名,等等 儲存起來.
def func():
    name = 'alex'
    print(locals())
    print(globals())
func()


4.
 
help(str) 將你查詢的對象全部信息都拿出來.
5.
 


# abs()取絕對值
print(abs(-1))
# 結果:  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 判斷此變量是否是函數名
name = 'alex'
print(callable(name))   #False
def func():
    print(666)
print(callable(func))   #True


7.
 


#hash() 經過哈希表的規則,將對象轉換成哈希值
print(hash('fdsakfhdsafsda'))
print(hash('fd'))
print(hash('fsdsafsda'))
print(hash('fdsdsafsda'))
print(hash('dsakhdsafsda'))
print(hash(('a','b')))
print(hash(True))
# 輸出結果:
# 1415579162147690152
# 5615420092049468879
# 4610262276372645226
# -5880321922146481963
# -9092531373745077475
# 1754971611771896552
# 1


8.
 
#all 可迭代對象裏面的全部的值轉化成bool值若是都是True則,返回True
print(all([1,2,3,0]))    #False
9.
 


#十進制轉化成二進制
print(bin(100))     #0b1100100
# #將十進制轉化成八進制
print(oct(9))     #0o11
# #將十進制轉化成十六進制
print(hex(33))     #0x21


10.
 
#數據類型str()
#float  :有限小數,無線循環小數,不包含(無線不循環小數)
print(1.35432,type(1.35432))    #1.35432 <class 'float'>
print(float(3))      #3.0
11.
 


complex()
'''
實數: 有理數,無理數.
虛數:j2
複數: 1 + 2j
'''


12.
 
#divmod() 分頁
print(divmod(7,2)) #(3,1)(商,餘數)
13.重要的
 


#enumerate(iterable,start 起始值) 枚舉
l = ['手機','電話','耳機',]
for i in enumerate(l):
    print(i)
# 輸出結果:
# (0, '手機')
# (1, '電話')
# (2, '耳機')
l = ['手機','電話','耳機',]
for i,j in enumerate(l,100):
    print(i,j)
# 輸出結果:
# 100 手機
# 101 電話
# 102 耳機


14.
 

#eval 有返回值 除去字符串兩邊的引號,返回裏面的內容 #exec 沒有返回值 除去字符串兩邊的引號,執行裏面的代碼    #流程語句 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

相關文章
相關標籤/搜索