1. 程式人生 > >python學習筆記(四):生成器、內置函數、json

python學習筆記(四):生成器、內置函數、json

pen ear 數據 數字 strong 通過 lte callable 通用

一、生成器

生成器是什麽?其實和list差不多,只不過list生成的時候數據已經在內存裏面了,而生成器中生成的數據是當被調用時才生成呢,這樣就節省了內存空間。

1、 列表生成式,在第二篇博客裏面我寫了三元運算符,和那個有點像,如果要生成列表[‘01’, ‘02’, ‘03’, ..., ‘10’]怎麽做?除了循環還可以用一行語句代替循環生成

list = [str(i).zeffill() for i in range(1,11)]

  1. 生成器:要創建一個generator,有很多種方法。第一種方法很簡單,只要把一個列表生成式的[]改成(),就創建了一個generator

g=(x*x for x in range(1,11))

print(g)

<generator object <genexpr> at 0x1036ff258>#運行結果

創建listgenerator的區別僅在於最外層的[]()list的元素我們可以一個個打印出,如果要打印generator中的元素需要借助next方法

g=(x*x for x in range(1,11))

print(next(g))

print(next(g))

print(next(g))

print(next(g))

但是generator保存的是算法,每次調用next(g),就計算出g的下一個元素的值,直到計算到最後一個元素,沒有更多的元素時,拋出

StopIteration的錯誤。可以通過for循環來叠代它,並且不需要關心StopIteration的錯誤。

g=(x*x for x in range(1,11))

for i in g:

print(i)

二、常用內置函數

# print(all([1,2,3,4,5]))#是否可叠代的對象中的所有元素都為真
# print(any([0,1]))#判斷該對象中是否有一個為真
# print(bin(4))#十進制轉二進制 二進制的格式為:0b100->1*2+0*1+0*00b為開頭標誌
# print(bool(‘‘))#將一個對象轉換為布爾類型,以空格為對象返回的也是

True,沒什麽大用處
# print(bytearray(‘abcdefg‘,encoding=‘utf-8‘))#將字符串轉換成byte格式
# print(bytearray())
# print(bytearray(12))
# print(callable(‘adsf‘))#判斷該對象是否可被調用,暫時未發現有什麽用途
# print(chr(65))#打印數字對應得ascii A,換句話就是將數字轉化成對應的ascii
# print(chr(97))#打印數字對應得ascii a
# print(ord(‘m‘))#打印字符對應的ascii碼值 109
# print(dict(s=‘m‘,m=‘ss‘))#將鍵值對的格式轉換成字典
# print(dir(‘sd‘))#打印對象可調用的的方法
# # ###非常實用,當不知道某個對象有哪些方法是可以通過此查看函數
# print(filter(lambda x:x>5,[12,3,12,2,1,2,35]))#把後面的叠代對象根據前面的方法篩選
# print(map(lambda x:x>5,[1,2,3,4,5,6]))
print(random.randint(1,9))#一次性隨機取一個數字
print(random.sample(range(1,9),3))#一次性隨機取三個數字
print(globals())#返回程序中所有的變量
print(globals())#返回程序內所有的變量,返回的是一個字典
print(locals())#返回局部變量
print(hash(‘aaa‘))#把一個字符串哈希成一個數字
print(hex(111))#數字轉成16進制 #16進制格式:0o157
print(max(111,12))#取最大值
print(oct(111))#把數字轉換成8進制
print(round(11.11,2))#取幾位小數
print(sorted([2,31,34,6,1,23,4]))#排序
dic={1:2,3:4,5:6,7:8}
print(sorted(dic.items()))#按照字典的key排序
print(sorted(dic.items(),key=lambda x:x[1]))#按照字典的value排序

__import__(‘decorator‘)#導入一個模塊

三、匿名函數

如果這個函數只執行一次的話,那就可以定義一個匿名函數,匿名函數只能處理比較簡單的處理邏輯,只能寫簡單的表達式,不能寫循環 判斷,比如三元運算符。

匿名函數定義使用lambda關鍵字,比如說要定義一個函數,它的功能是返回兩個數相加和,就可以使用lambda,代碼如下:

s = lambda x,y:x+y#冒號號前面的x,y是入參,冒號後面的是返回值

print(s(1,9))#因為函數即變量,如果沒有定一個變量把lambda存起來的話,它就不在內存裏,沒法執行,所有把它放到s這個變量裏面

四、json處理

json是一種所有語言中都通用的key-value數據結構的數據類型,很像python中的字典,json處理使用json模塊,json模塊有下面常用的方法:

import json

dic = {"name":"niuniu","age":18}

print(json.dumps(dic))#把字典轉成json串

fj = open(‘a.json‘,‘w‘)

print(json.dump(dic,fj))#把字典轉換成的json串寫到一個文件裏面

s_json = ‘{"name":"niuniu","age":20,"status":true}‘

print(json.loads(s_json))#把json串轉換成字典

fr = open(‘b.json‘,‘r‘)

print(json.load(fr))#從文件中讀取json數據,然後轉成字典

python學習筆記(四):生成器、內置函數、json