您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“python函數(shù)式編程舉例分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“python函數(shù)式編程舉例分析”吧!
Python內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用。
要調(diào)用一個(gè)函數(shù),需要知道函數(shù)的名稱和參數(shù),比如求絕對(duì)值的函數(shù)abs,只有一個(gè)參數(shù)。
也可以在交互式命令行通過help(abs)查看abs函數(shù)的幫助信息。
調(diào)用abs函數(shù):
>>> abs(100) 100 >>> abs(-20) 20 >>> abs(12.34) 12.34
在Python中的函數(shù)就是為了實(shí)現(xiàn)某一段功能的代碼段,可以重復(fù)利用。
就是以后不要重復(fù)造輪子,遇到那個(gè)場(chǎng)景就用那個(gè)函數(shù),就是函數(shù)式編程。
下面,我定義一個(gè) my_func,傳入一個(gè)Hello World,再打印一個(gè)Hello World
def my_func(message): print('Got a message: {}'.format(message)) # 調(diào)用函數(shù) my_func() my_func('Hello World') # 輸出 Got a message: Hello World
簡(jiǎn)單的知識(shí)點(diǎn)
def是函數(shù)的聲明
my_func是函數(shù)的名稱
message 是函數(shù)的參數(shù)
print 是函數(shù)的主體部分
在函數(shù)的最后 可以返回調(diào)用結(jié)果(return 或yield ),也可以不返回
「定義在前,調(diào)用在后」
def my_sum(a, b): return a + b result = my_sum(3, 5) print(result) # 輸出 8
對(duì)于函數(shù)的參數(shù)可以設(shè)定默認(rèn)值
def func(param = 0): pass
如果param沒有傳入,那么參數(shù)默認(rèn)是0,如果傳入了參數(shù),就覆蓋默認(rèn)值
傳入的參數(shù)可以接受任何數(shù)據(jù)類型
比如,列表
print(my_sum([1, 2], [3, 4])) # 輸出 [1, 2, 3, 4]
再比如,字符串
print(my_sum('hello ', 'world')) # 輸出 hello world
當(dāng)然,如果參數(shù)數(shù)據(jù)類型不同,而兩者無(wú)法相加
print(my_sum([1, 2], 'hello')) TypeError: can only concatenate list (not "str") to list
同一個(gè)函數(shù)可以應(yīng)用到整數(shù),列表,字符串等等的操作稱為多態(tài)。這可不是變態(tài)。
函數(shù)嵌套就是函數(shù)中有函數(shù),就叫嵌套函數(shù)了。
def f1(): print('hello') def f2(): print('world') f2() f1() # 輸出 hello world
函數(shù)的嵌套保證了內(nèi)部函數(shù)的調(diào)用,內(nèi)部函數(shù)只能被外部函數(shù)所調(diào)用,不會(huì)作用于全局域中。
合理使用函數(shù)嵌套,提高運(yùn)算速度
比如計(jì)算5的階乘。
def factorial(input): if not isinstance(input, int): raise Exception('input must be an integer.') if input < 0: raise Exception('input must be greater or equal to 0' ) def inner_factorial(input): if input <= 1: return 1 return input * inner_factorial(input-1) return inner_factorial(input) print(factorial(5)) 120
如果變量是izai函數(shù)內(nèi)部定義的,稱為局部變量,只在函數(shù)內(nèi)部有效,當(dāng)函數(shù)執(zhí)行完畢,局部變量就會(huì)被回收。
全局變量就是寫在函數(shù)外面的。
MIN_VALUE = 1 MAX_VALUE = 10 def validation_check(value): if value < MIN_VALUE or value > MAX_VALUE: raise Exception('validation check fails')
這里的MIN_VELUE 和MAX_VALUE就是全局變量,但是我們不能在函數(shù)的內(nèi)部隨意改變?nèi)肿兞康闹?/p>
MIN_VALUE = 1 def validation_check(value): MIN_VALUE += 1 validation_check(5) 報(bào)錯(cuò):UnboundLocalError: local variable 'MIN_VALUE' referenced before assignment
要想改變 必須加上global這個(gè)聲明
MIN_VALUE = 1 def validation_check(value): global MIN_VALUE MIN_VALUE += 1 validation_check(5)
global告訴python解析器,函數(shù)內(nèi)部的變量MIN_VALUE就是定義的全局變量,這里輸入的是2,這樣修改的全局變量的值
MIN_VALUE = 1 MAX_VALUE = 10 def validation_check(): MIN_VALUE = 3 print(MIN_VALUE) validation_check() print(MIN_VALUE) # 3 # 1
對(duì)于嵌套函數(shù)來說,內(nèi)部函數(shù)無(wú)法修改外部函數(shù)定義的變量,可以訪問,想要修改就要加上 nonolocal
def outer(): x = "local" def inner(): nonlocal x # nonlocal 關(guān)鍵字表示這里的 x 就是外部函數(shù) outer 定義的變量 x x = 'nonlocal' print("inner:", x) inner() print("outer:", x) outer() # 輸出 inner: nonlocal outer: nonlocal
不加就不會(huì)覆蓋
def outer(): x = "local" def inner(): x = 'nonlocal' # 這里的 x 是 inner 這個(gè)函數(shù)的局部變量 print("inner:", x) inner() print("outer:", x) outer() # 輸出 inner: nonlocal outer: local
函數(shù)的閉包其實(shí)和函數(shù)的嵌套很相似。和嵌套不同,閉包的外部函數(shù)返回是一個(gè)函數(shù),而不是一個(gè)具體的值。
閉包就是在函數(shù)里面調(diào)用函數(shù),一般用return來執(zhí)行,return出內(nèi)部調(diào)用的函數(shù)名。
我們接下來計(jì)算下一個(gè)數(shù)的n次冪,用閉包寫如下:
def nth_power(exponent): def exponent_of(base): return base ** exponent return exponent_of # 返回值是 exponent_of 函數(shù) square = nth_power(2) # 計(jì)算一個(gè)數(shù)的平方 cube = nth_power(3) # 計(jì)算一個(gè)數(shù)的立方 square # 輸出 <function __main__.nth_power.<locals>.exponent(base)> cube # 輸出 <function __main__.nth_power.<locals>.exponent(base)> print(square(2)) # 計(jì)算 2 的平方 print(cube(2)) # 計(jì)算 2 的立方 # 輸出 4 # 2^2 8 # 2^3
當(dāng)然,我們也可以通過一個(gè)函數(shù)來寫這個(gè)功能:
def nth_power(base,exponent): return base**exponent
但是,使用閉包,可以讓程序變得更加簡(jiǎn)潔易懂。
到此,相信大家對(duì)“python函數(shù)式編程舉例分析”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。