『』『
加入購物車,付款,修改收貨位址...
..裝飾器多用於判斷使用者的登入狀態
』『』
示例:
用函式a作為引數,函式b接收函式a作為引數,要有閉包的特點
def
test()
:print
('----test------'
)def
func
(f):
# f=test
print
(f) f(
)# 呼叫test
print
('--------->func'
)func(test)--
----
----
----
----
----
----
----
----
----
----
----
----
->--
--test---
----
----
----
>func
def
decorate
(func)
: a =
100def()
: func(
)print
('----------->刷漆'
)print
('--------->鋪地板'
,a)#使用裝飾器
@decorate
# house()被裝飾函式
# 將被裝飾函式作為引數傳給decorate
# 執行decorate函式
defhouse()
:print
('我是毛坯房---'
)house()-
----
----
----
----
----
----
----
----
----
----
----
----
-我是毛坯房---
----
----
--->刷漆--
----
--->鋪地板 100
import time
defdecorate
(func)
:def
(*args,
**kwargs)
:#傳可變引數,變成萬能的裝飾器
print
('正在校驗中...'
) time.sleep(2)
print
('校驗完畢...'
) func(
*args,
**kwargs)
@decorate
deff1
(n):
print
('-----f1-----'
,n)f1(5)
@decorate
deff2
(name,age=30)
:print
('-----f2-----'
,(name,age)
)f2(
'xixi'
,age=
30)
如果裝飾器是多層的,誰離函式最近就優先使用那個裝飾器
帶引數的裝飾器是三層的
def
outer
(a):
#第一場 負責接收裝飾器的引數
defdecorate
(func)
:#第二層 負責接收函式
def(
*args,
**kwargs)
:#第三層 負責接收函式的引數
func(
*args)
print
('--->鋪地磚{}塊'
.format
(a))
return decorate
@outer(10)
defhouse
(time)
:print
('我{}日期拿到房子的鑰匙,是毛坯房...'
.format
(time)
)house(
'2020-6-1')-
----
----
----
----
----
----
----
----
----
----
----
----
--我2020-6
-1日期拿到房子的鑰匙,是毛坯房...
--->鋪地磚10塊
import time
islogin =
false
# 預設沒有登入
deflogin()
: username =
input
('輸入使用者名稱:'
) password =
input
('輸入密碼:'
)if username ==
'admin'
and password ==
'123456'
:return
true
else
:return
false
# 定義裝飾器
deflogin_required
(func)
:def
(*args,
**kwargs)
:global islogin
print
('------付款-------'
)# 驗證使用者登入
if islogin:
func(
*args,
**kwargs)
else
:# 跳轉到登入頁面
print
('使用者未登入,請先登入...'
) islogin = login(
)print
('result'
,islogin)
@login_required
defpay
(money)
:print
('正在付款,付款金額是:{}元'
.format
(money)
)print
('付款中...'
) time.sleep(2)
print
('付款完成!!!'
)pay(
10000
)#第一次未登入,所以不能付款。返回true之後,在付款8000就能成功
pay(
8000)-
----
----
----
----
----
----
----
----
----
----
----
----
----
----付款---
----
使用者未登入,請先登入...
輸入使用者名稱:admin
輸入密碼:123456
result true--
----付款---
----
正在付款,付款金額是:8000元
付款中...
付款完成!!!
作用域–legb規則
l:local 本地 區域性變數
e:encloseing 巢狀
g:global 全域性
b:built-in 內建的
Python學習筆記03
1.變數的型別取決於後面的值 2.判斷變數的型別 number 10 print type number 3.變數的宣告 變數名 值 起變數名規則 不能數字開頭 有字母 數字 下劃線開頭 不能使用關鍵字 false none true and as assert async await break ...
python 學習筆記03
列表 元組 元組建立之後,不能修改 可以儲存不同型別的資料 info tuple zhangsan 18,1.75,zhangsan print info tuple 0 print info tuple.count zhangsan 格式化字串 拼接生成新的字串 print s 的年齡是 d 身高...
學習《流暢的Python學習》 筆記03
2.8.1 用bisect來搜尋 import bisect import sys haystack 1 4,5 6,8 12,15 20,21 23,23 26,29 30 needles 0 1,2 5,8 10,22 23,29 30,31 row fmt defdemo bisect fn ...