python匿名函數 與 內置函數
一、匿名函數
1.定義:
匿名函數顧名思義就是指:是指一類無需定義標識符(函數名)的函數或子程序。
2.語法格式:lambda 參數:表達式
lambda語句中,開頭先寫關鍵字lambda,冒號前是參數,可以有多個,用逗號隔開;冒號右邊的為表達式,需要註意的是只能有一個表達式。由於lambda返回的是函數對象(構建的是一個函數對象),所以需要定義一個變量去接收。
3.註意點:lambda 函數可以接收任意多個參數 (包括可選參數) 並且返回單個表達式的值。lambda 函數不能包含命令,包含的表達式不能超過一個。
4.匿名函數優點:
- 使用Python寫一些腳本時,使用lambda可以省去定義函數的過程,讓代碼更加精簡。
- 對於一些抽象的,不會被別的地方再重復使用的函數,有時候函數起個名字也是個難題,使用lambda不需要考慮命名的問題
- 使用lambda在某些時候然後代碼更容易理解
5.應用:在內置函數 max() 求最大值,min()求最小值, map() 映射, reduce 合並, filter() 過濾 中會用到!
簡單代碼舉例:
1 salaries={ 2 ‘egon‘:3000, 3 ‘alex‘:100000000, 4 ‘wupeiqi‘:10000, 5 ‘yuanhao‘:2000 6 } 7 f = lambda k: salaries[k] 8 print(f) 9 print(f(‘egon‘))
執行結果:
<function <lambda> at 0x0000000000413E18> 3000
二、內置函數
內置參數詳解 https://docs.python.org/3/library/functions.html?highlight=built#ascii
1.abs() 取絕對值 數據類型 必須是 整型!
1 print(abs(1)) 2 print(abs(-1)) 3 print(abs(‘a‘))
執行結果:
1 1 Traceback (most recent call last): File "F:/py_fullstack_s4/day25/內置函數.py", line 3, in <module> print(abs(‘a‘)) TypeError: bad operand type for abs(): ‘str‘
2.all(可叠代對象) 返回布爾值 只要任何一個值不為真,返回Flase,可叠代對象為空時,返回True
1 print(all(‘‘)) 2 print(all((1,‘‘,None,0))) 3 print(all(i for i in range(1,10))) #從1開始取值,排除0
執行結果:
True False True
3.any(可叠代對象) 返回布爾值 只要任何一個值為真,返回True,可叠代對象為空時,返回Flase
1 print(any(‘‘)) 2 print(any([None,1,2,‘‘]))
執行結果:
False True
4.將十進制轉換成 :bin() 二進制 hex() 十六進制 oct()八進制
1 print(bin(12)) #二進制 2 print(hex(12)) #十六進制 3 print(oct(12)) #八進制
執行結果:
1 0b1100 2 0xc 3 0o14
5.數據類型:int() 整型;str() 字符串;list()列表;tuple()元組;dict()字典;set() 集合;frozenset() 不可變集合
is 判斷身份,身份運算,根據id去判斷身份
1 num =1 2 s = "adxz" 3 l = [1,2.3,4] 4 d = {1:1,"z":2} 5 print(type(d)) 6 print(type(l)) 7 print(type(s)) 8 print(num is 1) 9 10 d = dict(x=1,y=2,z="3") #生成字典的另一種方式 11 print(d) 12 s = {1,2,3,4,4,3,2,5} #集合 13 print(s) 14 s.add((6,7)) 15 print(s) 16 f = frozenset(s) #不可變集合 17 print(f) 18 print(type(f))
執行結果:
1 <class ‘dict‘> 2 <class ‘list‘> 3 <class ‘str‘> 4 True 5 {‘x‘: 1, ‘y‘: 2, ‘z‘: ‘3‘} 6 {1, 2, 3, 4, 5} 7 {1, 2, 3, 4, 5, (6, 7)} 8 frozenset({1, 2, 3, 4, 5, (6, 7)}) 9 <class ‘frozenset‘>
6.bool() 判斷布爾值
1 print(bool(2>1)) 2 print(bool(2<1))
執行結果:
1 True 2 False
7.bytes() bytes 字節 指定編碼格式否則報錯 type() 查看變量 是 哪種數據類型
1 s = ‘abcdefg‘ 2 print(s) #查看字符串s 3 print(type(s)) #查看字符串類型 4 s1 = bytes(s,encoding=‘utf-8‘) #查看字符串類型 5 print(s1)
執行結果:
1 abcdefg 2 <class ‘str‘> 3 b‘abcdefg‘
8.ASCII碼轉換 :chr() ASCII轉換 數字轉換成字符;ord() ASCII轉換 字符轉換成數字
1 print(chr(81)) #根據位置找值 2 print(ord(‘A‘)) #根據值找位置
執行結果:
1 Q 2 65
9.callable() 判斷是否為函數,括號內傳入函數名 complex() 定義復數
1 x = complex(1-2j) #定義一個復數 2 print(type(x)) #查看函數類型 3 print(x.real) #打印x 的實部 4 print(x.imag) #打印x 的虛部 5 print(callable(x)) #查看是否是函數 6 7 def test(): #定義函數 8 pass 9 print(callable(test)) #查看是否是函數
執行結果:
1 <class ‘complex‘> 2 1.0 3 -2.0 4 False 5 True
10.幫助 dir(對象) 查看對象都能調用什麽方法;help()直接查看 函數 具體的幫助信息
1 a = ‘hnaxhoqihcqew0‘ 2 print(dir(a)) #查看調用方法 help()直接查看具體的幫助信息
執行結果:
[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getnewargs__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mod__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__rmod__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘capitalize‘, ‘casefold‘, ‘center‘, ‘count‘, ‘encode‘, ‘endswith‘, ‘expandtabs‘, ‘find‘, ‘format‘, ‘format_map‘, ‘index‘, ‘isalnum‘, ‘isalpha‘, ‘isdecimal‘, ‘isdigit‘, ‘isidentifier‘, ‘islower‘, ‘isnumeric‘, ‘isprintable‘, ‘isspace‘, ‘istitle‘, ‘isupper‘, ‘join‘, ‘ljust‘, ‘lower‘, ‘lstrip‘, ‘maketrans‘, ‘partition‘, ‘replace‘, ‘rfind‘, ‘rindex‘, ‘rjust‘, ‘rpartition‘, ‘rsplit‘, ‘rstrip‘, ‘split‘, ‘splitlines‘, ‘startswith‘, ‘strip‘, ‘swapcase‘, ‘title‘, ‘translate‘, ‘upper‘, ‘zfill‘]
11.divmod(int1,int2) 兩個數做除法 int1/int2;返回值是得到一個元組(整除的值,取余的值);主要應用於網頁的分頁
1 print(divmod(10,2)) 2 print(divmod(10,3))
執行結果:
(5, 0) (3, 1)
12.enumerate()
enumerate函數說明:
- 函數原型:enumerate(sequence, [start=0])
- 功能:將可循環序列sequence以start開始分別列出序列數據和數據下標(可自定義起始值)
- 即對一個可遍歷的數據對象(如列表、元組或字符串),enumerate會將該數據對象組合為一個索引序列,同時列出數據和數據下標,以元組的形式輸出結果
1 list = [‘ni‘,‘hao‘,‘ma‘,‘hello‘,‘world‘] 2 for i in enumerate(list,1): 3 print(i)
執行結果:
(1, ‘ni‘) (2, ‘hao‘) (3, ‘ma‘) (4, ‘hello‘) (5, ‘world‘)
13.hash() hash() 哈希算法,應用:進行數據校驗
特性:
1、字符串改變,得到的數值必將改變
2、只要算法一致,得到的值永遠不會變,長度也不會改變。
3、hash值不能逆推
1 #字符串類型 2 x = "hello" 3 y = ‘hello‘ #x和y 兩個值相等 4 print(hash(x)) 5 print(hash(y)) 6 y = ‘hellobuxaoixax‘ #改變y 7 print(hash(x)) 8 print(hash(y))
執行結果:
4282436752230277468 4282436752230277468 4282436752230277468 -397579801337672607
14.eval() 將字符串 轉換成 表達式 形式 進行運算
15.id() id() 查看唯一標識身份信息 字符串一樣,數字超過一定長度就不同
1 >>> x =10 2 >>> y =10 3 >>> print(id(x)) 4 1393927552 5 >>> print(id(y)) 6 1393927552 7 >>> x = 100000000000000000000000 8 >>> y = 100000000000000000000000 9 >>> print(id(x)) 10 42716256 11 >>> print(id(y)) 12 42716296 13 >>>
16.#拉鏈 zip()
zip(),放入兩個叠代器,一一對應重新取值,以元組的形式輸出。不管是某一方的個數多,都不會輸出。
l1 = [1,2,3,4,5,6] s = ‘hello‘ z = zip(l1,s) for i in z: print(i)
執行結果:
(1, ‘h‘) (2, ‘e‘) (3, ‘l‘) (4, ‘l‘) (5, ‘o‘)
17.sorted() 排序 可叠代對象 得到一個新的返回值。返回值是列表,默認是升序; reverse = True 反轉。降序; reversed() 取反,本末倒置
對字典排序,默認是按照字典的key去排序的
1 salaries={ 2 ‘egon‘:3000, 3 ‘alex‘:100000000, 4 ‘wupeiqi‘:10000, 5 ‘yuanhao‘:2000 6 } 7 print(sorted(salaries)) #按照keys排序,依次比較字母的大小 從小到大 8 print(sorted(salaries,reverse = True)) #按照keys排序,依次比較字母的大小 從大到小 9 print(sorted(salaries,key = lambda x:salaries[x])) #按照values的值排keys的序,從小到大 10 l = [1,2,3,4
執行結果:
[‘alex‘, ‘egon‘, ‘wupeiqi‘, ‘yuanhao‘] [‘yuanhao‘, ‘wupeiqi‘, ‘egon‘, ‘alex‘] [‘yuanhao‘, ‘egon‘, ‘wupeiqi‘, ‘alex‘]
#reversed()應用 l = [1,2,3,45,7] #定義初始列表 l1= reversed(l) #轉換 會得到一個返回值 print(list(l1)) #list()一個一個的取值,生成一個列表
執行結果:
[7, 45, 3, 2, 1]
18.max() and min() 求最大值和最小值
max(*args,key=func) key可有可無。當需要用函數判斷的時候,添加key. min與max的使用方法一致。
1 #max和min 2 print(max(1,2,3,4,10,3)) #直接比較 3 print(min(1,2,3,4,10,3)) 4 print(max((1,‘a‘),(1,‘b‘))) 5 salaries={ 6 ‘egon‘:3000, 7 ‘alex‘:100000000, 8 ‘wupeiqi‘:10000, 9 ‘yuanhao‘:2500 10 } 11 def get_value(k): 12 return salaries[k] 13 print(max(salaries)) #比較keys 14 print(max(salaries,key=get_value)) #原始的定義一個函數 15 print(max(salaries,key=lambda k:salaries[k])) #使用lambda函數 16 print(min(salaries,key=lambda k:salaries[k]))
執行結果:
10 1 (1, ‘b‘) yuanhao alex alex yuanhao
19.map 映射
map(func,list)
map()是 Python 內置的高階函數,它接收一個函數 func 和一個list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回。
1 #map 映射 將原有的可叠代對象中的元素逐一拿出來處理後,返回一個新的可叠代對象 2 l = [1,2,3,45,7] 3 m = map(lambda item:item*2,l) 4 print(m) 5 print(list(m))
執行結果:
<map object at 0x00000000026E96A0> [2, 4, 6, 90, 14]
20.reduce 合並規則 求多個參數的運算! (加減乘除)
reduce(fun,list,初始值) reduce依次把list中的數字賦值給fun進行計算 註意fun必須是兩個數字間的運算,list必須是整型數字,初始值可定義,也可以不定義。 reduce()傳入的函數func 必須接收兩個參數,reduce() 對list的每個元素反復調用函數func,並返回最終結果值。from functools import reduce l = range(100) print(reduce(lambda x,y:x+y,l)) print(reduce(lambda x,y:x+y,l,100))
執行結果:
4950 5050
21.filter() 過濾器 會有一個判斷,輸出的結果是布爾值,會將布爾值為True的過濾出來。
filter(函數func,可叠代對象list)
filter()函數接收一個函數 func 和一個list,這個函數 f 的作用是對每個元素進行判斷,返回 True或 False,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。
1 #filter 過濾 2 name_l =[ 3 {"name":‘egon‘,‘age‘:120}, 4 {"name":"fsw","age":1000}, 5 {‘name‘:‘wang‘,‘age‘:2000}, 6 {‘name‘:‘jie‘,‘age‘:18} 7 ] 8 f = filter(lambda d:d[‘age‘]>100,name_l) 9 for i in f: 10 print(i)
執行結果:
{‘name‘: ‘egon‘, ‘age‘: 120} {‘name‘: ‘fsw‘, ‘age‘: 1000} {‘name‘: ‘wang‘, ‘age‘: 2000}
23.其他
pow() 兩個值求方,三個值是前兩個求方然後值和第三個數再取余數
round() 帶小數點的值,四舍六入五留雙。。。
slice() 定義切片對象
vars() #局部變量
_import_(‘字符串‘) 將導入的字符串轉成模塊
1 #其他 2 3 #pow() 4 print(pow(3,2)) 5 print(pow(3,2,2)) 6 7 #round() 五舍六入 8 print(round(10.3)) 9 print(round(10.5)) 10 print(round(10.6)) 11 print(round(10.9)) 12 13 # slice 切片 14 l=[1,2,3,4,5,6,7,9] 15 print(l[2:5:2]) 16 s=slice(2,5,2) 17 print(l[s]) 18 19 #vars() 等同於局部變量 20 print(vars() is locals()) 21 22 #_import_() 自定義模塊 23 import time 24 # time.sleep(3) 25 print(time) 26 27 m=__import__(‘time‘) 28 print(m) 29 m.sleep(3)
執行結果:
9 1 10 10 11 11 [3, 5] [3, 5] True <module ‘time‘ (built-in)> <module ‘time‘ (built-in)>
# #在面向對象裏講
# classmethod
# staticmethod
# property
#
# delattr
# hasattr
# getattr
# setattr
#
# issubclass
#
# super
python匿名函數 與 內置函數