python基礎之內建函數補充、匿名函數、遞迴函式

來源:互聯網
上載者:User

標籤:...   lob   --   n+1   enum   第一個   年齡   rom   分享   

內建函數補充

python divmod()函數:把除數和餘數運算結果結合起來,返回一個包含商和餘數的元組(a // b, a % b)

文法:

1 divmod(a, b)  #a、b為數字,a為除數,b為被除數

樣本:

1 >>> divmod(7, 2)2 (3, 1)  #3為商,1為餘數3 >>> divmod(7, 2.5)4 (2.0, 2.0)

應用:web前端頁數計算

1 total_count=732 per_count=233 res=divmod(total_count,per_count)4 if res[1] > 0:5     page_count=res[0]+16 print(page_count)

enumerate()函數:用於將一個可遍曆的資料對象(如列表、元組或字串)組合為一個索引序列,同時列出資料和資料下標,一般用在 for 迴圈當中。

文法:

1 enumerate(sequence, [start=0])    2 # sequence -- 一個序列、迭代器或其他支援迭代對象3 # start -- 下標起始位置

樣本:

1 l=[‘a‘,‘b‘,‘c‘]2 for i in enumerate(l):3     print(i)4 輸出結果:5 (0, ‘a‘)6 (1, ‘b‘)7 (2, ‘c‘)

frozenset()函數:返回一個凍結的集合,凍結後集合不能再添加或刪除任何元素

文法:

1 frozenset([iterable]) #iterable為可迭代對象

樣本:

1 >>> dir(set)    #包含add、clear、pop、remove等修改方法2 [‘__and__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__iand__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__ior__‘, ‘__isub__‘, ‘__iter__‘, ‘__ixor__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__or__‘, ‘__rand__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__ror__‘, ‘__rsub__‘, ‘__rxor__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__sub__‘, ‘__subclasshook__‘, ‘__xor__‘, ‘add‘, ‘clear‘, ‘copy‘, ‘difference‘, ‘difference_update‘, ‘discard‘, ‘intersection‘, ‘intersection_update‘, ‘isdisjoint‘, ‘issubset‘, ‘issuperset‘, ‘pop‘, ‘remove‘, ‘symmetric_difference‘, ‘symmetric_difference_update‘, ‘union‘, ‘update‘]3 >>> dir(frozenset)  #凍結並不包含任何可修改方法4 [‘__and__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__ne__‘, ‘__new__‘, ‘__or__‘, ‘__rand__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__ror__‘, ‘__rsub__‘, ‘__rxor__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__sub__‘, ‘__subclasshook__‘, ‘__xor__‘, ‘copy‘, ‘difference‘, ‘intersection‘, ‘isdisjoint‘, ‘issubset‘, ‘issuperset‘, ‘symmetric_difference‘, ‘union‘]5 6 s=frozenset({1,2,3})

globals()函數:以字典類型返回當前位置的全部全域變數,對應的為locals()返回當前位置的局部變數

文法:

1 globals()

樣本:

1 >>> globals()2 {‘__name__‘: ‘__main__‘, ‘__doc__‘: None, ‘__package__‘: None, ‘__loader__‘: <class ‘_frozen_importlib.BuiltinImporter‘>, ‘__spec__‘: None, ‘__annotations__‘: {}, ‘__builtins__‘: <module ‘builtins‘ (built-in)>}3 >>> locals()4 {‘__name__‘: ‘__main__‘, ‘__doc__‘: None, ‘__package__‘: None, ‘__loader__‘: <class ‘_frozen_importlib.BuiltinImporter‘>, ‘__spec__‘: None, ‘__annotations__‘: {}, ‘__builtins__‘: <module ‘builtins‘ (built-in)>}

hash()函數:用於擷取取一個對象(字串或者數值等)的雜湊值

文法:

1 hash(object)  #對象可以是數字、字串、元組等不可變類型

樣本:

1 >>> hash(‘test‘)2 -28192874772036538053 >>> hash((1,2,3))4 2528502973977326415

isinstance()函數:來判斷一個對象是否是一個已知的類型,類似 type()

文法:

1 isinstance(object, classinfo)2 #object -- 執行個體對象。3 #classinfo -- 可以是直接或間接類名、基本類型或者有它們組成的元組。

樣本:

1 >>> isinstance(1,int)2 True3 >>> isinstance(1,(int,float,list))    #類型可以用一個元組包含多個,只要有一個匹配上就返回True4 True

iter()函數:用來產生迭代器

文法:

1 iter(object[, sentinel]) 2 # object -- 支援迭代的集合對象3 # sentinel -- 如果傳遞了第二個參數,則參數 object 必須是一個可調用的對象(如,函數),此時,iter 建立了一個迭代器對象,每次調用這個迭代器對象的__next__()方法時,都會調用 object

樣本:

1 for i in iter([1,2,3]): #[1,2,3].__iter__()2     print(i)3 輸出結果:4 15 26 3

pow()函數:返回 xy(x的y次方)的值

文法:

1 pow(x, y[, z])2 #函數是計算x的y次方,如果z在存在,則再對結果進行模數,其結果等效於pow(x,y) %z

樣本:

1 >>> pow(5,2,2)  #計算5的2次方的2的餘數2 1

range()函數:可建立一個整數列表,一般用在 for 迴圈中

文法:

1 range(start, stop[, step]) 2 #start: 計數從 start 開始。預設是從 0 開始。例如range(5)等價於range(0, 5);3 #end: 計數到 end 結束,但不包括 end。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有54 #step:步長,預設為1。例如:range(0, 5) 等價於 range(0, 5, 1)

樣本:

1 for i in range(0,5,2):     #0  2  42     print(i)3 for i in range(5,0,-1):    #反向取4     print(i)

reverse()函數:用於反向列表中元素

文法:

1 list.reverse()

樣本:

1 >>> l1=[3,5,1,2]2 >>> list(reversed(l1))3 [2, 1, 5, 3]4 >>> reversed(l1)    #本身是個迭代器5 <list_reverseiterator object at 0x0000023CA11E3D30>

round()函數:返回浮點數的四捨五入值

文法:

1 round( x [, n] )    #x為浮點數,n為四捨五入位元

樣本:

1 >>> round(80.23456, 2)2 80.233 >>> round(100.0010056, 3)4 100.0015 >>> round(-100.0030056, 3)6 -100.003

slice()函數:返回一個切片對象,主要用在切片操作函數裡的參數傳遞

文法:

1 slice(start, stop[, step])2 #start -- 起始位置3 #stop -- 結束位置4 #step -- 間距,步長

樣本:

1 >>> l=[‘a1‘,‘a2‘,‘a3‘,‘a4‘,‘a5‘,‘a6‘,‘a7‘,‘a8‘,‘a9‘]2 >>> l[2:5:2]3 [‘a3‘, ‘a5‘]4 >>> x=slice(2,5,2)5 >>> l[x]6 [‘a3‘, ‘a5‘]

sorted()函數:對所有可迭代的對象進行排序操作,產生一個新的對象,不對原對象生效

文法:

1 sorted(iterable[, cmp[, key[, reverse]]])2 #iterable -- 可迭代對象。3 #cmp -- 比較的函數,這個具有兩個參數,參數的值都是從可迭代對象中取出,此函數必須遵守的規則為,大於則返回1,小於則返回-1,等於則返回0。4 #key -- 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可迭代對象中,指定可迭代對象中的一個元素來進行排序。5 #reverse -- 定序,reverse = True 降序 , reverse = False 升序(預設)。

樣本:

1 >>> l=[1,2,4,9,-1]2 >>> sorted(l)  #從小到大3 [-1, 1, 2, 4, 9]4 >>> sorted(l,reverse=True)  #從大到小5 [9, 4, 2, 1, -1]

sum()函數:對系列進行求和計算

文法:

1 sum(iterable[, start])2 #iterable -- 可迭代對象,如列表。3 #start -- 指定相加的參數,如果沒有設定這個值,預設為0。

樣本:

1 >>> sum([0,1,2])2 33 >>> sum((2, 3, 4), 1)        # 元組計算總和後再加 14 105 >>> sum([0,1,2,3,4], 2)      # 列表計算總和後再加 26 12

zip()函數:用於將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。

如果各個迭代器的元素個數不一致,則返回列表長度與最短的對象相同,利用 * 號操作符,可以將元組解壓為列表

文法:

1 zip([iterable, ...])    #一個或多個迭代器,zip函數返回的是一個迭代器

樣本1:

1 s=‘hello‘2 l=[1,2,3]3 for i in zip(s,l):4     print(i)5 輸出結果:6 (‘h‘, 1)7 (‘e‘, 2)8 (‘l‘, 3)

樣本2:

1 s=‘hello‘2 l=[1,2,3]3 zipped = zip(s,l,)     # 打包為元組的列表4 for x in zip(*zipped):  # 與 zip 相反,可理解為解壓,返回二維矩陣式5     print(x)

匿名函數

匿名函數,即沒有名字的函數。

有名函數使用def定義,通過函數名字調用,匿名函數是用lambda定義,直接調用或者人為指定一個函數名字定義。

比如定義函數,返回一個值的平方,有名函數定義如下:

1 def func1(x):2     return x**23 print(func1(5))

匿名函數定義:

1 func=lambda x:x**2   #x為函數接收的值,x**2相當於有名函數的return x**22 print(func(5))

其他樣本:

1 f1=lambda x,y:x+y  2 print(f1(1,2))  #傳回值為33 #4 f2=lambda x:x>15 print(f2(3))  #傳回值為True

匿名函數如果不人為指定一個名字,那麼在定義完了之後就會在記憶體中刪除,所以匿名函數一般只會使用一次,主要應用在內建函數max、min、map、reduce和filter中。

max()函數:返回給定參數的最大值,參數可以為序列,max類似於for迴圈,一個個遍曆

文法:

1 max( x, y, z, .... [key] )  #key為比較的實值型別,是一個函數

樣本:

>>> max(-20, 100, 400)400>>> max(-80, -20, -10)-10>>> max(0, 100, -400)100>>> max(‘abc‘,‘bcd‘,‘aaa‘)  #字串比較大小是根據字母順序,越靠後越大。先比較第一個字元,如果第一個字元一樣,比較第二個,依次‘bcd‘

結合匿名函數應用:

 1 #普通方法:輸出工資最高的人的名字 2 salaries={ 3     ‘egon‘:3000, 4     ‘alex‘:100000000, 5     ‘wupeiqi‘:10000, 6     ‘yuanhao‘:2000 7 } 8  9 print(max(salaries))    #比較的是名字字串的大小,輸出的是名字10 print(max(salaries.values()))    #比較的是工資大小,輸出的是工資數11 res=zip(salaries.values(),salaries.keys())    #拉鏈函數將key和value做成元組12 print(max(res)[1])    #比較元組的0索引位置,輸出索引位置1的值13 輸出結果:14 yuanhao15 10000000016 alex17 18 #===========分割線君============19 #結合lambda應用:輸出工資最高的人的名字20 salaries={21     ‘egon‘:3000,22     ‘alex‘:100000000,23     ‘wupeiqi‘:10000,24     ‘yuanhao‘:200025 }26 #def func(x):  #定義函數,輸出一個key的value值27 #   return salaries[x]28 print(max(salaries,key=lambda x:salaries[x]))  #key是指定一個函數作為比較對象,預設比較的是字典key的大小,通過lambda的傳回值,變成了對應value的比較

min()函數:返回給定參數的最小值,參數可以為序列,類似於max的使用方法

文法:

樣本:

map()函數:會根據提供的函數對指定序列做映射

第一個參數 function 以參數序列中的每一個元素調用 function 函數,返回包含每次 function 函數傳回值的新列表。

文法:

1 map(function, iterable)2 #function -- 函數3 #iterable -- 一個或多個序列

樣本1:

1 l=[1,2,3,4]2 m=map(lambda x:x**2,l)3 print(list(m))4 輸出結果5 [1, 4, 9, 16]

樣本2:

names=[‘bob‘,‘natasha‘,‘lisa‘]print(list(map(lambda item:item+‘_sb‘,names)))輸出結果[‘bob_sb‘, ‘natasha_sb‘, ‘lisa_sb‘]

reduce()函數:對參數序列中元素進行合并。

函數將一個資料集合(鏈表,元組等)中的所有資料進行下列操作:用傳給reduce中的函數 function(有兩個參數)先對集合中的第 1、2 個元素進行操作,得到的結果再與第三個資料用 function 函數運算,最後得到一個結果。

文法:

1 reduce(function, iterable[, initializer])  2 #function -- 函數3 #iterable -- 可迭代對象4 #initializer -- 可選,初始參數

樣本:

 1 #普通方法實現0-100(不包括100)的和 2 res=0 3 for i in range(100): 4     res+=i 5 print(res) 6  7 #==============分割線君============= 8 from functools import reduce 9 #reduce方法實現0-100的和,加了預設值10 print(reduce(lambda x,y:x+y,range(100),100))

filter()函數:用於過濾序列,過濾掉不合格元素,返回由符合條件元素組成的新列表。

該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中。

文法:

1 filter(function, iterable)2 #function -- 判斷函數。3 #iterable -- 可迭代對象

樣本:

1 names=[‘bob_sb‘,‘natasha_sb‘,‘lisa_sb‘,‘egon‘]2 print(list(filter(lambda name:name.endswith(‘_sb‘),names)))  #篩選出_sb結尾的元素3 輸出結果4 [‘bob_sb‘, ‘natasha_sb‘, ‘lisa_sb‘]

遞迴函式

遞迴調用:在調用一個函數的過程中,直接或者間接調用了該函數本身

直接調用:

1 def func():2     print(‘====>func‘)3     func()4 func()5 #會陷入死迴圈報錯,預設遞迴層級限制,可改

間接調用:

1 def foo():2     print(‘from foo‘)3     bar()4 def bar():5     print(‘from bar‘)6     foo()7 foo()8 #會陷入死迴圈報錯,預設遞迴層級限制,可改

 樣本1:計算年齡

1 def age(n):2     if n == 5:3         return 184     return age(n+1)+25 print(age(1))

遞迴函式有兩個過程:遞推和回溯

 

遞推的過程中需要有一個中斷點,即樣本1中的if判斷,如果沒有中斷點,將陷入死迴圈,導致記憶體溢出

回溯即從斷點處返回求值

樣本2:

1 l=[1,[2,3,[4,5,[6,7,[8,9,[10,11,[12,13]]]]]]]2 def func(l):3     for i in l:4         if isinstance(i,list):5             func(i)6         else:7             print(i)8 func(l)

python基礎之內建函數補充、匿名函數、遞迴函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.