gpt4 book ai didi

如果 'dialog-bmp' 是 'dialog-bmp',Python 将返回 false

转载 作者:行者123 更新时间:2023-12-01 05:46:32 27 4
gpt4 key购买 nike

这里有学习机会。我遇到了一种情况,我正在更新文件中的某些属性。我有一个更新文件的函数:

def update_tiapp(property, value):
print 'update_tiapp: updating "%s" to "%s"' % (property, value)
for line in fileinput.input(os.path.join(app_dir, 'tiapp.xml')): # , inplace=True
if property is 'version':
line = re.sub(r'(<version>).*?(</version>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)
elif property is 'brand':
line = re.sub(r'(<property name="brand" type="string">).*?(</property>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)'\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)
elif property is 'banner-bmp':
line = re.sub(r'(<banner-bmp>).*?(</banner-bmp>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)
elif property is 'dialog-bmp':
line = re.sub(r'(<dialog-bmp>).*?(</dialog-bmp>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)
elif property is 'url':
line = re.sub(r'(<url>).*?(</url>)', '\g<1>%s\g<2>' % value, line.strip(), flags=re.IGNORECASE)

除了 dialog-bmp 之外,所有条件都很好& banner-bmp 。由于某种我无法理解或发现的原因,条件不匹配。如果我将属性和条件更改为 dialog ,python 很乐意为我匹配并做出改变。

什么?!

这是一个简单的更改,我不介意进行它,但我想理解。

连字符是什么让一切都炸毁了?我们不只是在这里进行字符串匹配吗?还是在幕后发生了一些我没有预料到的事情?

最佳答案

永远不要使用 is 来检查相等性(它检查对象身份)!使用 == 代替:

if property == "version":
...
elif property == "brand":
...
etc.

is 可能适用于内部/缓存的短字符串,但前提是它们只包含对 Python 标识符(“变量名称”)有效的字符。您的程序就是一个完美的例子:

>>> a = "dialog-bmp"
>>> b = "dialog-bmp"
>>> a is b
False
>>> id(a)
32571184L
>>> id(b)
32571088L
>>> a = "brand"
>>> b = "brand"
>>> a is b
True
>>> id(a)
32610664L
>>> id(b)
32610664L

关于如果 'dialog-bmp' 是 'dialog-bmp',Python 将返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15948354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com