【问题标题】:Python in operator is not working运算符中的 Python 不起作用
【发布时间】:2016-04-21 20:15:56
【问题描述】:

当我运行这段代码时,什么也没有出现。例如我调用ind(1, [1, 2, 3]),但我没有得到整数13

def ind(e, L):
    if (e in L == True):
        print('13')
    else: 
        print('12')

【问题讨论】:

  • 您实际上应该得到一个错误。在 Python 中是True,而不是true
  • if e in L: 就够了。
  • 在问这里之前提取一个最小示例,另请参阅发布指南。

标签: python list boolean function


【解决方案1】:

运算符优先级。如果您将() 放在e in L 周围,它会起作用:

def ind(e, L):
    if ((e in L) == True):
        print('13')
    else:
        print('12')

ind(1, [1, 2, 3])

但是可以在没有True 的情况下完成对True 的测试(并且是通常的习惯用法)

def ind(e, L):
    if (e in L):
        print('13')
    else:
        print('12')

ind(1, [1, 2, 3])

编辑:作为奖励,您甚至可以使用TrueFalse 来保留/取消事物。用你的例子:

def ind(e, L):
    print('13' * (e in L) or '12')

ind(1, [1, 2, 3])

ind(4, [1, 2, 3])

这个输出:

13
12

因为e in L 首先被评估为True,而13 * True13。不查找布尔表达式的第二部分。

但是当用4调用函数时,会发生以下情况:

`13` * (e in L) or '12` -> `13` * False or '12' -> '' or '12' -> 12

Becase 和空字符串也计算为 False,因此返回 or 布尔表达式的第二部分。

【讨论】:

  • 虽然'13' * (e in L) or '12' 在这里有效,但更通用的解决方案适用于不支持* 的操作数是e in L and '13' or '12'。或者,使用条件表达式使其更具可读性:'13' if e in L else '12'。另一个选项是('12', '13')[e in L],尽管这可能是选项中可读性最低的。
【解决方案2】:

应该是

def ind(e, L):
    if (e in L):
       print ('13')
    else:
       print ('12')

这里 ind(1,[1,2,3]) 将打印 13

这是我证明上述语法在我的机器上运行的证明:

【讨论】:

  • 我建议你测试一下。
  • 1) 您不能使用 Python 关键字 in 作为函数(或其他任何东西)的名称。 2) if 条件周围不需要括号,省略它们是正常的 Python 风格。
  • @TigerhawkT3 我在给出答案之前运行了整个事情。
  • 你的函数名打错了,再看一遍! in?
  • @bigOTHER 已编辑。 :) 谢谢
猜你喜欢
  • 2011-04-25
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
  • 2022-06-21
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
相关资源
最近更新 更多