相关疑难解决方法(0)

arr .__ len __()是获取Python数组长度的首选方法吗?

Python中,以下是获取元素数量的唯一方法吗?

arr.__len__()
Run Code Online (Sandbox Code Playgroud)

如果是这样,为什么奇怪的语法?

python arrays methods

709
推荐指数
7
解决办法
165万
查看次数

len()函数的成本

len()Python内置函数的功能成本是多少?(列表/元组/串/字典)

python algorithm collections complexity-theory

261
推荐指数
5
解决办法
7万
查看次数

在Python 3中描述len(set)与set .__ len __()的性能

在分析我的Python应用程序时,我发现len()使用集合时似乎非常昂贵.请参阅以下代码:

import cProfile

def lenA(s):
    for i in range(1000000):
        len(s);

def lenB(s):
    for i in range(1000000):
        s.__len__();

def main():
    s = set();
    lenA(s);
    lenB(s);

if __name__ == "__main__":
    cProfile.run("main()","stats");
Run Code Online (Sandbox Code Playgroud)

根据profiler的统计数据,lenA()似乎比lenB()以下慢14倍:

 ncalls  tottime  percall  cumtime  percall  filename:lineno(function)
      1    1.986    1.986    3.830    3.830  .../lentest.py:5(lenA)
1000000    1.845    0.000    1.845    0.000  {built-in method len}
      1    0.273    0.273    0.273    0.273  .../lentest.py:9(lenB)
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?目前我使用__len__()而不是len(),但代码看起来很脏:(

python performance profiling set

10
推荐指数
2
解决办法
2万
查看次数

C实现python的len函数的解释

当我遇到len函数的C实现时,我正在阅读有关python内置函数的实现的信息。

static PyObject *
builtin_len(PyObject *module, PyObject *obj)
/*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
{
Py_ssize_t res;

res = PyObject_Size(obj);
if (res < 0) {
    assert(PyErr_Occurred());
    return NULL;
}
return PyLong_FromSsize_t(res);
Run Code Online (Sandbox Code Playgroud)

我无法理解这段代码中发生了什么。我不知道C是如何工作的。有人可以解释这段代码在做什么吗?

我从https://github.com/python/cpython/blob/master/Python/bltinmodule.c获取了代码

编辑:我只是很好奇len函数是如此之快,在这段代码中绊倒了。我只想知道为什么使用函数PyObject_Size检查对象的大小为零,然后使用PyLong_FromSsize_t返回实际大小。

c python cpython python-internals

-7
推荐指数
1
解决办法
213
查看次数