我有这个功能:
def sbo_extra_dwn(link, name):
sbo_url_dwn = link + name + ".info"
sbo_url_dwn = sbo_url_dwn.replace("repository", "slackbuilds")
f = urllib2.urlopen(sbo_url_dwn)
read_page = f.read()
for line in read_page.splitlines():
if line.startswith(' '):
line = line[10:-1]
if line.startswith('http'):
print line
这会打印两个链接:http://downloads.sourceforge.net/project/unvanquished/Assets/unvanquished_0.26.0.pk3 http://sourceforge.net/projects/unvanquished/files/Assets/unvanquished_0.25.0.pk3
但如果退回一行,请不要使用2个链接.....这样:
def sbo_extra_dwn(link, name):
sbo_url_dwn = link + name + ".info"
sbo_url_dwn = sbo_url_dwn.replace("repository", "slackbuilds")
f = urllib2.urlopen(sbo_url_dwn)
read_page = f.read()
for line in read_page.splitlines():
if line.startswith(' '):
line = line[10:-1]
if line.startswith('http'):
return line
结果只有一个链接:
如果有必要,如何再回来两次?
答案 0 :(得分:1)
将结果附加到列表中,然后返回该列表。
def sbo_extra_dwn(link, name):
results = []
sbo_url_dwn = link + name + ".info"
sbo_url_dwn = sbo_url_dwn.replace("repository", "slackbuilds")
f = urllib2.urlopen(sbo_url_dwn)
read_page = f.read()
for line in read_page.splitlines():
if line.startswith(' '):
line = line[10:-1]
if line.startswith('http'):
results.append(line)
return results
但是,您可能希望返回一个元组,因为它们具有不变性(由@Moe建议):
def sbo_extra_dwn(link, name):
results = ()
sbo_url_dwn = link + name + ".info"
sbo_url_dwn = sbo_url_dwn.replace("repository", "slackbuilds")
f = urllib2.urlopen(sbo_url_dwn)
read_page = f.read()
for line in read_page.splitlines():
if line.startswith(' '):
line = line[10:-1]
if line.startswith('http'):
results = results+(line,)
return results
在您的1 st 示例中,您print
了结果。在2 nd 中,你是return
。 return
语句非常类似于break
,只是它返回一个值。因此,当您返回第一个值时,它会从函数中断。
答案 1 :(得分:1)
您可以将它们附加到列表中并返回它们,例如@ aj8uppal的答案。您还可以使用yield
关键字。
def sbo_extra_dwn(link, name):
sbo_url_dwn = link + name + ".info"
sbo_url_dwn = sbo_url_dwn.replace("repository", "slackbuilds")
f = urllib2.urlopen(sbo_url_dwn)
read_page = f.read()
for line in read_page.splitlines():
if line.startswith(' '):
line = line[10:-1]
if line.startswith('http'):
yield line
然后,您可以像这样使用它:
lines = sbo_extra_dwn(my_link, my_name)
for l in lines:
....
希望这有帮助!
答案 2 :(得分:-1)
您的两个代码示例有两种截然不同的行为:
print
在标准输出上显示某些内容并允许for line
循环继续并打印其他匹配但在执行从None
<结束时返回sbo_extra_dwn
< / LI>
return line
,从而终止整个sho_extra_dwn
函数。 确实会返回一个值,但只会找到符合条件的第一个值。这里的其他答案&#34;给了你一条鱼&#34;而不是向你展示你在捕鱼技术中犯的错误。您需要了解print
和return
之间的重要区别,然后修复才有意义。
比较这两位最小代码以及它们的行为如何不同:
def printer():
for c in 'user3634982':
print c
打印多少行? printer()
的返回值是什么?
def returner():
for c in 'user3634982':
return c
打印多少行? returner()
的返回值是什么?