Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从方法内部访问列表的长度_Python_List - Fatal编程技术网

Python 从方法内部访问列表的长度

Python 从方法内部访问列表的长度,python,list,Python,List,我对这个有点困惑。在我的一个脚本中,我有以下方法 ALIVES = [] def insert_in_alives(num): ALIVES.append(num) print len(ALIVES), "alives found." 这里ALIVES只是在方法之外声明的一个列表。但是每当调用update\u alives方法时,无论alives的实际长度是多少,它都会打印以下内容 >>>1 alives found. 有人能告诉我为什么会这样吗 更新:

我对这个有点困惑。在我的一个脚本中,我有以下方法

ALIVES = []


def insert_in_alives(num):
    ALIVES.append(num)
    print len(ALIVES), "alives found."
这里ALIVES只是在方法之外声明的一个列表。但是每当调用
update\u alives
方法时,无论
alives
的实际长度是多少,它都会打印以下内容

>>>1 alives found.
有人能告诉我为什么会这样吗

更新:

在外壳中试用,效果良好:

In [2]: a = [1,2,3]

In [3]: print len(a)
3
In [4]: def test(num):
   ...:     a.append(num)
   ...:     print len(a)
   ...:     

In [5]: test(5)
4

In [6]: test(7)
5
代码很好

ALIVES=[]
def更新有效期(num):
ALIVES.append(num)
活页
打印len(ALIVES),“找到ALIVES。”
更新生命(3)
更新生命(5)
更新生命(6)
如果我这样做,我会在列表中添加一个3,这将导致其中的一个元素

如果我不止一次这样做,您会将其追加到列表中,并增加它

输出:

[3]
1 alives found.
[3, 5]
2 alives found.
[3, 5, 6]
3 alives found.
代码很好

ALIVES=[]
def更新有效期(num):
ALIVES.append(num)
活页
打印len(ALIVES),“找到ALIVES。”
更新生命(3)
更新生命(5)
更新生命(6)
如果我这样做,我会在列表中添加一个3,这将导致其中的一个元素

如果我不止一次这样做,您会将其追加到列表中,并增加它

输出:

[3]
1 alives found.
[3, 5]
2 alives found.
[3, 5, 6]
3 alives found.
有两件事是错误的:

  • 如果请求的URL返回空响应,则
    \u get\u data
    函数将返回空字符串。因此,您的
    proxy\u alive()
    函数也不会调用
    insert\u in\u alives()

    proxy\u alive()
    改为测试
    None

    def proxy_alive(proxy):
        test = _get_data('http://m.naukri.com', proxy=proxy, silent=True)
        if test is not None:
            insert_in_alives(proxy)
    
  • 您正在检查线程中的代理,每个线程同时调用
    insert\u in\u alives()
    。这导致了座圈状况,插入件正在相互更换

    您需要在那里添加一个线程锁

    • 有两件事不对:

      • 如果请求的URL返回空响应,则
        \u get\u data
        函数将返回空字符串。因此,您的
        proxy\u alive()
        函数也不会调用
        insert\u in\u alives()

        proxy\u alive()
        改为测试
        None

        def proxy_alive(proxy):
            test = _get_data('http://m.naukri.com', proxy=proxy, silent=True)
            if test is not None:
                insert_in_alives(proxy)
        
      • 您正在检查线程中的代理,每个线程同时调用
        insert\u in\u alives()
        。这导致了座圈状况,插入件正在相互更换

        您需要在那里添加一个线程锁



      你确定吗?您的代码片段没有问题会导致您描述的情况。我认为您需要向我们展示更多代码。您的示例代码将在您第二次调用它时打印
      2个找到的活页。
      。是的,我在shell中尝试过,效果很好(请参见更新),但在脚本中没有,为什么会这样?@MartijnPieters,嘿,我在上次更新中添加了脚本的链接。谢谢。@Amyth:现在看看;最好在你的问题中添加代码。你确定吗?您的代码片段没有问题会导致您描述的情况。我认为您需要向我们展示更多代码。您的示例代码将在您第二次调用它时打印
      2个找到的活页。
      。是的,我在shell中尝试过,效果很好(请参见更新),但在脚本中没有,为什么会这样?@MartijnPieters,嘿,我在上次更新中添加了脚本的链接。谢谢。@Amyth:现在看看;不过,最好在你的问题中添加代码。虽然尝试了,但长度仍然返回1,我在
      insert\u in\u ALIVES()
      方法中添加了
      print(len(ALIVES))
      ,结果是>>发现100个代理删除了78个副本。。正在检查(22)个代理,请稍候。。。1 1 1 1 1 1@Amyth:您共享的代码中没有任何内容会重置列表。这里少了一些东西。@Amyth:啊,少了,你正在使用线程。你有一个竞争条件。啊,该死,真的,只要我把多重处理设置为
      False
      就行了。谢谢你,伙计!尝试过,但它仍然返回1作为长度,我在
      insert\u in\u ALIVES()
      方法中添加了
      print(len(ALIVES))
      ,结果是>>发现100个代理删除了78个副本。。正在检查(22)个代理,请稍候。。。1 1 1 1 1 1@Amyth:您共享的代码中没有任何内容会重置列表。这里少了一些东西。@Amyth:啊,少了,你正在使用线程。你有一个竞争条件。啊,该死,真的,只要我把多重处理设置为
      False
      就行了。谢谢你,伙计!如果问题中添加了其他源代码,则我的答案不正确。如果问题中添加了其他源代码,则我的答案不正确。