一、函式引數--動態傳參
1、動態接收位置引數
在引數位置編寫 * 表示接收任意內容
動態接收引數的時候要注意:動態引數必須在位置引數後面
這時程式執行會報錯。因為前面傳遞進去的所有位置引數都被 *food接收了。a和b永遠接收不到引數
2、動態接收關鍵字引數
在python中可以動態的接收引數,但是 * 這種情況只能接收位置引數無法接收關鍵字引數。
在python中使用 ** 來接收動態關鍵字引數
最終順序:
位置引數 > *args > 預設值引數 > **kwargs
這四種引數可以任意的進行使用。
如果想接收所有的引數:
def func(*args, **kwargs):
print(args, kwargs)
func("麻花","驢打滾", wtf="胡辣湯")
動態引數的另一種傳參方式:
def func(*args):
print(args)
lst = [1, 4, 7]
func(lst[0], lst[1], lst[2])
func(*lst) # 可以使用 * 把乙個列表按順序打散
s = "臣妾做不到"
func(*s) # 字串也可以打散(可迭代物件)
在形參的位置上的* 表示把接收到的引數組合成乙個元組
如果是乙個字典,那麼也可以打散,需要兩個**
def fun(**kwargs):
print(kwargs)
dic =
fun(**dic)
3、函式的注釋
二、命名空間
在python直譯器開始執行之後,就會在記憶體中開闢乙個空間,每當遇到乙個變數的時候,就把變數名和值之間的
關係記錄下來,但是當遇到函式定義的時候,直譯器只是把函式名讀入記憶體,表示這個函式存在了,至於函式內部的
變數和邏輯,直譯器是不關心的。也就是說一開始的時候函式只是載入進來,僅此而已,只有當函式被呼叫和訪問的時候
直譯器才會根據函式內部宣告的變數來進行開闢變數的內部空間。隨著函式執行完畢,這些函式內部變數占用的空間也會
隨著函式執行完畢而被清空。
def fun():
a = 10
print(a)
fun()
print(a) # a不存在了已經
我們給存放名字和值得關係的空間起乙個名字叫:命名空間。我們的變數在儲存的時候就是儲存在這片空間中的。
命名空間分類:
1、全域性命名空間--> 我們直接在py檔案中,函式外宣告的變數都屬於全域性命名空間
2、區域性命名空間--> 在函式中宣告的變數會放在區域性命名空間
3、內建命名空間--> 存放python直譯器為我們提供的名字,list, tuple ,str ,int 這些都是內建命名空間
載入順序:
1、內建命名空間
2、全域性命名空間
3、區域性命名空間(函式被執行)
取值順序:
1、區域性命名空間
2、全域性命名空間
3、內建命名空間
作用域:作用域就是作用範圍,按照生效範圍來看分為 全域性作用域和區域性作用域
全域性作用域:包含內建命名空間和全域性命名空間。在整個檔案的任何位置都可以使用(遵循從上到下逐行執行)
區域性作用域:在函式內部可以使用
作用域命名空間:
1、全域性作用域: 全域性命名空間 + 內建命名空間
2、區域性作用域: 區域性命名空間
我們可以通過globals()函式來檢視全域性作用域中的內容,也可以通過locals()來檢視區域性作用域中的變數
和函式資訊
三、函式的巢狀
1、只要遇見了()就是函式的呼叫,如果沒有()就不是函式的呼叫
2、函式的執行順序
四、關鍵字global 和 nonlocal
global 表示,不再使用區域性作用域中的內容了。而改用全域性作用域中的變數
nonlocal 表示在區域性作用域中,呼叫父級命名空間中的變數
python之路 day10 閉包函式
1.命名關鍵字引數 格式 在 後面的引數都是命名關鍵字引數 特點 1.必須被傳值 2.約束函式的呼叫者必須按照key value的形式傳值 3.約束函式的呼叫者必須用我們指定的key名 1 def auth args,kwargs 2 3使用方式auth name egon pwd 123 4 pa...
python學習之路 協程 day10
三.協程應用 greenlet greenlet和gevent必須要安裝 此處在pycharm上安裝 必須提前安裝easy install,pip 此處用的python27,python30上pip安裝後一直無法使用,會繼續跟進此問題 g2.switch 切換 print 23 g2.switch ...
python基礎 day 10 函式初識
一 內容回顧 1 檔案的操作 檔案操作三部曲 1 開啟檔案 2 檔案的控制代碼操作 3 關閉檔案 檔案路徑pat,encoding,mode 2 讀 寫 追加 檔案讀取 r,rb,r r b read 全部讀取 readline 一行一行讀取 strip readlines 全部讀取出來,每一行構造...