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