這篇文章主要介紹了Python動態引數/命名空間/函式嵌套/global和nonlocal,本文通過實體代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
函式的動態引數
1.1 *args 位置引數動態傳參def chi(*food):
print("我要吃", food)
chi("大米飯", "小米飯")
結果:我要吃 ('大米飯', '小米飯') # 多個引數傳遞進去. 收到的內容是元組tuple
注意:很多人學Python程序中會遇到各種煩惱問題解決不了,為此小編建了個Python全堆疊免費答疑交流.裙 :留而思思思零期思無(數字的諧音)轉換下可以找到了,不懂的問題有老司機解答,
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程序中會遇到各種煩惱問題解決不了,為此小編建了個Python全堆疊免費答疑交流.裙 :留而思思思零期思無(數字的諧音)轉換下可以找到了,不懂的問題有老司機解決里面還有最新Python教程專案可拿,,一起相互監督共同進步!
本文的文字及圖片來源于網路加上自己的想法,僅供學習、交流使用,不具有任何商業用途,著作權歸原作者所有,如有問題請及時聯系我們以作處理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/178314.html
標籤:Python
上一篇:python 中 __name__ == '__main__'該如何理解與其作用介紹
下一篇:什么是猴子補丁?
