為了有效地使用預設值,您需要了解預設值是如何工作的。
函式是物件。因此,它們具有屬性。所以,如果我建立這個函式:>>> def f(x, y=):
return y
我建立了乙個物件。其特點如下:>>> dir(f)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__',
'__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__',
'__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals',
'func_name']
其中之一是func_defaults。聽起來不錯,裡面有什麼?>>> f.func_defaults
這是乙個包含函式預設值的元組。如果預設值是物件,則元組包含該物件的例項。
如果您認為f向列表中新增了乙個項,而在沒有提供列表的情況下返回僅包含該項的列表,則會導致一些相當違反直覺的行為:>>> f(1)
[1]>>> f(2)
[1, 2]
但是,如果您知道預設值是儲存在函式屬性之一中的物件例項,那麼它就不那麼違反直覺了:>>> x = f(3)
>>> y = f(4)
>>> x == y
true
>>> x
[1, 2, 3, 4]
>>> f(6)
[1, 2, 3, 4, 5, 6]
知道了這一點,很明顯,如果希望函式引數的預設值是乙個新列表(或任何新物件),就不能簡單地將物件的例項儲存在func_defaults中。每次呼叫函式時都必須建立乙個新的:>>>def g(x, y=none):
if y==none:
y =
return y
python中使用可選引數和命名引數
info 函式就是這樣乙個例子,它有兩個可選引數。def info object,spacing 10,collapse 1 spacing 和 collapse 是可選引數,因為它們已經定義了預設值。object 是必備引數,因為它沒有指定預設值。如果呼叫 info 時只指定乙個引數,那麼 spa...
mvn可選引數
引數 描述 pl 選項後可跟隨 或者所選模組的相對路徑 多個模組以逗號分隔 am和 pl連用,同時構建指定模組依賴的模組 amd 和 pl連用,同時構建依賴於指定模組的模組 rf從指定的模組開始構建 n不遞迴子模組 這裡說的依賴包含兩層含義 父子關係 依賴關係 例1 從指定的模組開始構建 mvn c...
Python的位置引數,可選引數,關鍵字引數
關鍵字引數 把引數名與值繫結在一起,使用引數名提供的引數叫做關鍵字引數。設定關鍵字引數預設值。位置引數 帶單個星號引數 以元祖形式輸出 關鍵字引數 帶兩個星號引數 以字典形式輸出,def funcd a,b,c print a print b print length of c is d len c...