作用域
命名空間所能夠作用的範圍
內建命名空間
程式任何階段任何位置均可使用(全域性有效)
全域性命名空間
程式任何階段任何位置均可使用(全域性有效)
區域性命名空間
一般情況下只在各自區域性命名空間中有效
'''
如果想在區域性修改全域性資料
如果資料為不可變型別則需要關鍵字global宣告
如果資料為可變型別則不需要global宣告
'''# 無global
x = 10
def index():
x = 20
index()
print(x) # 10
# 新增global
x = 10
def index():
global x
x = 20
index()
print(x) # 20
y = [11, 22]
def func():
print(y) # [11, 22]
'''如果想要在內部的區域性修改外部區域性的不可變型別
需要關鍵字nonlocal宣告
'''def index():
x = 111
def func():
x = 222
func()
print(x)
index() # 111
def index():
x = 111
def func():
nonlocal x
x = 222
func()
print(x)
index() # 222
# 1、函式可以被當作變數值賦值
def func():
pass
res = func
res() # 本質就是在呼叫func()函式
# 2、函式可以成為函式的實參
def func1():
pass
def index(fun):
pass
index(func1)
# 3、函式可以被當作返回值返回
def outer():
pass
res = outer()
'''函式不加括號被當作返回值,是返回乙個函式的記憶體位址
'''# 4、函式可以是列表、元組等容器型別的元素
def index():
pass
res = [11, 33, index]
print(res) # [11, 33, ]
# 巢狀呼叫:函式內部呼叫其他函式
def index():
print('函式index')
def func():
index()
print('函式func')
func()
# 函式體內部定義其他函式
# 將複雜的功能全部隱藏起來,暴露乙個簡單的介面
def all_func(type):
def register():
print('註冊功能')
def login():
print('登入功能')
def transfer():
print('轉賬功能')
def shopping():
print('購物功能')
# 這裡僅僅是延時巢狀定義的現象 暫不考慮優化
if type == '1':
register()
elif type == '2':
login()
elif type == '3':
transfer()
elif type == '4':
shopping()
else:
print('不知道啥功能')
all_func('3')
閉:定義在函式中的函式
包:內層函式能呼叫外層函式區域性命名空間的變數名
'''閉包函式:其實是給函式傳參的第二種方式'''
# 方式1:函式體**需要用到資料 直接在括號內定義形參即可
def index(username):
print(username)
def my_max(a, b):
if a > b:
return a
return b
# 方式2:利用閉包函式
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())
def outer(x, y):
print(x)
print(y)
res = outer(2, 3)
res()
# 爬蟲測試
import requests
url = input('輸入要爬取的**:')
'''裝飾器是由 命名空間、函式物件、閉包函式的知識點組合而來的'''
器:工具
裝飾:給被裝飾物件新增額外的功能
裝飾期的原則
開放封閉原則
開放:對擴充套件開放
封閉:對修改封閉
裝飾器核心思想:
在不改變"被裝飾物件的原**"和"原有呼叫方式"的前提下,給被裝飾物件新增新功能
import time
def index():
time.sleep(3)
print('from index')
start_time = time.time()
index()
end_time = time.time()
# time.time(): 時間戳,統計2023年1月1日所過的秒數
use_time = end_time - start_time
print(use_time) # 3.003939390182495
python閉包函式
python函式閉包 closure 比較抽象,在函式式程式設計中運用地比較多,通俗點就是子函式 內嵌函式 呼叫上層函式 閉包函式 的變數,且上層函式 閉包函式 接收的變數會儲存在子函式 內嵌函式 的變數中可以供子函式 內嵌函式 呼叫 概念很抽象,但是實現的例子還是比較容易理解的,這裡記住實現函式閉...
python閉包函式
python是一種物件導向的程式語言,在python中一切皆物件,這樣就使得變數所擁有的屬性,函式也同樣擁有。這樣我們就可以理解在函式內建立乙個函式的行為是完全合法的。這種函式被叫做內嵌函式,這種函式只可以在外部函式的作用域內被正常呼叫,在外部函式的作用域之外呼叫會報錯。而如果內部函式裡引用了外部函...
python閉包函式
在一些語言中,在函式中可以 巢狀 定義另乙個函式時,如果內部的函式引用了外部的函式的變數,則可能產生閉包。閉包可以用來在乙個函式與一組 私有 變數之間建立關聯關係。在給定函式被多次呼叫的過程中,這些私有變數能夠保持其永續性。維基百科。即在內部函式中引用了外部函式的變數,就是閉包函式。def mult...