命名空間作用域

2022-09-10 09:57:22 字數 4403 閱讀 2622

作用域

命名空間所能夠作用的範圍

內建命名空間

程式在任何階段任何位置均可以使用(全域性有效)

全域性命名空間

程式在任何階段任何位置均可以使用(全域性有效)

區域性命名空間

一般情況下只在各自的區域性命名空間有效

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...