函數(shù)調(diào)用
成都創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比青山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式青山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋青山地區(qū)。費(fèi)用合理售后完善,十余年實(shí)體公司更值得信賴。
myFun()
# 函數(shù)的參數(shù)
# 單個(gè)參數(shù)
# 場(chǎng)景
# 需要?jiǎng)討B(tài)的調(diào)整函數(shù)體中某一個(gè)處理信息
# 則可以, 以參數(shù)的形式接收到相關(guān)數(shù)據(jù)
# 定義
# def 函數(shù)名(參數(shù)名稱):
# 函數(shù)體
# 函數(shù)體中, 可以直接以變量的方式使用該參數(shù)
# 函數(shù)的調(diào)用
# 函數(shù)名(參數(shù)值)
# 形參和實(shí)參的概念
# 上述函數(shù)定義中, "參數(shù)名稱"即為形參;
# 在調(diào)用函數(shù)的時(shí)候, 傳遞的真實(shí)數(shù)據(jù), 即為實(shí)參
# 多個(gè)參數(shù)
# 場(chǎng)景
# 需要?jiǎng)討B(tài)的調(diào)整函數(shù)體中多個(gè)處理信息時(shí)
# 則可以以 逗號(hào) 做分割, 接收多個(gè)參數(shù)
# 定義
# def 函數(shù)名(參數(shù)名稱1, 參數(shù)名稱2):
# 函數(shù)體
# 函數(shù)體中, 可以直接以變量的方式使用所有參數(shù)
# 調(diào)用
# 方式1
# 函數(shù)名(參數(shù)1, 參數(shù)2, 參數(shù)3...)
# 形參和實(shí)參一一對(duì)應(yīng)
# 方式2
# 函數(shù)名(參數(shù)名稱1=參數(shù)1, 參數(shù)名稱n = 參數(shù)n...)
# 可以指明形參名稱
# 稱為"關(guān)鍵字參數(shù)"
# 不需要嚴(yán)格按照順序
# 不定長(zhǎng)參數(shù)
# 場(chǎng)景
# 如果函數(shù)體中, 需要處理的數(shù)據(jù), 不確定長(zhǎng)度
# 則可以以不定長(zhǎng)參數(shù)的方式接收數(shù)據(jù)
# 方式1
# 定義
# def 函數(shù)名(*args):
# 元組
# 函數(shù)體
# 函數(shù)體中, 可以直接以元組變量的方式使用該參數(shù)
# 使用
# 函數(shù)名(參數(shù)1, 參數(shù)2, 參數(shù)3...)
調(diào)用str2int函數(shù),會(huì)首先定義這兩個(gè)子函數(shù)
然后返回 reduce(fn,map(char2num,s))
也就是首先對(duì)s中每個(gè)元素執(zhí)行char2num函數(shù),返回值組成map中的元素,再對(duì)map中的元素累計(jì)執(zhí)行fn函數(shù),然后返回結(jié)果
如str2(’123’) 以'1','2','3'為參數(shù)調(diào)用 char2num先返回?cái)?shù)字 1,2,3,然后對(duì)1,2,3累計(jì)執(zhí)行fn(x,y)
1*10+2=12
12*10+3=123
最后 返回?cái)?shù)字123
下面是一個(gè)例子,用 for 循環(huán)調(diào)用 10 次 test 函數(shù),并把返回值加到 sum 變量中:
#coding=utf-8
def?test(n):
return?n?+?1
sum?=?0
#?使用?for?循環(huán)調(diào)用?10?次?test?函數(shù)
for?i?in?range(10):
#?調(diào)用?test?函數(shù),并將返回值加到?sum?中
sum?=?sum?+?test(i)
print('sum?=?'?+?str(sum))
lst = [] #定義一個(gè)空列表
str = raw_input("請(qǐng)輸入數(shù)值,用空格隔開:")
lst1 = str.split(" ")#lst1用來存儲(chǔ)輸入的字符串,用空格分割
i = 0
while i = len(lst1)+1:
lst.a(chǎn)ppend(int(lst1.pop()))#將lst1的數(shù)據(jù)轉(zhuǎn)換為整型并賦值給lst
i += 1
#print(lst)
def sum(list):
"對(duì)列表的數(shù)值求和"
s = 0
for x in list:
s += x
return s
def average(list):
"對(duì)列表數(shù)據(jù)求平均值"
avg = 0
avg = sum(list)/(len(list)*1.0) #調(diào)用sum函數(shù)求和
return avg
print("avg = %f"%average(lst))
擴(kuò)展資料:
for循環(huán)小括號(hào)里第一個(gè)“;”號(hào)前為一個(gè)為不參與循環(huán)的單次表達(dá)式,其可作為某一變量的初始化賦值語句, 用來給循環(huán)控制變量賦初值; 也可用來計(jì)算其它與for循環(huán)無關(guān)但先于循環(huán)部分處理的一個(gè)表達(dá)式。
執(zhí)行的中間循環(huán)體可以為一個(gè)語句,也可以為多個(gè)語句,當(dāng)中間循環(huán)體只有一個(gè)語句時(shí),其大括號(hào){}可以省略,執(zhí)行完中間循環(huán)體后接著執(zhí)行末尾循環(huán)體。
執(zhí)行末尾循環(huán)體后將再次進(jìn)行條件判斷,若條件還成立,則繼續(xù)重復(fù)上述循環(huán),當(dāng)條件不成立時(shí)則跳出當(dāng)下for循環(huán)。
1、map
map()函數(shù)接受兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是Iterable,map將傳入的函數(shù)依次作用到序列的每一個(gè)元素上,并把結(jié)果作為新的Iterator返回。
舉例,比如我們有一個(gè)函數(shù)f(x)=x*2,要把這個(gè)函數(shù)作用在一個(gè)list[1, 2, 3, 4, 5, 6, 7, 8,
9]上,就可以用map()實(shí)現(xiàn)。
def f(x):
... return x*2
...
r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
list(r)
[2, 4, 6, 8, 10, 12, 14, 16, 18]
所以,map()作為高階函數(shù),事實(shí)上它把運(yùn)算規(guī)則抽象了,因此,我們不但可以計(jì)算簡(jiǎn)單的f(x)=x*2,還可以計(jì)算任意復(fù)雜的函數(shù),比如把這個(gè)list所有的數(shù)字轉(zhuǎn)為字符串:
list(map(str,[1, 2, 3, 4, 5, 6, 7, 8, 9]))
["1", "2", "3", "4", "5", "6", "7", "8", "9"]
2、reduce
reduce是把一個(gè)函數(shù)作用在一個(gè)序列[x1, x2,
x3……]上,這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個(gè)元素做累計(jì)計(jì)算。簡(jiǎn)單來說,就是先計(jì)算x1和x2的結(jié)果,再拿結(jié)果與x3計(jì)算,依次類推。比如說一個(gè)序列求和,就可以用reduce實(shí)現(xiàn)。
from functools import reduce
def add(x, y):
... return x + y
...
reduce(add, [1, 3, 5, 7, 9])
25
也就是說,假設(shè)python沒有提供int()函數(shù),你完全可以自己寫一個(gè)把字符串轉(zhuǎn)化為整數(shù)的函數(shù),而且只需要幾行代碼。
3、filter
用于過濾序列,和map函數(shù)類似,filter也接收一個(gè)函數(shù)和一個(gè)序列,不同于map的是,filter把傳入的函數(shù)依次作用于每一個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素,例如,在一個(gè)list中,刪掉偶數(shù),只保留奇數(shù),可以這么寫:
def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
# 結(jié)果: [1, 5, 9, 15]
把一個(gè)序列中的空字符串刪掉,可以這么寫:
def not_empty(s):
return s and s.strip()
list(filter(not_empty, ["A", "", "B", None, "C", " "]))
# 結(jié)果: ["A", "B", "C"]
可見用filter()這個(gè)高階函數(shù),關(guān)鍵在于正確實(shí)現(xiàn)一個(gè)篩選函數(shù)。
4、sorted
無論冒泡排序還是快速排序,排序的核心是比較兩個(gè)元素的大小。如果是數(shù)字,我們可以直接比較,但如果是字符串或者兩個(gè)dict呢?直接比較數(shù)學(xué)上的大小是沒有意義的,因此,比較的過程必須通過函數(shù)抽象出來,Python內(nèi)置的sorted()函數(shù)就可以對(duì)list進(jìn)行排序:
sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
此外,sorted()函數(shù)也是一個(gè)高階函數(shù),它還可以接收一個(gè)key函數(shù)來實(shí)現(xiàn)自定義的排序,例如按絕對(duì)值大小排序:
sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
map() 函數(shù)接受兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是可迭代對(duì)象(Iterable), map 將傳入的函數(shù)依次作用到可迭代對(duì)象的每一個(gè)元素,并把結(jié)果作為迭代器(Iterator)返回。
舉例說明,有一個(gè)函數(shù) f(x)=x^2 ,要把這個(gè)函數(shù)作用到一個(gè)list [1,2,3,4,5,6,7,8,9] 上:
運(yùn)用簡(jiǎn)單的循環(huán)可以實(shí)現(xiàn):
運(yùn)用高階函數(shù) map() :
結(jié)果 r 是一個(gè)迭代器,迭代器是惰性序列,通過 list() 函數(shù)讓它把整個(gè)序列都計(jì)算出來并返回一個(gè) list 。
如果要把這個(gè)list所有數(shù)字轉(zhuǎn)為字符串利用 map() 就簡(jiǎn)單了:
小練習(xí):利用 map() 函數(shù),把用戶輸入的不規(guī)范的英文名字變?yōu)槭鬃帜复髮懫渌懙囊?guī)范名字。輸入 ['adam', 'LISA', 'barT'] ,輸出 ['Adam', 'Lisa', 'Bart']
reduce() 函數(shù)也是接受兩個(gè)參數(shù),一個(gè)是函數(shù),一個(gè)是可迭代對(duì)象, reduce 將傳入的函數(shù)作用到可迭代對(duì)象的每個(gè)元素的結(jié)果做累計(jì)計(jì)算。然后將最終結(jié)果返回。
效果就是: reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
舉例說明,將序列 [1,2,3,4,5] 變換成整數(shù) 12345 :
小練習(xí):編寫一個(gè) prod() 函數(shù),可以接受一個(gè) list 并利用 reduce 求積:
map() 和 reduce() 綜合練習(xí):編寫 str2float 函數(shù),把字符串 '123.456' 轉(zhuǎn)換成浮點(diǎn)型 123.456
filter() 函數(shù)用于過濾序列, filter() 也接受一個(gè)函數(shù)和一個(gè)序列, filter() 把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是 True 還是 False 決定保留還是丟棄該元素。
舉例說明,刪除list中的偶數(shù):
小練習(xí):用 filter() 求素?cái)?shù)
定義一個(gè)篩選函數(shù):
定義一個(gè)生成器不斷返回下一個(gè)素?cái)?shù):
打印100以內(nèi)素?cái)?shù):
python內(nèi)置的 sorted() 函數(shù)可以對(duì)list進(jìn)行排序:
sorted() 函數(shù)也是一個(gè)高階函數(shù),還可以接受一個(gè) key 函數(shù)來實(shí)現(xiàn)自定義排序:
key 指定的函數(shù)將作用于list的每一個(gè)元素上,并根據(jù) key 函數(shù)返回的結(jié)果進(jìn)行排序.
默認(rèn)情況下,對(duì)字符串排序,是按照ASCII的大小比較的,由于'Z' 'a',結(jié)果,大寫字母Z會(huì)排在小寫字母a的前面。如果想忽略大小寫可都轉(zhuǎn)換成小寫來比較:
要進(jìn)行反向排序,不必改動(dòng)key函數(shù),可以傳入第三個(gè)參數(shù) reverse=True :
小練習(xí):假設(shè)我們用一組tuple表示學(xué)生名字和成績(jī): L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)] 。用sorted()對(duì)上述列表分別按c成績(jī)從高到低排序:
運(yùn)用匿名函數(shù)更簡(jiǎn)潔:
網(wǎng)頁(yè)標(biāo)題:python多個(gè)函數(shù)累計(jì),求n個(gè)數(shù)累加和python
標(biāo)題路徑:http://sd-ha.com/article40/hdhseo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、網(wǎng)站導(dǎo)航、搜索引擎優(yōu)化、微信小程序、網(wǎng)站收錄、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容