Python函數補充
函數的嵌套調用
實例:
作用域
作用域指的是變量生效的區域,在Python中一共有兩種作用域:
1、全局作用域:
- 全局作用域在程序執行時創建,在程序執行結束時銷燬
- 所有函數以外的區域都是全局作用域
- 在全局作用域中定義的變量,都屬於全局變量,全局變量可以在程序的任意位置被訪問
2.函數作用域
函數作用域在函數調用時創建,在調用結束時銷燬
- 函數每調用一次就會產生一個新的函數作用域
- 在函數作用域中定義的變量,都是局部變量,它只能在函數內部被訪問
變量的查找
- 當我們使用變量時,會優先在當前作用域中尋找該變量,如果有則使用,
- 如果沒有則繼續去上一級作用域中尋找,如果有則使用,
- 如果依然沒有則繼續去上一級作用域中尋找,以此類推
直到找到全局作用域,依然沒有找到,則會拋出異常
NameError: name ‘a’ is not defined
實例:
遞歸函數:
一個函數的內部可以調用其他函數。但是,如果一個函數在內部不調用其它的函數,而是自己本身的話,這個函數就是遞歸函數。
練習
1、創建一個函數 power 來爲任意數字做冪運算 n ** i
2.創建一個函數,用來檢查一個任意的字符串是否是迴文字符串,如果是返回True,否則返回False。
(迴文字符串,字符串從前往後念和從後往前念是一樣的)
匿名函數:
匿名函數就是沒有名稱的函數,也就是不再使用def語句定義的函數。如果要聲明匿名函數,則需要使用lambda關鍵字,匿名函數的聲明格式如下所示:
lambda [arg1 [,arg2,…argn]]:expression
注意:
使用Lambda聲明的匿名函數能接收任何數量的參數,但只能返回一個表達式的值。匿名函數不能直接調用print,因爲lambda需要一個表達式。
隨機數函數:
random.random()用於生成一個0到1的隨機浮點數,0<=n<=1.0
random.uniform(a,b)
返回a,b之間的隨機浮點數,範圍[a,b]或[a,b]取決於四捨五入,a不一定要比b小。
random.randint(a,b)
返回a,b之間的整數,範圍[a,b],注意:傳入參數必須是整數,a一定要比b小。
random.randrang([start], stop[, step])
返回有個區間內的整數,可以設置step。只能傳入整數, random.randrange(10,100,2) ,結果相當於從[10, 12, 14, 16, … 96, 98]序列中獲取一個隨機數。
random.shuffle(x)
shuffle() 方法將序列的所有元素隨機排序。俗稱爲洗牌。
random.sample(sequence,k)
從指定序列中隨機獲取k個元素作爲一個片段返回,sample函數不會修改原有序列