当蟒蛇比较字符串如当你比较蟒蛇两个字符串会发生什么
如果“你好” ==“你好”: #execute某些代码
我很好奇的代码是什么,比较字符串。所以,如果我在c中比较这些字符,我会比较每个字符,并在一个字符不匹配时中断。我想知道这个过程是比较两个字符串这样的到底是什么,即什么时候会打破,如果上面有比行代码冗余,对方称这种比较和方法之间有什么区别
当蟒蛇比较字符串如当你比较蟒蛇两个字符串会发生什么
如果“你好” ==“你好”: #execute某些代码
我很好奇的代码是什么,比较字符串。所以,如果我在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,它们可能会使用不同的技术,但它基本上可以归结为几乎相同的东西。
啊我现在明白了。很好的解释! – anekix
只是一个简单的问题,你记得这些事情或参考某处的这种信息? – anekix
@anekix:我经常围绕CPython的实现来记住去哪里看。 //文档:要了解Python的内部工作,可以在[C-API(https://docs.python.org/3/c-api/)(包括[附带教程](HTTPS读了。 python.org/3/extending/index.html))或仅通过[源代码]浏览(https://github.com/python/cpython)。 –