Python動態引數、名稱空間、函式巢狀、global和nonlocal
函式的動態引數
1.1 *args 位置引數動態傳參
def chi(*food):
print("我要吃", food)
chi("大米飯", "小米飯")
結果:我要吃 ('大米飯', '小米飯') # 多個引數傳遞進去. 收到的內容是元組tuple
1.2 **kwargs 關鍵字引數動態傳參
def func(**kwargs):
print(kwargs)
func(a=1, b=2, c=3)
func(a=1, b=2)
結果:
{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2}
順序:位置引數, *args, 預設值, **kwarg
def func(*args, **kwargs):
pass
形參的位置*,**: 聚合
實參的位置*,**: 打散
def fun(*args):
print(args)
lst = [1, 4, 7]
fun(lst[0], lst[1], lst[2])
fun(*lst) # 可以使用*把一個列表按順2. 名稱空間
在python直譯器開始執行之後, 就會在記憶體中開闢一個空間, 每當遇到一個變數的時候, 就把變數名和值之間的關係記錄下來, 但是當遇到函式定義的時候, 直譯器只是把函式名讀入記憶體, 表示這個函式存在了, 至於函式內部的變數和邏輯, 直譯器是不關心的. 也就是說一開始的時候函式只是載入進來, 僅此而已, 只有當函式被呼叫和訪問的時候, 直譯器才會根據函式內部宣告的變數來進行開闢變數的內部空間. 隨著函式執行完畢, 這些函式內部變數佔用的空間也會隨著函式執行完畢而被清空.
2.1 內建名稱空間 – 存放python直譯器為我們提供的名字, list, tuple, str, int 等這些都是內建名稱空間
2.2 全域性名稱空間 – 我們直接在py檔案中, 函式外宣告的變數都屬於全域性名稱空間
2.3 區域性名稱空間 – 在函式中宣告的變數會放在區域性名稱空間
載入順序:內建名稱空間 >>> 全域性名稱空間 >>> 區域性名稱空間(函式被執行的時候)
取值順序: 區域性名稱空間 >>> 全域性名稱空間 >>> 內建名稱空間
作用域:
作用域: 作用域就是作用範圍, 按照生效範圍來看分為 全域性作用域和區域性作用域
全域性作用域: 包含內建名稱空間和全域性名稱空間. 在整個檔案的任何位置都可以使用(遵循從上到下逐行執行).
區域性作用域: 在函式內部可以使用.
1. 全域性作用域: 內建+全域性
2. 區域性作用域: 區域性(函式被呼叫)
3. globals() 檢視全域性中的內容
4. locals() 檢視當前作用域中的內容序打散
a = 10
def func():
a = 40
b = 20
def abc():
print("哈哈")
print(a, b) # 這裡使用的是區域性作用域
print(globals()) # 列印全域性作用域中的內容
print(locals()) # 列印區域性作用域中的內容
func()
函式巢狀
函式可以互相的巢狀
def fun1():
print(111)
def fun2():
print(222)
fun1()
fun2()
print(111)
# 函式的巢狀
def fun2():
print(222)
def fun3():
print(666)
print(444)
fun3()
print(888)
print(33)
fun2()
print(555)
global和nonlocal關鍵
global: 在區域性訪問全域性中的內容
a = 100
def func(): 鄭州哪家人流醫院好
global a # 加了個global表示不再區域性建立這個變數了. 而是直接使用全域性的a
a = 28
print(a)
func()
print(a)
nonlocal: 在區域性尋找外層函式中離他最近的那個變數
a = 10
def func1():
a = 20
def func2():
nonlocal a
a = 30
print(a)
func2()
print(a)
func1()
# 結果:
# 加了nonlocal
# 30
# 30
# 不加nonlocal
# 30
# 20
以上所述是小編給大家介紹的Python動態引數/名稱空間/函式巢狀/global和nonlocal,
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2679773/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 內聯和巢狀名稱空間巢狀
- 函式的動態引數 及函式巢狀函式巢狀
- C++系列: 巢狀名稱空間C++巢狀
- 名稱空間與巢狀命名中的處理巢狀
- python名稱空間Python
- Python 名稱空間Python
- Python作用域和名稱空間Python
- Python函式/動態引數/關鍵字引數Python函式
- 『無為則無心』Python函式 — 31、名稱空間(namespace)Python函式namespace
- Python 的名稱空間Python
- Python名稱空間包Python
- C++名稱空間與友元函式薦C++函式
- Python3 名稱空間和作用域Python
- Python名稱空間和作用域窺探Python
- 名稱空間
- 使用p名稱空間和c名稱空間的XML快捷方式XML
- [譯]python中的global和nonlocal的實踐Python
- Java——通過反射獲取函式引數名稱Java反射函式
- JAXB名稱空間及名稱空間字首處理
- Python中名稱空間是什麼?名稱空間生命週期是多久?Python
- python之深入講解變數與名稱空間及資料引數與容器引數區別Python變數
- C++ 動態記憶體分配與名稱空間C++記憶體
- swift中的名稱空間及動態載入類Swift
- [10] 名稱空間擴充套件和鏈式呼叫套件
- Python名稱空間例項解析Python
- 詳解Python的函式巢狀Python函式巢狀
- PHP 名稱空間PHP
- PHP名稱空間PHP
- vuex名稱空間Vue
- jQuery 名稱空間jQuery
- JavaScript 名稱空間JavaScript
- 從引數空間到函式空間理解GBDT+XGBoost函式
- Python入門(十八):變數作用域與巢狀函式Python變數巢狀函式
- XML和Schema名稱空間詳解XML
- Python中名稱空間包簡介Python
- 1.5.2 Python函式巢狀及作用域Python函式巢狀
- Python基礎之函式的巢狀Python函式巢狀
- Python巢狀定義函式增強reduce()函式功能Python巢狀函式