內(nèi)置函數(shù)
Python內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。當(dāng)需要查詢某個函數(shù)的功能和說明時,可以通過查看官方文檔或者通過在Python shell中使用help(cmd)查看。
-
幾個常用的函數(shù):
常用的內(nèi)置函數(shù)中文說明- abs() 求絕對值 >>> abs(-100)
- max() 返回最大的值 >>>max(1,2,4,6,8)
- int() 轉(zhuǎn)換為int類型 >>> int(10.12)
- float() 轉(zhuǎn)換為浮點數(shù) >>> float('10.12')
- str() 轉(zhuǎn)換為字符串 >>> str(100)
- bool() 轉(zhuǎn)換為布爾,1為 True,空為False
- hex() 轉(zhuǎn)換整數(shù)為16進制表示的字符串
- all() 可迭代對象中所有的值都為真,則返回真,如果可迭代對象為空,返回真。 >>> all([]) 返回真
- any() bool全為假的情況為假:None,空,0,F(xiàn)alse >>> any([]) 返回
假 - globals() 查看全局作用域
- locals() 查看局部作用域
- pow() 取平方,并取余 >>> pow(3,2,2)
-
定義函數(shù)
>>> def my_fun(x): ... if x > 0: ... return x ... else: ... return -x ... >>> my_fun(9) 9 >>> my_fun(-8) 8
如果沒有return語句,函數(shù)執(zhí)行完畢后也會返回結(jié)果,只是結(jié)果為None。return None可以簡寫為return。
如果要調(diào)用另一個文件中的函數(shù),可以在文件開頭加上:
from FILE_NAME import FUN_NAME
-
如果想定義一個什么事情都不做的空函數(shù)可以用
pass
這樣可以防止報錯(同理,也可以放在空語句中):def nop(): pass
匿名函數(shù)
匿名函數(shù)沒有名字,函數(shù)體自帶return:
lambda x,y,z=1:x+y+z # 將會自動返回冒號后面的值
匿名函數(shù)的應(yīng)用場景: 適用于一次使用,臨時使用的場景。
內(nèi)置函數(shù)和匿名函數(shù)的使用
內(nèi)置函數(shù)和匿名函數(shù)可以結(jié)合在一起,實現(xiàn)非常精巧的功能。
如:
# 比較字典中值的大小,并返回key的值
a={'tom':22,'boy':4,'coco':33,'dog':18}
方法一:交換字典key 和值的順序,直接進行比較:
#使用zip() 函數(shù)交換字典中的值
b=list(zip(a.values(),a.keys()))
print(b)
# 使用max(),取出key:
print(max(b)[1])
輸出結(jié)果:
[(22, 'tom'), (4, 'boy'), (33, 'coco'), (18, 'dog')]
coco
優(yōu)化之后就是:
# max() 自帶了遍歷功能,zip()會產(chǎn)生一個裝飾器,可省去list()
print(max(zip(a.values(),a.keys()))[1])
方法二:結(jié)合max()參數(shù),使用匿名函數(shù),返回values
# 指定key的參數(shù),返回key值比較
print(max(a,key=lambda name:a[name]))
方法三: 使用sort()函數(shù),取值,排序
# reverse=True 表示反轉(zhuǎn)順序
print(sorted(a,key=lambda name:a[name],reverse=True)[0])
map
對列表信息進行改寫:
name=['a','b','c','d']
# map()得到的是一個迭代器,使用list遍歷
res=map(lambda x:x+'_df',name)
print(list(res))
# 也可以在匿名函數(shù)中做簡單的判斷
res1=map(lambda x:x if x=='a' else x+'xxx',name)
print(list(res1))
reduce
reduce() 用于合并一個序列,也可以以用于累加
#python3中先要導(dǎo)入模塊
from functools import reduce
# 沒有指定初始值時,先取序列中的第一個值作為初始值
res=reduce(lambda x,y:x+y,range(101))
print(res)
輸出: 5050
也可以指定初始值100:
from functools import reduce
res=reduce(lambda x,y:x+y,range(101),100)
print(res)
輸出: 5150
filter
filter()可以對數(shù)據(jù)進行過濾。
name = ['a_12', 'b_12', 'c_12', 'd']
res=filter(lambda s:s.endswith('12'),name)
print(list(res))
輸出:['a_12', 'b_12', 'c_12']
eval
eval可以使字符串以命令的方式運行:
cmd='print(x)'
eval(cmd,{'x':0},{'x'}:100) # 第一個表示全局變量,第二個參數(shù)表示局部變量,優(yōu)先選擇局部變量
輸出:100