Python基礎 函式修飾器 符號

2021-09-11 19:11:06 字數 827 閱讀 6004

def dec(f):

n = 3

return f(*args,**kw) * n

@dec

def foo(n):

return n * 2

python解析器遇到@,且後面跟著函式時,會把函式foo當做引數傳遞給dec函式並執行,即

dec(foo(n)),本例中執行 dec(n*2)

預設引數一定要用不可變物件,如果是可變物件,執行會有邏輯錯誤!

要注意定義可變引數和關鍵字引數的語法:

*args 是可變引數, args 接收的是乙個 tuple;

**kw 是關鍵字引數, kw 接收的是乙個 dict。

以及呼叫函式時如何傳入可變引數和關鍵字引數的語法:

可變引數既可以直接傳入: func(1, 2, 3),又可以先組裝 list 或 tuple,再通過*args 傳入:

func(*(1, 2, 3));

關鍵字引數既可以直接傳入: func(a=1, b=2),又可以先組裝 dict,再通過**kw 傳入: func

(**)

舉例:

def tea(a,**b):

print('a',a,'b',b)

tea((1,2,3),ee="c")

>>>('a', (1, 2, 3), 'b', )

def tea(a,*b):

print('a',a,'b',b)

tea((1,2,3),"c")

>>>('a', (1, 2, 3), 'b', ('c',))

符號修飾與函式簽名

p 87 linux下的gcc編譯器中,預設情況下已經去掉了在c語言符號前加 的方式,但是windows平台下的編譯器還保持著在符號前加 的習慣。函式簽名使得函式在目標檔案中的符號變成與其原始檔的函式名 函式引數 所在的類和命名空間及其它資訊關聯了起來。函式簽名經名稱修飾變成修飾後名稱目標檔案中的符...

180112 Python修飾器及符號 的說明

python一些語法糖用法 python 四 下飾器詳解 matlab 修飾器 python中的 import time defcaltime fn name or index defcal print something can be done before run the fun code.t1...

C 符號修飾和函式簽名

約在20世紀70年代以前,編譯器編譯源 產生目標檔案時,符號名與相應的變數和函式的名字是一樣的。比如乙個彙編源 裡面包含了乙個函式foo,那麼彙編器將它編譯成目標檔案以後,foo在目標檔案中的相對應的符號名也是foo。當後來unix平台和c語言發明時,已經存在了相當多的使用彙編編寫的庫和目標檔案。這...