3 回答

TA貢獻1876條經(jīng)驗 獲得超6個贊
從 Python 3.8開始:
value = x if (x:=foo()) in allowed_list else 'default'

TA貢獻1886條經(jīng)驗 獲得超2個贊
如果您喜歡做一些過度的事情來完成簡單的任務(wù)(賦值表達式/海象運算符),請定義一個裝飾器來為您處理返回值:
allowed_list = ['foo', ]
def check_return_value(fn):
def inner(*args, **kwargs):
result = fn(*args, **kwargs)
return result if result in allowed_list else 'default'
return inner
# suppose this name is imported from somewhere else and you can't use @ syntax
def some_func():
return 'boo'
some_func = check_return_value(some_func)
var = some_func()
print(var) # prints "default"

TA貢獻1801條經(jīng)驗 獲得超8個贊
只要您僅限于 Python 3.6 并且不能使用賦值表達式,您就可以為自己創(chuàng)建一個輔助函數(shù)來處理這個問題。
def some_func():
return 'foo'
def default_if_invalid(value, allowed_values, default):
return value if value in allowed_values else default
allowed_list = ['foo', 'bar']
value = default_if_invalid(some_func(), allowed_list, 'default')
None如果您始終檢查相同的允許值列表,或者如果您希望該方法在未提供默認值的情況下提供默認值(也許),則可以輕松修改此值。例如:
def default_if_invalid(value, default=None):
allowed_list = ['foo', 'bar']
return value if value in allowed_values else default
value = default_if_invalid(some_func()) # sets to None if not in list
value = default_if_invalid(some_func(), 'default') # specifies a default
添加回答
舉報