python-3.x - 为什么 Python 字符串无法正确比较?
问题描述
我正在比较 Python 中的两个字符串。但是比较看不出变量的值firmware
和hardware
字符串"firmware"
和"hardware
“.
gfirmware = create_string_buffer(str.encode("firmware"), 100)
ghardware = create_string_buffer(str.encode("hardware"), 100)
firmware = str(gfirmware,'utf-8')
hardware = str(ghardware,'utf-8')
print('firmware var = ' + firmware)
print('hardware var = ' + hardware)
print("\n")
print('firmware type = ' + str(type(firmware)))
print('hardware type = ' + str(type(hardware)))
print('"firmware" type = ' + str(type("firmware")))
print('"hardware" type = ' + str(type("hardware")))
print("Is it true? " + str(firmware != "firmware" and hardware != "hardware"))
输出:
firmware var = firmware
hardware var = hardware
firmware type = <class 'str'>
hardware type = <class 'str'>
"firmware" type = <class 'str'>
"hardware" type = <class 'str'>
Is it true? True
从输出中可以看出,变量和字符串的值和类型相同。
那么为什么比较firmware != "firmware" and hardware != "hardware"
返回True
,它应该返回False
呢?
注意:
我有意使用create_string_buffer()
,因为我正在传递gfirmware
并ghardware
进入 C 函数。但是即使我没有将变量传递给 C 函数,也会出现这个问题。
我看过以下和其他帖子,但他们的问题是程序员is
在他们应该使用==
.
解决方案
您gfirmware
和ghardware
对象是大型字符缓冲区。当您将它们转换为字符串时,str(gfirmware,'utf-8')
您会得到大字符串:
>>> len(str(gfirmware, 'utf-8'))
100
因为你仍然有所有的填充。
您可以value
在转换为字符串之前在缓冲区上使用该属性:
>> firmware = str(gfirmware.value,'utf-8')
>> hardware = str(ghardware.value,'utf-8')
>> firmware != "firmware", hardware != "hardware"
(False, False)
推荐阅读
- android - 尝试使用 cordova 构建 APK 时出错 | :app:mergeReleaseResources 失败
- r - Mlogit 错误:solve.default(H, g[!fixed]) 中的错误:Lapack 例程 dgesv:系统完全是奇异的:U[6,6] = 0
- c# - 在 C# 中,在一个块中对对象执行操作并返回它所需的最少代码构造?标识符的长度不重要
- python - 使用 bash 粘合 python 和 c++
- regex - 有没有办法让我缩小正则表达式查询?
- linux - 广播数据包不通过 Linux veth 隧道传播
- android - 在 CI 构建中找不到 Gradle 任务 assembleRelease,适用于 Android Studio
- java - 如何在具有不同 Java 版本的 Wildfly 服务器上运行两个 Web 应用程序?
- ruby-on-rails - 从 has_many 表中获取记录?
- javascript - 在 ReactJs 中单击动态生成的“链接”时如何将值传递给页面?