精髓:可以把函式當成變數去用
# func=記憶體位址
def func():
print('from func')
f=func # 函式func賦值給變數f
print(f,func) # 列印f和func的記憶體位址,完全相同
f() # 相當於呼叫了函式func()
輸出:func at 0x02f434a8> from func
def func():
print('from func')
def foo(x): # x = func的記憶體位址
print(x) # 列印func的記憶體位址,完全相同
x() # 相當於呼叫了函式func()
foo(func) # foo(func的記憶體位址)
輸出:func at 0x02f434f0>
from func
def func():
print('from func')
def foo(x): # x=func的記憶體位址
return x # return func的記憶體位址
res=foo(func) # foo(func的記憶體位址)
print(res) # res=func的記憶體位址
res() # 相當於呼叫了函式func()
輸出:func at 0x02fb34f0>
from func
def func():
print('from func')
l=[func,] # 把func當作列表的乙個元素
print(l) # 輸出列表l
l[0]() # l[0]=func,l[0]()相當於呼叫了函式func()
dic= # 把func當作字典dic第乙個key'k1'的值
print(dic) # 輸出字典dic
dic['k1']() # dic['k1']=func,dic['k1']()相當於呼叫了函式func()
輸出:from func
from func
def exit():
break
def login():
print('登入功能')
def transfer():
print('轉賬功能')
def check_banlance():
print('查詢餘額')
def withdraw():
print('提現')
def register():
print('註冊')
func_dic=
while true:
print("""
0 退出
1 登入
2 轉賬
3 查詢餘額
4 提現
5 註冊
""")
choice = input('請輸入命令編號:').strip()
if not choice.isdigit():
print('必須輸入編號,傻叉')
continue
if choice == '0':
break
if choice in func_dic:
func_dic[choice]()
else:
print('輸入的指令不存在')
# if choice == '1':
# login()
# elif choice == '2':
# transfer()
# elif choice == '3':
# check_banlance()
# elif choice == '4':
# withdraw()
# else:
# print('輸入的指令不存在')
def login():
print('登入功能')
def transfer():
print('轉賬功能')
def check_banlance():
print('查詢餘額')
def withdraw():
print('提現')
def register():
print('註冊')
func_dic =
while true:
for k in func_dic:
print(k, func_dic[k][0])
choice = input('請輸入命令編號:').strip()
if not choice.isdigit():
print('必須輸入編號,傻叉')
continue
if choice == '0':
break
if choice in func_dic:
func_dic[choice][1]()
else:
print('輸入的指令不存在')
def max2(x,y):
if x > y:
return x
else:
return y
def max4(a,b,c,d):
res1=max2(a,b) # 第一步:比較a,b得到res1
res2=max2(res1,c) # 第二步:比較res1,c得到res2
res3=max2(res2,d) # 第三步:比較res2,d得到res3
return res3
res=max4(1,2,3,4)
print(res)
輸出:4
def f1():
def f2():
pass
# 圓形
# 求圓形的求周長:2*pi*radius
def circle(radius,action=0):
from math import pi
def perimiter(radius):
return 2*pi*radius
# 求圓形的求面積:pi*(radius**2)
def area(radius):
return pi*(radius**2)
if action == 0:
return 2*pi*radius
elif action == 1:
return area(radius)
circle(33,action=0)
def f1():
x = 33333333333333333333
def f2():
print(x)
f2()
x=11111
def bar():
x=444444
f1()
def foo():
x=2222
bar()
foo()
輸出:33333333333333333333
思路:呼叫的是函式foo(),函式foo()內的x=2222未被呼叫,呼叫了函式bar()
函式bar()內的x=444444未被呼叫,呼叫了函式f1()
函式f1()內定義了x,定義了函式f2(),函式f2()內輸出x
函式f2()內未定義x,就去f1()中,找到了x=33333333333333333333
最後函式f1()呼叫了函式f2(),輸出33333333333333333333
def f1():
x = 33333333333333333333
def f2():
print('函式f2:',x)
return f2
f=f1() # 呼叫f1(),返回函式f2(),輸出:函式f2:33333333333333333333
def foo():
x=5555
f()foo() # 呼叫foo(),foo()內呼叫了f(),也就是呼叫了f2,輸出:函式f2:33333333333333333333
輸出:函式f2: 33333333333333333333
def f2(x):
print(x)
f2(1)
f2(2)
f2(3)
輸出:123
def f1(x): # x=3
# x=3
def f2():
print(x)
return f2
x=f1(3)
print(x)
x()輸出:
.f2 at 0x02f734a8>
3
函式物件 函式巢狀和閉包函式
函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用,如下 func 記憶體位址 deffunc print from func 1 可以賦值 f func 將函式的記憶體位址繫結給f print f,func f 記憶體位址加 呼叫函式 2 可以當做函式當做引數傳給另外乙個函式 ...
物件 巢狀和閉包函式
func 記憶體位址 def func print from func f func print f,func f def foo x x func的記憶體位址 print x x func foo func foo func的記憶體位址 def foo x x func的記憶體位址 return ...
python函式巢狀閉包 閉包與巢狀函式
沒有區別,因為沒有閉合函式,不是真的。有closures,但這一術語指的是在外部和內部範圍中儲存變數的技術。只剩下巢狀函式。在 巢狀函式只是在另乙個函式內部定義的函式 def outer def inner 當outer 定義了乙個inner 然後也使用的名稱,則該變數名稱為閉包單元,儲存在inne...