Python動態引數、名稱空間、函式巢狀、global和nonlocal

ckxllf發表於2020-03-12

  函式的動態引數

  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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章