标签:python equality python-internals comparison
比较python中的字符串时,例如
if "Hello" == "Hello":
#execute certain code
我很好奇比较字符串的代码是什么.因此,如果我在c中比较这些,我会比较每个角色,并在一个角色不匹配时中断.我想知道比较这样的两个字符串的过程是什么,即什么时候它会中断,如果这个比较和上面说的方法之间有什么区别,除了代码行的冗余
解决方法:
我假设你在这里使用CPython,标准的Python.org实现.在引擎盖下,Python字符串类型是用C实现的,所以是的,测试两个字符串是否相等就像你在C中完成一样.
它的作用是使用memcmp()
function测试两个str对象是否包含相同的数据,请参阅unicode_compare_eq
function defined in unicodeobject.c
:
static int
unicode_compare_eq(PyObject *str1, PyObject *str2)
{
int kind;
void *data1, *data2;
Py_ssize_t len;
int cmp;
len = PyUnicode_GET_LENGTH(str1);
if (PyUnicode_GET_LENGTH(str2) != len)
return 0;
kind = PyUnicode_KIND(str1);
if (PyUnicode_KIND(str2) != kind)
return 0;
data1 = PyUnicode_DATA(str1);
data2 = PyUnicode_DATA(str2);
cmp = memcmp(data1, data2, len * kind);
return (cmp == 0);
}
仅当str1和str2不是同一个对象时才调用此函数(这是一个简单且便宜的测试对象).它首先检查两个对象是否长度相同并存储相同类型的数据(字符串对象使用flexible storage implementation来节省内存;不同的存储意味着字符串不能相等).
还有其他Python实现,比如Jython或IronPython,它们可能使用不同的技术,但它基本上会归结为相同的东西.
标签:python,equality,python-internals,comparison 来源: https://codeday.me/bug/20191002/1845152.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。