# 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 x # return func的記憶體位址
res=foo(func) # foo(func的記憶體位址)
print(res) # res=func的記憶體位址
res()
l=[func,]
# print(l)
l[0]()
dic=
print(dic)
dic['k1']()
#簡單的atm功能
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('輸入的指令不存在')
#簡單優化版
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 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)
res2=max2(res1,c)
res3=max2(res2,d)
return res3
res=max4(1,2,3,4)
print(res)
在函式內定義其他函式
def f1():
def f2():
pass
# 圓形
def circle(radius,action=0):
from math import pi
# 求圓形的求周長:2*pi*radius
def perimiter(radius):
return 2*pi*radius
# 求圓形的求面積:pi*(radius**2)
def area(radius):
return pi*(radius**2)
if action == 0:
return perimiter(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
def f1():
x = 33333333333333333333
def f2():
print('函式f2:',x)
return f2
f=f1()
print(f)# .f2 at 0x000001c757f1a430>
x=4444
f() # '函式f2:33333333333333333333
def foo():
x=5555
f()foo()
兩種為函式體傳參的方式:
方式一:直接把函式體需要的引數定義成形參
def f2(x):
print(x)
f2(1)
f2(2)
f2(3)
方式二:閉包函式
def f1(x): # x=3
x=3def f2():
print(x)
return f2
x=f1(3)
print(x)
x()
import requests
# 傳參的方案一:
def get(url):
response=requests.get(url)
print(len(response.text))
get('')
get('')
get('')
# 傳參的方案二:
函式物件 巢狀和閉包函式
精髓 可以把函式當成變數去用 func 記憶體位址 def func print from func f func 函式func賦值給變數f print f,func 列印f和func的記憶體位址,完全相同 f 相當於呼叫了函式func 輸出 func at 0x02f434a8 from func...
函式物件 函式巢狀和閉包函式
函式物件指的是函式可以被當做 資料 來處理,具體可以分為四個方面的使用,如下 func 記憶體位址 deffunc print from func 1 可以賦值 f func 將函式的記憶體位址繫結給f print f,func f 記憶體位址加 呼叫函式 2 可以當做函式當做引數傳給另外乙個函式 ...
python函式巢狀閉包 閉包與巢狀函式
沒有區別,因為沒有閉合函式,不是真的。有closures,但這一術語指的是在外部和內部範圍中儲存變數的技術。只剩下巢狀函式。在 巢狀函式只是在另乙個函式內部定義的函式 def outer def inner 當outer 定義了乙個inner 然後也使用的名稱,則該變數名稱為閉包單元,儲存在inne...