Python基礎之內置函式和遞迴

2022-02-08 01:06:58 字數 4539 閱讀 8787

一、內建函式

下面簡單介紹幾個:

1.abs() 求絕對值

2.all() 如果 iterable 的所有元素都為真(或者如果可迭代為空),則返回true

3.any() 如果 iterable 的任何元素為真,則返回true。如果iterable為空,則返回false

4.callable() 如果 object 引數出現可調,則返回true,否則返回false

5.divmod() 以兩個(非複數)數字作為引數,並在使用整數除法時返回由商和餘數組成的一對數字。對於混合運算元型別,二進位制算術運算子的規則適用。對於整數,結果與(a//b,a%b)

相    同。對於浮點數,結果為(a%b,q)

,其中q 通常為math.floor(a/b)

,但可以小於1

6.enumerate() 引數必須是可迭代物件,函式執行結果得到乙個迭代器,輸出元素及對應的索引值

7.eval() 把字串中的提取出來執行

8.frozenset() 不可變集合,frozenset()定義的集合不可增刪元素

9.globals() 返回表示當前全域性符號表的字典。這始終是當前模組的字典(在函式或方法內部,這是定義它的模組,而不是從其呼叫它的模組)

10.round() 對引數進行四捨五入

11.sorted() 排序,不改變原列表

l=[1,2,4,9,-1]

print(sorted(l)) #

從小到大

print(sorted(l,reverse=true)) #

從大到小

12.zip() 拉鍊函式 

它接受一系列可迭代的物件作為引數,將物件中對應的元素打包成乙個個tuple(元組),然後返回由這些tuples組成的list(列表)。若傳入引數的長度不等,則返回list的長度和引數中長度最短的物件相同。利用*號操作符,可以將list unzip(解壓)

a=[1,2,3]

b=['

a','

b','c'

]print(list(zip(a,b)))#------->[(1, 'a'), (2, 'b'), (3, 'c')]

#因為在python3中zip函式生成的是乙個可迭代物件,所以,加乙個list可以方便的列印出來,否則列印的是乙個物件

加乙個*就可以解壓

a=[1,2,3]

b=['

a','

b','c'

]c=list(zip(a,b))

d=zip(*c)

print(list(d))#

[(1, 2, 3), ('a', 'b', 'c')]

13.max() 

返回可迭代的最大項或兩個或更多引數中最大的乙個。

如果提供了乙個位置引數,它應該是乙個 iterable。返回迭代中的最大項。如果提供了兩個或多個位置引數,則返回最大的位置引數。

max()可以指定key(也就是指定要比較的部分)

14.map() 對映

返回乙個迭代器,它應用 function 到 iterable 的每個專案,產生結果

l=[1,2,3,4]

m=map(lambda x:x**2,l)

print(list(m)) ----->[1, 4, 9, 16]

15.reduce() 合併

from functools import reduce

def multi(x,y):

return x*y

a = reduce(multi,[1,2,3,4,5])

print(a)#120 五個數相乘的結果

16.filter() 過濾  保留布林值為true的元素

names=['a

_sb','

b_sb

','c_sb

','d']

print(list(filter(lambda name:name.endswith('

_sb'),names)))--->['

a_sb

', b_sb

', '

c_sb

']

詳細的內建函式介紹可以參照以下:

17.compile()編譯,將乙個字串編譯為位元組**

語法:

compile(source, filename, mode[, flags[, dont_inherit]])
引數介紹

source --字串或者ast(abstract syntax trees)物件。。

filename --**檔名稱,如果不是從檔案讀取**則傳遞一些可辨認的值。

mode -- 指定編譯**的種類。可以指定為 exec

, eval, single。

flags --變數作用域,區域性命名空間,如果被提供,可以是任何對映物件。。

flags和dont_inherit是用來控制編譯原始碼時的標誌

至少要有前三個引數,

>>> compile('

a','','

exec')

at 0x00000242a1c28030, file "", line 1>

二、匿名函式(lambda表示式)

def

func(x):

return x**2

print(func(2))

lambda x:x**2 #

上邊的函式就可以直接寫成這種形式

lambda函式自帶返回值匿名函式只能取代一些很簡單的函式,主要與其他函式搭配使用

還有一種情況是有些函式定義後只使用一次就用不到了,如果不刪除的話會佔記憶體空間,刪除又會很麻煩,這時就可以用到匿名函式

三、遞迴

在呼叫乙個函式的過程中,直接或間接使用了函式本身

遞迴效率很低,需要在進入下一次遞迴時保留當前狀態,python不像其他語言,沒有尾遞迴,但是python有限制條件,不允許使用者無限遞迴

遞迴的特點:

1.必須要有乙個明確的結束條件

2.每次進入更深一層遞迴時,問題規模相比上次遞迴都應該有所減少

3.遞迴效率不高,遞迴層數過多會導致棧溢位

示例:

#

1 檔案內容如下,標題為:姓名,性別,年紀,薪資##

egon male 18 3000

#alex male 38 30000

#wupeiqi female 28 20000

#yuanhao female 28 10000##

要求:#

從檔案中取出每一條記錄放入列表中,

#列表的每個元素都是的形式##

2 根據1得到的列表,取出薪資最高的人的資訊

#3 根據1到的列表,取出最年輕的人的資訊

#4 根據1得到的列表,將每個人的資訊中的名字對映成首字母大寫的形式

#5 根據1得到的列表,過濾掉名字以a開頭的人的資訊

#6 使用遞迴列印斐波那契數列(前兩個數的和得到第三個數)

#0 1 1 2 3 4 7...

with open(

'b.txt

',encoding='

utf-8

')as f:

l=[ \

for line inf]#

2.print(max(l,key=lambda i:i['

salary

']))#3.

print(min(l,key=lambda i:i['

age'

]))#

4.m=map(lambda x:x['

name

'].capitalize(),l)

print

(list(m))#5.

print(list(filter(lambda x:not(x['

name

'].startswith('a'

)),l)))#6.

deff(n):

if n==0:

return

0

elif n==1:

return 1

else

:

if n==1000:

return f(1000)

else

:

return f(n-2)+f(n-1)

for i in range(150):

print(f(i))

Python基礎之內置函式(一)

內建函式比較多,今天只記錄下一部分吧。abs 求絕對值 abs 10.1 10.1 all 全部為真才是真,引數是可迭代的 all 12,3,4,5,none false any 任意為真,就為真 any 12,3,4,5,none true bool 布林值 bool 1 true bool 0 ...

python之內置函式

非空即真,非0即真 記住這句話可以讓你少寫好多 l asdfgwert3r 1 sorted l 排序 字串可以直接使用sorted排序 2 all 如果list裡面都為真的情況返回為 true all 1 2,3 4 print true all 1 2,3 0 print false all 1...

python之內置函式

它將兩個 非複數 數字作為實參,並在執行整數除法時返回一對商和餘數。對於混合運算元型別,適用雙目算術運算子的規則。對於整數,結果和 a b,a b 一致,分別對應取整數和取餘數 對於浮點數,結果是 q,a b q 通常是 math.floor a b 但可能會比 1 小。如 將153拆解 a,b d...