- def get_math_func(type, nn) :
- # 定義一個(gè)計(jì)算平方的局部函數(shù)
- def square(n) : # ①
- return n * n
- # 定義一個(gè)計(jì)算立方的局部函數(shù)
- def cube(n) : # ②
- return n * n * n
- # 定義一個(gè)計(jì)算階乘的局部函數(shù)
- def factorial(n) : # ③
- result = 1
- for index in range(2, n + 1) :
- result *= index
- return result
- # 調(diào)用局部函數(shù)
- if type == "square" :
- return square(nn)
- elif type == "cube":
- return cube(nn)
- else:
- return factorial(nn)
- print(get_math_func("square", 3)) # 輸出9
- print(get_math_func("cube", 3)) # 輸出27
- print(get_math_func("", 3)) # 輸出6
- def foo ():
- # 局部變量name
- name = 'Charlie'
- def bar ():
- # 訪問(wèn)bar函數(shù)所在的foo函數(shù)的name局部變量
- print(name) # Charlie
- name = '孫悟空'
- bar()
- foo()
UnboundLocalError: local variable 'name' referenced before assignment
該錯(cuò)誤是由局部變量遮蔽局部變量導(dǎo)致的,在 bar() 函數(shù)中定義的 name 局部變量遮蔽了它所在 foo() 函數(shù)內(nèi)的 name 局部變量,又因?yàn)?bar() 函數(shù)中的 name 局部變量定義在 print() 輸出函數(shù)之后,使的 print(name) 執(zhí)行時(shí)找不到合適的 name,因此導(dǎo)致程序報(bào)錯(cuò)。
- def foo ():
- # 局部變量name
- name = 'Charlie'
- def bar ():
- nonlocal name
- # 訪問(wèn)bar函數(shù)所在的foo函數(shù)的name局部變量
- print(name) # Charlie
- name = '孫悟空'
- bar()
- foo()
nonlocal 和前面介紹的 global 功能大致相似,區(qū)別只是 global 用于聲明訪問(wèn)全局變量,而 nonlocal 用于聲明訪問(wèn)當(dāng)前函數(shù)所在函數(shù)內(nèi)的局部變量。
聯(lián)系客服