當我們編寫函數時,我有一個關於如何定義可選關鍵字的問題。如果滿足其他條件,例如關鍵字make_plot
將是True
,那麼我們如何確定將需要的關鍵字,那麼用戶需要爲該功能提供plot_dir
關鍵字?我們如何定義一個函數的可選關鍵字?
0
A
回答
2
如果您有複雜的邏輯,用於確定需要哪些關鍵字參數,哪些是可選的,但最好是使用
def my_function(**kwargs):
(kwargs
僅僅是傳統簡單地接受任意關鍵字參數;名稱可以是任何東西,只要它的前綴爲**
,並且在之後出現所有其他參數)。
既然您的函數將接受任何參數,您可以在函數內處理它們。這裏是將
- 拒絕比
a
,b
,或c
- 其他任何關鍵字參數的一個例子使
a
必需的參數 - 使
b
可選 - 如果
b
是True
,然後c
必須1到10之間的整數;否則,c
被忽略
她是函數
def my_function(**kwargs):
try:
a_value = kwargs.pop('a')
except KeyError:
raise TypeError("Missing required keyword argument 'a'")
b_value = kwargs.pop(b, False)
if b_value is True:
try:
c_value = int(kwargs.pop('c'))
if not (1 <= c_value <= 10):
raise ValueError
except KeyError:
raise TypeError("Must use keyword argument 'c' if 'b' is True")
except ValueError:
raise ValueError("'c' must be an integer between 1 and 10!")
try:
# Are there anymore keyword arguments? We don't care which one we get
x = next(iter(kwargs))
except StopIteration:
# Good, nothing besides a, b, or c
pass
else:
raise TypeError("Unrecognized keyword argument '{0}'".format(x))
# Now do what my_function is supposed to with a_value, b_value, c_value
爲了解決您的評論,想象它僅適用於plot_dir
檢查make_plot
發現一個簡單的函數。 (我們更加鬆懈,因爲我們會忽略plot_dir
如果make_plot
丟失,而不是萎靡不振其作爲一個錯誤。)
def plot(**kwargs):
if 'make_plot' in kwargs:
plot_dir = kwargs.get('plot_dir', "/default/plot/dir")
# save or otherwise process the value of kwargs['make_plot']
1
對於你的第一個問題,看看the tutorial。
對於第二個問題,那不是你怎麼做的。使plot_dir
爲可選參數,默認爲None
,並在函數的開頭檢查是否爲plot_dir is not None
。
def plot(plot_dir=None):
if plot_dir is not None: # an argument was provided
do_some_plots(plot_dir)
else:
do_something_else()
相關問題
- 1. 如何定義一個布爾函數參數是可選的?
- 2. C函數定義和Extern關鍵字
- 3. 爲什麼使用define關鍵字來定義一個函數
- 4. 我們可以用Java關鍵字命名一個類嗎?
- 5. 在PHP中,我們如何可以用兩個關鍵字一起
- 6. 我們可以在函數模板定義中提到數據類型而不是typename和class關鍵字嗎?
- 7. 使用變量作爲預定義關鍵字(Python)的函數的關鍵字
- 8. 我們的關鍵字何時需要?
- 9. 我可以定義一個函數映射[字符串]接口{}
- 10. 一個帶有非關鍵字參數和關鍵字參數的函數
- 11. 爲什麼我們可以用一個內置函數球拍定義一個同名的函數?
- 12. MongoDB - 如何定義數組的關鍵?
- 13. 如何用Python中的依賴關鍵字參數定義函數?
- 14. 如何定義一個常數函數
- 15. TS - 只有一個void函數可以用「新」關鍵字
- 16. 如何確定選擇器的參數/關鍵字的數量
- 17. 我們如何使用Angular JS在控制器中定義一個函數
- 18. 默認關鍵字 - 可選函數參數
- 19. 如何將可選參數和關鍵字參數傳遞給同一個函數?
- 20. 如何將這個關鍵字聲明爲一個對象內定義的函數?
- 21. 如何創建類,我可以定義這是字典中的關鍵?
- 22. 我們如何指定一個自定義的lambda序列glmnet
- 23. 如何定義一個與Python關鍵字同名的django模型字段
- 24. 如何在全局可用的jQuery.ready中定義一個函數?
- 25. 如何定義一個python函數
- 26. 如何定義一個javascript string.length()函數?
- 27. 如何定義一個函數
- 28. 如何定義一個getter函數
- 29. 如何正確定義一個函數?
- 30. 如何定義一個函數
你的榜樣應該怎麼看起來像如果這兩個'make_plot'和'plot_dir'將是可選的,但'plot_dir'將與關於'make_plot'的決定有關? – Dalek 2014-09-13 13:53:28