作用域
命名空間所能夠作用的範圍
內建命名空間
程式在任何階段任何位置均可以使用(全域性有效)
全域性命名空間
程式在任何階段任何位置均可以使用(全域性有效)
區域性命名空間
一般情況下只在各自的區域性命名空間有效
global # 在區域性命名空間內更改全域性命名空間變數,使用關鍵字生命。在變數是不可變型別的情況下
nonlocal # 在區域性內部命名空間修改區域性外部命名空間的值,使用關鍵字宣告。在變數是不可變的情況下
函式名遇到括號就是被呼叫 # 重點記住
1.函式名做變數被變數名賦值,本質就是呼叫函式,執行函式體**執行
def index():
print('from index')
a = index
print(a())
from index
none
2.函式名做函式的實參,被當成引數的實參後可以在函式體**內部執行函式體**
def index():
print('from index')
def func(a):
print(a)
a()print('from func')
func(index)
# 列印的是函式體**的記憶體位址
from index # 以實參的方式進入到func的函式體**中後被執行
from func # index函式體**執行結束回到func函式**體,繼續執行的列印
3.函式名做函式的返回值
def index():
print('from index') # 2
def func():
print('from func') # 1
return index
res = func()
res()
from func
from index
4.函式名做容器型別的元素
def index():
print('from index') # 1
l = [111, 222, 333, index()] # 2
print(l)
from index
[111, 222, 333, none]
'''例項'''
def register():
print('註冊功能')
def login():
print('登入功能')
def shopping():
print('購物功能')
def transfer():
print('轉賬功能')
def withdraw()
print('提現功能')
def check_order():
print('檢視訂單')
while true:
func_dict =
for i in range(1,len(func_dict) + 1):
print(i,func_dict(str(i))[0])
choice = input('請輸入編號,按0退出》:').strip()
if choice == '0':
print('再見!')
breka
while choice.isdigit and choice in func_dict:
l1 = func_dict.get(choice)[1]()
else:
print('請輸入正確編號')
巢狀使用:函式內部呼叫其他函式
def my_max(a, b):
if a > b:
return a
return b
def many_max(x,y,z,m):
res = my_max(x,y)
res1 = my_max(res,z)
res2 = my_max(res1,m)
return res2
ret = many_max(1,2,3,4)
print(ret)7
定義 :函式體內部定義其他函式
:將複雜的功能全部隱藏起來,暴露乙個簡單的藉口
def all_func(type):
def register():
print('註冊功能')
def login():
print('登入功能')
def transfer():
print('轉賬功能')
def shopping():
print('購物功能')
#最後呼叫 all_func(type)即可
閉:定義在函式內部的函式
包:內部函式使用了外部函式命名空間中的名字()
只有符合閉and包。才是'閉包函式'
def outer():
x = 222
def index():
print('from index', x)
return index
閉包函式也是另一種給引數傳參的另一種方式
def outer(x,y): # 呼叫之後傳入引數
# x = 2 # 這裡可以不參加
# y = 40 # 這裡可以不新增
def my_max(): # 函式體**內部的函式
if x > y: # 內部函式進行判斷,接受外層函式接受的引數
return x # 執行之後的返回值
return y # 返回值
return my_max # 返回值
res = outer(2,40) # 傳參雖然固定,但可以在任何地方print(res())
print(res()) # 呼叫
print(res()) # 呼叫
'''了解即可'''
1.裝飾器:是由命名空間,函式物件,閉包函式組合的
器:指的是工具
裝飾:給被裝飾物件額外新增的功能
2.裝飾器的原則
開放封閉原則
開放:對擴充套件開放
封閉:對修改封閉
3.裝飾器核心思想
在不改變'裝飾物件內部**'和'原有呼叫方式'的基礎上'新增新功能'
def index():
print('from index')
index()
# 統計index函式的執行時間
import time
# print(time.time())
# 獲取的結果叫時間戳(執行**的那一刻距離1970-1-1所經歷的秒數)
# time.sleep(3) # 讓程式原地等待3秒
def index():
time.sleep(3)
print('from index')
# 統計index函式的執行時間
# 在函式執行之前統計一次時間
start_time = time.time()
index()
# 在函式執行完畢之後再次統計
end_time = time.time()
# 計算差值
函式物件 命名空間 作用域
定義函式的三種方式 1.空函式 可以快速構建專案框架,使專案架構清晰明了 def func pass 2.無參函式 def func print from func 3.有參函式 def func x,y,args,kwargs pass 命名關鍵字引數 在函式定義階段 寫在 與 可變長引數之間的形...
作業,3 19命名空間作用域
1 如下全域性變數記錄了當前登入使用者,編寫登入功能,一旦使用者登入成功,則將全域性變數賦值為當前登入的使用者名稱 login user none login user none def users file,user into,pas with open file,mode rt encoding...
函式的巢狀及命名空間 作用域
六.函式的巢狀 1.在函式內又呼叫了其他函式 def max2 x,y 兩個值比較 if x y return x else return yres max2 1,3 print res def max3 x,y,z 三個值比較 res1 max2 x,y res2 max2 res1,z retu...