函式物件 作用域

2022-08-23 12:30:16 字數 2839 閱讀 2816

例項1:通過外部調取內部值

函式物件+作用域(打破函式呼叫層級,從外部調取內部函式的值)

#正常情況只能通過f1去呼叫裡面函式inner()的值

def f1():

def inner():

print('from inner')

inner()

f1()

#實現外部調取內部函式的輸出值

#思路:先呼叫出內建函式實體地址,再通過實體地址() 再輸出內建函式的值

def f1():

def inner():

print('from inner')

return inner

x=f1()

print(x)   #這一步呼叫inner並輸出inner實體地址,返回的是inner的實體地址.inner at 0x05a5e7c8>

x()       #最後 通過實體地址加(),調取函式值

#進而可以實現在其他函式體中調取inner()函式

def bar():

x()bar()

例項2:銀行轉賬

#正常的取款方式:

def qukuan():

print('1:取款')

def zhuanzhang():

print('2:轉賬')

def zhifu():

print('3:支付')

def yuer():

print('4:查詢餘額')

msg ='''

1.取款

2.轉賬

3.支付

4.查詢餘額

5.退出

'''while true:

print(msg)

choice=input("請選擇數字1,2,3,4:")

if choice == '5':

break

elif choice == "1":

qukuan()

elif choice == "2":

zhuanzhang()

elif choice == "3":

zhifu()

elif choice == "4":

yuer()

else:

print('none')

結合函式改進版:  

def withdraw():

print('1:取款')

def transfer():

print('2:轉賬')

def pay():

print('3:支付')

def check_balance():

print('4:查詢餘額')

def quit():

print('5.退出')

operate={

'1':withdraw,         #把函式名當成變數名去用,通過呼叫key值拿到每個功能的函式名,通過 函式名+() 取出輸出結果

'2':transfer,

'3':pay,

'4':check_balance,

'5':quit

while true:

msg = '''

1.取款

2.轉賬

3.支付

4.查詢餘額

5.退出

'''print(msg)

choice=input("請選擇數字1,2,3,4:")

if choice == '5':break

if choice not in operate:       #in對於字典來說判斷的是key

print('裡面沒有對應的功能,請重新選擇')

continue

operate[choice]()     #operate[choice]取到的值是value指,即qukuan、zhuanzhang等等

#思路:

# if迴圈選擇是重複性的操作,而且後面隨著新需求的增加,還需要手動去增加很過條目,比較麻煩

# 考慮如何讓使用者的選擇由原來手動的if一一對應1,2,3,4,5 ,改變成讓系統自動去對應上每個功能的函式名,最後輸出函式結果

#本質就是如何實現在外部調取函式名,從而實現使用者的選擇輸入後,列印相應的函式體結果

global在函式內部改動全域性

x=6def foo():

# global x

x=3foo()

print(x)

#不加global預設輸出》6,因為print和x=6屬於同一層級,全域性命名空間

#x=3只在函式foo裡面被呼叫,屬於區域性命名空間

#如果加了global 輸出是》3,global宣告是全域性的,所以當x=3時,全域性的6會被改掉

#nonlocal可以改動上一層函式f2的值

def f1():

def f2():

x=2222

def f3():

nonlocal x

x=666666

f3()

print(x)

f2()

f1()

#區域性如果要修改全域性可變型別,不需要借助任何宣告,可以直接修改

#在區域性如果想要修改全域性的不可變型別,需要借助global宣告,宣告為全域性的變數就可以直接修改了

x=f1()

print(x)     #輸出為['a']

JS(六)作用域 物件 建構函式

2.2 區域性變數 2.3 全域性變數和區域性變數的區別 2.4 js 中美譽哦塊級作用域 var num 10 function fn fun fn fun 報錯 varfun function 相當於執行了以下 var fun fun fun function console.log num u...

函式的物件 巢狀及作用域

1 函式的物件 函式的第一類物件的含義是函式可以被當做資料處理 def func func print from func print func 列印函式名的位址 加括號即呼叫函式內容 1 引用 def func func print from func f func print f f 2 把自己...

函式物件 命名空間 作用域

定義函式的三種方式 1.空函式 可以快速構建專案框架,使專案架構清晰明了 def func pass 2.無參函式 def func print from func 3.有參函式 def func x,y,args,kwargs pass 命名關鍵字引數 在函式定義階段 寫在 與 可變長引數之間的形...