匿名函數(shù)
例如:
add = lambda x : x+1
add(5) # 6
add:函數(shù)名
lambda:定義匿名函數(shù)的關(guān)鍵字
x參數(shù)
:格式吧
x+1:返回值
當(dāng)需要多個(gè)參數(shù)時(shí):在x后加上,加參數(shù)即可。
存在的意義:有些函數(shù)很簡(jiǎn)單,避免我們麻煩的去定義。
內(nèi)置函數(shù)
常用print()#輸出,input()#交互輸入,open()#文件操作等都不說(shuō)了。
len()#返回長(zhǎng)度,dir()#查看方法,help()#查看幫助,當(dāng)不知道調(diào)用該函數(shù)的參數(shù)時(shí),可以help()一下。
callable(名字)#查看該名字是否可以被調(diào)用。同時(shí)可以被調(diào)用也就是函數(shù),同理可以檢測(cè)是否是函數(shù),返回bool類(lèi)型。
id()#返回該對(duì)象的內(nèi)存地址。
hash()#可哈希就是不可變對(duì)象,不可哈希就是可變對(duì)象。返回計(jì)算出的一個(gè)哈希值。
思考:字典取值快的原因?
我們都知道字典的key值是不可變對(duì)象,也就是可哈希對(duì)象,內(nèi)部可以使用hash計(jì)算key的哈希值,將value存儲(chǔ)在這個(gè)哈希值的內(nèi)置地址,當(dāng)取數(shù)據(jù)的時(shí)候,直接拿內(nèi)存地址,這樣就很快。
exec()、eval()#將字符串轉(zhuǎn)化為python代碼執(zhí)行。exec常用于處理流程內(nèi)代碼,eval常用于處理計(jì)算類(lèi)。
示例:
exec("print(name)") #name
eval("print(name)") #name
區(qū)別:exec沒(méi)有返回值,eval有返回值。
示例:
print(exec('1+2+3+4+5')) #輸出為空
print(eval('1+2+3+4+5')) #15
compile()#編譯成exec執(zhí)行或eval執(zhí)行,參數(shù)1:如果是在本地讀取文本就填寫(xiě)該文本,參數(shù)2:如果是在文件中讀取內(nèi)容,就填寫(xiě)文件名,不是就填'',參數(shù)3:編譯成eval或exec執(zhí)行。
示例:
code = 'print(123456789)'
com = compile(code,'','exec')
exec(com)
另:當(dāng)code中存在交互類(lèi)代碼時(shí),寫(xiě)成:
code = 'name = input("輸入你的姓名:")'
com = compile(code,'','single')
exec(com)
print(name)
雖然修改成single,但是執(zhí)行還是使用exec。
bin()#轉(zhuǎn)換為二進(jìn)制。oce()轉(zhuǎn)換為八進(jìn)制。hex()轉(zhuǎn)換為十六進(jìn)制
abs()#絕對(duì)值。
divmod():
print(divmod(10,3))#(3,1)也就是10除以3,得到的第一個(gè)值是商,第二個(gè)值為余數(shù)。
round():round(5.213123,3)#5.213會(huì)四舍五入。
pow()#冪運(yùn)算:pow(2,3)#8,pow(2,2,3)#1,2的2次方除以3取余。
sum()#求和。mix()#求最小值。max()#求最大值。
reversed(),反轉(zhuǎn)(倒敘),返回一個(gè)新的對(duì)象變成迭代器。
all()#print([0,'123456'])#False,0返回False,一假必假。
any()#print([0,'123456'])#True,一真必真。
sorter()#排序:
list1 = [5,3,7,9,4]
list2 = sorted(list1)
print(list1)
print(list2)
#結(jié)果:
#[5,3,7,9,4]
#[3,4,5,7,9]
#返回一個(gè)新的列表,不改變?cè)斜韮?nèi)容。
zip():
示例:
name = ['張三','小花','李四']
sex = ['男','女','男']
#生成一一對(duì)應(yīng)的關(guān)系,zip返回的是一個(gè)迭代器。我們需要for循環(huán)取出。
for iter in zip(name,sex):
? ? print(i)
#結(jié)果:
#('張三','男')
#('小花','女')
#('李四','男')
#如果兩個(gè)數(shù)量不統(tǒng)一,以少的為準(zhǔn)。如果我的name多了一個(gè)王五,而沒(méi)有sex,就不會(huì)輸出王五。
另:zip中的參數(shù)還可以是多個(gè)。
filter():
示例:
def test(x):
? ? return x % 2 ==1
ret = filter(test,[1,2,3,4])
#ret 同樣返回的是迭代器。
for i in ret:
? ? print(i)
#結(jié)果:
#1
#3
#也就是將[1,2,3,4]中的值一個(gè)一個(gè)帶入到test中。
map():
示例:
ret = map(abs,[1,2,3,-4,-5])
for i in ret:
? ? print(i)
#結(jié)果:1,2,3,4,5
另:filter和map很相似,區(qū)別就是filter并沒(méi)有改變?cè)瓉?lái)的值,返回的是原本就有的值
map是修改了原來(lái)的值。