我正在解决hackerrank中的一个问题,此输出使我感到困惑:
sudo iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport 443 -m conntrack --ctstate ESTABLISHED -j ACCEPT
有人可以解释一下Python如何解释第二个表达式吗? 为什么输出为True?
答案 0 :(得分:0)
为什么第一个对任何评估都为真
[str(x)==str(x)[::-1] for x in lil]
[str(x)==str(x)[::-1] for x in [1, 81]]
[str(1)==str(1)[::-1], str(81)==str(81)[::-1]]
['1'=='1'[::-1], '81'=='81'[::-1]]
['1'=='1', '81'=='18']
[True, False]
第二版出现错误(正确)
TypeError: 'str' object is not callable
这是因为[str(x)==str(x)[::-1]] for x in lil
是无效的生成器。
注意任何等价于
def any(iterable):
for element in iterable:
if element:
return True
return False
答案 1 :(得分:-1)
任何是可用于列表的功能。在第二个代码中,您想使用列表理解来创建列表。因此,在第二个代码中,没有生成 any 列表中的括号,因为该命令不知道在哪里寻找x。代码
[str(x)==str(x)[::-1]]
不会生成任何列表,但是会生成代码
[str(x)==str(x)[::-1] for x in lil]
产生。