5 回答
TA贡献1817条经验 获得超6个赞
使用装饰器或闭包
def my_yeehaw(result):
def yeehaw():
if some_bool:
return 'yeehaw'
return result
return yeehaw
a = my_yeehaw('a')
b = my_yeehaw('b')
TA贡献1804条经验 获得超8个赞
您可以使用接受 a 的 lambda。bool以及条件为假时返回的默认值:
check = lambda condition, default: 'yeehaw' if condition else default
def a():
return check(condition, 'a')
def b():
return check(condition, 'b')
TA贡献1809条经验 获得超8个赞
我是 python 的新手,但我认为您可以使用默认参数根据传递给函数的内容发送 a 或 b。
def a(x='a'):
if condition: #where condition can be True or False
return 'yeehaw'
return x
TA贡献1864条经验 获得超2个赞
(注意:我的命名不是最好的,考虑到same_bool可以更好地调用该函数identical_if_block(...)以遵循您的示例而且我还假设 bool_ 是一个参数,尽管它可以作为全局参数使用。但不像bool任何函数对象那样,总是真实的
>>> bool(bool)
True
)
使用一个函数,只要它不需要返回 falsies。
def same_bool(bool_):
" works for any result except a Falsy"
return "yeehaw" if bool_ else None
def a(bool_):
res = same_bool(bool_)
if res:
return res
return 'a'
def b(bool_, same_bool_func):
#you can pass in your boolean chunk function
res = same_bool_func(bool_)
if res:
return res
return 'b'
print ("a(True):", a(True))
print ("a(False):", a(False))
print ("b(True, same_bool):", b(True,same_bool))
print ("b(False, same_bool):", b(False,same_bool))
输出:
a(True): yeehaw
a(False): a
b(True, same_bool): yeehaw
b(False, same_bool): b
如果确实需要伪造,请使用特殊的保护值
def same_bool(bool_):
" works for any result"
return False if bool_ else NotImplemented
def a(bool_):
res = same_bool(bool_)
if res is not NotImplemented:
return res
return 'a'
您也可以输入"a","b"因为它们是恒定的结果,但我认为这只是在您的简化示例中。
def same_bool(bool_, val):
return "yeehaw" if bool_ else val
def a(bool_):
return same_bool(bool_, "a")
TA贡献1777条经验 获得超3个赞
我最终喜欢上了装饰器语法,因为包含重复条件逻辑的函数还有很多其他功能:
# `function` is the decorated function
# `args` & `kwargs` are the inputs to `function`
def yeehaw(function):
def decorated(*args, **kwargs):
if args[0] == 7: return 99 # boolean check
return function(*args, **kwargs)
return decorated
@yeehaw
def shark(x):
return str(x)
shark(7)
添加回答
举报