我的程序是这样的:
filename=sys.argv[1]
print "filename is default?", (filename is "default")
if (filename is "default"):
filename="..."
readfile(filename)
我在命令行中键入python .... py default。然后输出是:
文件名是默认的吗?假
IOError:...No such file or directory 'default'.
我使用pdb
,在if语句出现之前,p filename
会返回:'default'
。
答案 0 :(得分:3)
这就是你要找的东西:
if filename == "default" :
==
运算符用于比较,而is
运算符测试两个变量是否指向同一对象,而不是两个变量具有相同的值。< / p>
答案 1 :(得分:3)
使用==
两个比较两个字符串是否相等。
使用is
来测试它是否是相同的字符串。
答案 2 :(得分:1)
简答:
if filename == "default" :
答案很长:
is
检查对象标识。要检查是否相等,请使用==
。检查Python documentation on comparisons。在你的情况下:
请注意,将两个字符串常量与is
进行比较实际上会返回true。
def f():
a = "foo"
b = "foo"
print(a is b) # True, because a and b refer to the same constant
x = "f" + "oo"
print(a is x) # True, because the addition is optimized away
y = "f"
z = y + "oo" #
print(a is z) # False, because z is actually a different object
您可以通过反汇编CPython字节代码来了解幕后发生的事情:
>>> import dis
>>> dis.dis(f)
2 0 LOAD_CONST 1 ('foo')
3 STORE_FAST 0 (a)
3 6 LOAD_CONST 1 ('foo')
9 STORE_FAST 1 (b)
4 ...
5 28 LOAD_CONST 4 ('foo')
31 STORE_FAST 2 (x)
6 ...
7 50 LOAD_CONST 2 ('f')
53 STORE_FAST 3 (y)
8 56 LOAD_FAST 3 (y)
59 LOAD_CONST 3 ('oo')
62 BINARY_ADD
63 STORE_FAST 4 (z)
9 ...