函式的引數:
閉包:
建立閉包,實際上是得到了內部函式的引用,呼叫閉包,實際上是呼叫的內層函式。
在閉包內部去修改使用到外部函式的變數,需要在內部函式中使用nonlocal關鍵字進行宣告
nonlocal var
裝飾器
# 定義裝飾器1
defcheck1
(fn1)
:def
inner1()
:print
("登陸驗證1"
) fn1(
)return inner1
# 定義裝飾器2
defcheck2
(fn2)
:def
inner2()
:print
("登陸驗證2"
) fn2(
)return inner2
# 被裝飾器的函式
# 裝飾器的裝飾順序是由內向外的
@check1 # inner2 = check1(inner2) = inner1
@check2 # comment = check2(comment) = inner2
defcomment()
:print()
comment(
) ```
-**帶有引數的裝飾器**:
- 裝飾器只接受唯一的引數,也就是被裝飾的函式,在裝飾器的外層再巢狀乙個函式,然後就可以傳入指定的引數。
```python
# 裝飾器
deflogging
(flag, num3)
:# flag = "+"
# 外部函式
defdecorator
(fn)
:# 內部函式
definner
(num1, num2)
:# 判斷流程
if flag ==
"+":
print
("--正在努力加法計算--"
)elif flag ==
"-":
print
("--正在努力減法計算--"
)print
(num1 + num2 + num3)
result = fn(num1, num2)
return result
return inner
# 返回裝飾器
return decorator
# 被帶有引數的裝飾器裝飾的函式
@logging(
'+',
666)
# 1 logging("+") 2 @decorator起到裝飾器的功能了
defadd
(a, b)
: result = a + b
return result
# 等價於以下操作
# decorator = logging('+', 666)
## @decorator
# def add(a, b):
# result = a + b
# return result
# 執行函式
result = add(1,
3)print
(result)
```-**類裝飾器**:
- 本質上使用了類中的\_\_call\_\_魔法方法,這個魔法方法的作用就是,通過包含這個魔法方法的類建立出來的例項物件,可以被當做函式一樣被呼叫,那麼呼叫的結果就是進入到\_\_call\_\_魔法方法中執行裡面的**。
```python
# 定義類裝飾器
class
check
(object):
# 使用類建立例項物件時,給例項物件賦予初始化的一些屬性
def__init__
(self, fn)
:# fn = comment
self.__fn = fn
# call方法能讓通過實現了這個方法的類建立出來的例項化物件能像函式一樣被呼叫
# 呼叫這個例項化物件,實際上就是執行了這個call方法
def__call__
(self,
*args,
**kwargs)
:print
("登陸"
) res = self.__fn(
*args,
**kwargs)
# comment()
return res
# 被裝飾的函式
@check # comment = check(comment)
defcomment
(a, b)
:print()
# print(a + b)
return a + b
print
(comment(6,
6))
```- 實現給類裝飾器傳參:
-deffunc
(num)
:class
check
(object):
# 使用類建立例項物件時,給例項物件賦予初始化的一些屬性
def__init__
(self, fn)
:# fn = comment
self.__fn = fn
# self.num = num
# call方法能讓通過實現了這個方法的類建立出來的例項化物件能像函式一樣被呼叫
# 呼叫這個例項化物件,實際上就是執行了這個call方法
def__call__
(self,
*args,
**kwargs)
:print
("登陸"
) res = self.__fn(
*args,
**kwargs)
# comment()
print
(res + num)
return res
return check
@func(8)
# comment = check(comment)
defcomment
(a, b)
:print()
# print(a + b)
return a + b
print
(comment(6,
6))
Python學習筆記Day1
16 9 19 1.python3.5中一些小小的變化 print helloworld 1 2結果為0.5 1 2實現整除 3 2乘方 pow 2,3 八進位制 十進位制 0o10 8 16進製制 十進位制 0xaf 175 2.得到上次輸入的語句 alt p 3.x input x x 2 y ...
Python學習筆記 Day1
1.python提供了乙個工具,可以將python2所寫的 自動轉換為python3可使用的語法。2.python是解釋型的,這表示python 被直譯器翻譯和執行。3.print作用 在控制台上顯示字串訊息 4.縮排問題 1 在python中每一句 都需要頂格寫,否則出現 syntaxerror ...
Python學習日誌 Day1
編譯型 c c 動靜態 對資料型別做檢查的時間,執行時檢查為動態,不需指明資料型別 編譯期檢查為靜態 python 動態解釋強型別 ide 整合開發環境 integrated development environment print a a input type a 記憶體位址 id a 字串 s...