3 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個(gè)贊
正如馬克在他的評(píng)論中已經(jīng)說(shuō)過(guò)的,典型的約定是使用默認(rèn)值None。然后你可以檢查它是否仍然None在調(diào)用。
def my_func(req, opt=None):
if opt is None:
#opt wasn’t passed.
return False
#opt was passed
return True
盡管如果您想對(duì)其他選項(xiàng)進(jìn)行更多研究(大多數(shù)情況下最不合常規(guī)),請(qǐng)隨時(shí)查看這些答案

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
一種解決方案是使用裝飾器/包裝器。它們?cè)试S您與在運(yùn)行時(shí)傳遞給您的函數(shù)的內(nèi)容進(jìn)行交互,然后按照您認(rèn)為合適的方式處理所說(shuō)的事情考慮以下代碼:
def check_keywords(func):
def wrapper(*args, **kwargs):
if kwargs:
print('Keyword was passed!')
return func(*args, **kwargs)
return wrapper
@check_keywords
def my_func(req, opt=0):
print(req)
check_keywords捕獲該函數(shù),如果它檢測(cè)到關(guān)鍵字被傳遞到my_func,它會(huì)打印一些東西。此打印語(yǔ)句可以轉(zhuǎn)換為您想要的任意代碼。
例如:
my_func(1)
>>> 1
my_func(1, opt = 1)
>>> Keyword was passed!
>>> 1

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊
檢測(cè)參數(shù)是否被傳遞的標(biāo)準(zhǔn)方法是哨兵值;但是,如果您愿意丟失函數(shù)簽名,則可以使用**kwargs:
def my_func(**kwargs):
return 'opt' in kwargs
print(my_func()) #=> False
print(my_func(opt=0)) $=> True
添加回答
舉報(bào)