当前位置: 首页 > 面试题库 >

如何在IF条件中分配变量,然后将其返回?

贺立果
2023-03-14
问题内容
def isBig(x):
   if x > 4: 
       return 'apple'
   else: 
       return 'orange'

这有效:

if isBig(y): return isBig(y)

这不起作用:

if fruit = isBig(y): return fruit

为什么第二个不起作用!?我要一线。除此以外,第一个将调用函数TWICE。

如何在不调用函数两次的情况下使其成为1个衬板?


问题答案:

我看到其他人已经指出了我的旧“分配和设置”食谱,该食谱的最简单版本归结为:

class Holder(object):
   def set(self, value):
     self.value = value
     return value
   def get(self):
     return self.value

h = Holder()

...

if h.set(isBig(y)): return h.get()

但是,这主要是为了简化Python和直接在if或中支持赋值的语言之间的音译while。如果你有在级联这种检查和回报“数百名”,这是
好做一些完全不同的:

hundreds = isBig, isSmall, isJuicy, isBlah, ...

for predicate in hundreds:
  result = predicate(y)
  if result: return result

甚至像

return next(x for x in (f(y) for f in hundreds) if x)

如果不满足谓词就可以获取StopIteration异常,或者

return next((x for x in (f(y) for f in hundreds) if x)), None)

None当不满足谓词时,if是正确的返回值,等等。

几乎总是使用(甚至希望;-)Holder技巧/非习惯用法是一种“设计气味”,这表明正在寻找一种不同且更具Python风格的方法-Holder有理由的一种情况正是我所针对的特殊情况设计了它,例如,要在Python代码和某些非Python之间保持紧密对应的情况(您要在Python中音译参考算法,并希望它先工作才能重构为更Pythonic的形式,或者重新将Python编写为原型,一旦其有效运行,它将转化为C
++,C#,Java等)。



 类似资料:
  • 问题内容: 我想知道是否可以像这样在条件运算符中为变量赋值: 用Java有什么办法做到这一点?因为我知道在某些情况下这是可能的,但是我不确定在if语句中是否做错了或者是否不可能。 问题答案: 可以分配变量,但不能在条件语句中声明变量:

  • 问题内容: 在Python中,可以分割字符串并将其分配给变量: 但在Go中似乎无效: 问题: 如何在一个步骤中拆分字符串并分配值? 问题答案: 例如两个步骤 输出: 例如一个步骤 输出:

  • 这是我目前所拥有的,但它不起作用。如何连接所有内容?我认为问题在于逗号。

  • 问题内容: 我刚刚遇到了这段代码 并且认为, 必须 有一个比用无限循环更好的方法。 所以我尝试了: 显然有一个错误。 有什么方法可以避免在那种情况下使用? 编辑: 理想情况下,您要避免重复说两次…恕我直言,重复甚至比a还要糟糕,尤其是在语句很复杂的情况下。 问题答案: 如果您不对数据做任何奇特的事情,例如以后再阅读更多行,总会有:

  • 问题内容: 仅仅使用Java 8中的新lambda和功能特性,我不确定如何做到这一点。 例如,以下内容有效: 但是以下内容给我语法错误: 有任何想法吗? 问题答案: 您已经忘记了: 运行:

  • 问题内容: 我正在使用以下代码: 该值不警报。怎么了 问题答案: 实质上: