为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

MMTTMM 2023-03-22 14:03:01
很抱歉问这样一个基本问题,但是包含可以有条件地返回多个函数的相同 if 块的 Pythonic 方法是什么?这是我的设置:def a():  if bool:    return 'yeehaw'  return 'a'def b():  if bool:    return 'yeehaw'  return 'b'我想从这两个函数中分解出共同的条件,但我不确定该怎么做。
查看完整描述

5 回答

?
慕的地6264312

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')


查看完整回答
反对 回复 2023-03-22
?
胡说叔叔

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')


查看完整回答
反对 回复 2023-03-22
?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

我是 python 的新手,但我认为您可以使用默认参数根据传递给函数的内容发送 a 或 b。


def a(x='a'):

    if condition: #where condition can be True or False

        return 'yeehaw'

    return x


查看完整回答
反对 回复 2023-03-22
?
慕斯王

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")


查看完整回答
反对 回复 2023-03-22
?
慕森王

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)


查看完整回答
反对 回复 2023-03-22
  • 5 回答
  • 0 关注
  • 111 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信