2017-04-18 73 views
0

当蟒蛇比较字符串如当你比较蟒蛇两个字符串会发生什么

如果“你好” ==“你好”: #execute某些代码

我很好奇的代码是什么,比较字符串。所以,如果我在c中比较这些字符,我会比较每个字符,并在一个字符不匹配时中断。我想知道这个过程是比较两个字符串这样的到底是什么,即什么时候会打破,如果上面有比行代码冗余,对方称这种比较和方法之间有什么区别

回答

5

我要去假设您在这里使用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); 
} 

此功能仅称为如果str1str2是不是同一个对象(这是测试一个简单和廉价的东西)。它首先检查如果两个对象具有相同的长度和存储相同类型的数据(字符串对象使用flexible storage implementation保存存储器;不同的存储装置中的字符串可以是不相等的)。

还有其他Python实现,比如Jython或IronPython,它们可能会使用不同的技术,但它基本上可以归结为几乎相同的东西。

+0

啊我现在明白了。很好的解释! – anekix

+0

只是一个简单的问题,你记得这些事情或参考某处的这种信息? – anekix

+1

@anekix:我经常围绕CPython的实现来记住去哪里看。 //文档:要了解Python的内部工作,可以在[C-API(https://docs.python.org/3/c-api/)(包括[附带教程](HTTPS读了。 python.org/3/extending/index.html))或仅通过[源代码]浏览(https://github.com/python/cpython)。 –