相关疑难解决方法(0)

为什么使用'=='或'is'比较字符串有时会产生不同的结果?

我有一个Python程序,其中两个变量设置为该值'public'.在条件表达式中,我的比较var1 is var2失败了,但是如果我将其更改为var1 == var2它则返回True.

现在,如果我打开我的Python解释器并进行相同的"是"比较,它就会成功.

>>> s1 = 'public'
>>> s2 = 'public'
>>> s2 is s1
True
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

python string comparison identity equality

1076
推荐指数
13
解决办法
148万
查看次数

检查字典中的值是否已定义/长度为零的最Pythonic方式

假设我有一个字典,我想检查一个键是否映射到非空值.执行此操作的一种方法是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 /最安全的方法,我正在尝试检查值是否为零长度

python dictionary coding-style

25
推荐指数
2
解决办法
4万
查看次数

使用布尔值的If语句的语法

嘿伙计们,我刚刚加入了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 if-statement boolean python-3.x

7
推荐指数
2
解决办法
9万
查看次数