06-python基礎知識-函式使用
阿新 • • 發佈:2018-12-27
函式使用
變數作用域
-
塊級作用域
if True: name = 'xiaoming' # 沒有塊級作用域 print(name)
-
區域性作用域
def test(): a = 10 test() # 區域性變數:在函式內部定義的變數,只能在函式內部使用 # print(a)
-
全域性作用域
# 全域性變數:定義在函式外部的變數,擁有全域性的作用 num = 10 def show(): # 函式內部可以使用外部定義的變數 # print(num) # 若想更改外部變數,需要進行global宣告 global
-
nonlocal使用
def wai(): n = 100 def nei(): # 使用外部函式的區域性變數,需要進行宣告才可更改 nonlocal n # 內部函式可以使用外部函式的區域性變數,但是不能更改 n = 200 print(n) nei() print(n) wai()
匿名函式
-
函式可以像普通變數一樣進行賦值
def test(): print('for test') print(test.__name__) # 函式可以像普通變數一樣進行賦值 a = test print(a.__name__) a()
-
函式可以作為一個函式的引數
def show(func): func() # 函式作為引數傳遞 show(test)
-
匿名函式
- 說明:當將函式作為引數傳遞時,若函式只需要一次,沒有必要單獨定義函式,可以使用匿名函式解決。
- 格式:
lambda 引數列表: 表示式
- 引數列表與定義函式是一樣,可以是多個,多個引數之間使用逗號分隔
- 表示式就是返回值,不需要使用return關鍵字
- 示例:
lt = [ {'name': 'dahua', 'age': 18, 'height': 165}, {'name': 'erhua', 'age': 16, 'height': 160}, {'name': 'dagou', 'age': 20, 'height': 175}, {'name': 'ergou', 'age': 15, 'height': 155} ] def key(d): return d['height'] # lt.sort(key=key) lt.sort(key=lambda d: d['age']) for i in lt: print(i)
閉包使用
-
定義:具有執行環境的函式
- 外部函式中定義一個內部函式
- 內部函式中使用外部函式的區域性變數
- 外部函式將內部函式作為返回值返回
- 此時的內部函式就叫閉包
-
示例:
def wai(n): # 定義內部函式 def nei(): # 內部函式中使用外部函式的區域性變數 return n * n # 內部函式作為返回值 return nei f1 = wai(10) f2 = wai(4) print(f1()) print(f2())
裝飾器
-
作用:當需要改變一個函式原有的功能時,但是不想/不能改變原來的函式,可以通過裝飾器解決
-
使用:
- 裝飾器其實就是一個函式,該函式有一個引數(函式型別),返回一個閉包
- 在返回的閉包中呼叫傳遞進來的函式,然後在呼叫函式的前後就可以新增內容
-
示例:
def zhuangshiqi(func): def wrapper(): print('開始裝飾') func() print('裝飾結束') return wrapper @zhuangshiqi # 相當於執行了:test = zhuangshiqi(test) def test(): print('for test') # t2 = zhuangshiqi(test) # t2() # test = zhuangshiqi(test) test() @zhuangshiqi def demo(): print('原有內容') demo()
-
分類:
- 裝飾無參無返回值的函式
def shuai(func): def wrapper(): print('拉風的暴龍眼鏡') func() print('鱷魚牌大頭皮鞋') return wrapper @shuai def diaosi(): print('傑哥,屌絲一枚') diaosi()
- 裝飾帶參無返回值的函式
def zhuangshiqi(func): def wrapper(*args, **kwargs): print('開始裝飾') func(*args, **kwargs) print('裝飾結束') return wrapper @zhuangshiqi def test(n): print('I like num {}'.format(n)) test(250)
- 裝飾帶參有返回值的函式
def zhuangshiqi(func): def wrapper(*args, **kwargs): print('開始裝飾') ret = func(*args, **kwargs) print(ret) print('裝飾結束') return ret return wrapper @zhuangshiqi def add(a, b): return a + b print(add(3, 5))
遞迴函式(瞭解)
- 定義:在函式內部呼叫自己的函式就叫遞迴函式。
- 組成:
- 函式內部呼叫自己
- 終止條件(停止呼叫自己的條件)
- 核心演算法
- 特點:
- 程式碼簡介
- 可讀性差
- 瞬間佔用記憶體比較大,終止條件出錯立即崩潰
- 能不使用就不使用,就是在不得不用的時候再使用(遍歷目錄)