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
就行了。谢谢你,伙计!如果问题中添加了其他源代码,则我的答案不正确。如果问题中添加了其他源代码,则我的答案不正确。