我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.
现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.
>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
假设我有一个字典,我想检查一个键是否映射到非空值.执行此操作的一种方法是len函数:
mydict = {"key" : "value", "emptykey" : ""}
print "True" if len(mydict["key"]) > 0 else "False" # prints true
print "True" if len(mydict["emptykey"]) > 0 else "False" # prints false
Run Code Online (Sandbox Code Playgroud)
但是,可以依赖Python的语义,以及如果定义了一个对象,它的计算结果为true,并省略了len调用:
mydict = {"key" : "value", "emptykey" : ""}
print "True" if mydict["key"] else "False" # prints true
print "True" if mydict["emptykey"] else "False" # prints false
Run Code Online (Sandbox Code Playgroud)
但是,我不确定哪个更像Pythonic.第一种感觉"显性比隐性更好",然而第二种感觉"简单比复杂更好".
我也想知道,如果我正在使用的dict不一定包含字符串,但是可以包含其他可以使用的类型(列表,集合等),那么抛弃len调用是否会让我感到困惑.OTOH,在前者(使用len调用)如果None被存储为值,代码将被炸毁,而非len版本将按预期工作(将eval为false).
哪个版本更安全,更Pythonic?
编辑:澄清假设:我知道密钥在字典中,我知道值是可以使用的.我也无法避免让零长度值进入字典.
编辑#2:似乎人们忽略了我的问题.我不是要确定检查字典中是否存在键的最Pythonic /最安全的方法,我正在尝试检查值是否为零长度
嘿伙计们,我刚刚加入了python3 HypeTrain!但是我只是想知道如何在布尔值上使用if语句:示例:
RandomBool = True
#and now how can i check this in an if statement? Like the following:
if RandomBool == True:
#DoYourThing
Run Code Online (Sandbox Code Playgroud)
而且,我可以像这样切换一个布尔值吗?
RandomBool1 == True #Boolean states True
if #AnyThing:
RandomBool1 = False #Boolean states False from now on?
Run Code Online (Sandbox Code Playgroud) python ×3
boolean ×1
coding-style ×1
comparison ×1
dictionary ×1
equality ×1
identity ×1
if-statement ×1
python-3.x ×1
string ×1