猿问

如何在多个函数中包含相同的 if 块?

很抱歉问这样一个基本问题,但是包含可以有条件地返回多个函数的相同 if 块的 Pythonic 方法是什么?这是我的设置:


def a():

  if bool:

    return 'yeehaw'

  return 'a'


def b():

  if bool:

    return 'yeehaw'

  return 'b'

我想从这两个函数中分解出共同的条件,但我不确定该怎么做。


MMTTMM
浏览 112回答 5
5回答

慕的地6264312

使用装饰器或闭包def my_yeehaw(result):  def yeehaw():    if some_bool:      return 'yeehaw'    return result  return yeehawa = my_yeehaw('a')b = my_yeehaw('b')

胡说叔叔

您可以使用接受 a 的 lambda。bool以及条件为假时返回的默认值:check = lambda condition, default: 'yeehaw' if condition else defaultdef a():     return check(condition, 'a')def b():     return check(condition, 'b')

海绵宝宝撒

我是 python 的新手,但我认为您可以使用默认参数根据传递给函数的内容发送 a 或 b。def a(x='a'):    if condition: #where condition can be True or False        return 'yeehaw'    return x

慕斯王

(注意:我的命名不是最好的,考虑到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 Nonedef 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): yeehawa(False): ab(True, same_bool): yeehawb(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")

慕森王

我最终喜欢上了装饰器语法,因为包含重复条件逻辑的函数还有很多其他功能:# `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    @yeehawdef shark(x):  return str(x)shark(7)
随时随地看视频慕课网APP

相关分类

Python
我要回答