1. 程式人生 > 程式設計 >Python巢狀函式,作用域與偏函式用法例項分析

Python巢狀函式,作用域與偏函式用法例項分析

本文例項講述了Python巢狀函式,作用域與偏函式用法。分享給大家供大家參考,具體如下:

內嵌函式(巢狀函式):

  • 意思:在函式裡面再定義一個新的函式
  • 如果在函式體內不呼叫內嵌的函式,那麼無法在外部呼叫
def my_pr1():
  print("第一層列印")
  def my_pr2():
    print("第二層列印")
  my_pr2()#如果在函式體內不呼叫內嵌的函式,那麼無法在外部呼叫
my_pr1()

作用域:

local(區域性作用域) -->enclosing(函式範圍作用域)-->global(全域性作用域)--->build-in(內建物件作用域)

程式碼塊級別的作用域: Python沒有劃分程式碼塊作用域

  • 程式碼塊裡的變數,外部可以呼叫
if 1>0:
  name="automan"
print(name)

上述程式碼執行結果:

automan

函式基本的作用域:

  • 區域性作用域:
    • 函式內部定義的變數是區域性變數,外部無法訪問
a=50
def change(x):
  x=6
change(a)
print("after change:",a)

上述程式碼執行結果:

after change: 50

def func3():
  superman="automan"
print(superman)

執行結果:

NameError: name 'superman' is not defined

  • 內嵌關係的函式的作用域:
    • 對於內嵌關係的函式的作用域依然遵循local(區域性作用域) -->enclosing(函式範圍作用域)-->global(全域性作用域)--->build-in(內建物件作用域)
  1. 如果自身函式有目標變數,則使用自身函式內的變數的值;
  2. 如果沒有,會向上找父函式中是否存在目標變數,如果有,則使用父函式中的該變數的值;【如果父函式還有父函式,也會一直向上查詢】
  3. 直到離開最外層的函式體,那麼會在全域性範圍內找該變數
  4. 如果再沒有,會到內建物件作用域找
  5. 都沒有就報錯,丟擲異常
def func4():
  superman="automan"
  def haha():
    print(superman)
  haha()
func4()

執行結果:

automan

  • 非內嵌關係的函式的作用域:
    • 非內嵌關係的函式作用域依然遵循local(區域性作用域) -->enclosing(函式範圍作用域)-->global(全域性作用域)--->build-in(內建物件作用域)
    • 但由於不是父子關係的巢狀函式,當自身函式範圍區域內找不到時,會直接到全域性作用域找
aotuman='金甲戰士'
def f5():
  print(aotuman)
def f4():
  aotuman='max'
  f5()
f4()

執行結果:

金甲戰士

偏函式:

  • 預設填寫某個函式的某些引數,返回一個新的函式
  • 避免了引數的重複輸入
import functools
print_t=functools.partial(print,end='\t')
print_t(1)
print_t(1)
print_t(1)

上述程式碼結果:

1 1 1

關於Python相關內容感興趣的讀者可檢視本站專題:《Python函式使用技巧總結》、《Python面向物件程式設計入門與進階教程》、《Python資料結構與演算法教程》、《Python字串操作技巧彙總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》

希望本文所述對大家Python程式設計有所幫助。