[英]What is the difference between print and return in a function?
我有这个功能:
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
结果只有一个链接:
如有必要,又怎么能退还两个?
将结果追加到列表中,然后返回该列表。
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
在第一个示例中,您正在print
结果。 在第二个中,您正在return
。 return
语句非常类似于break
,只是它也返回一个值。 因此,当您返回第一个值时,它会从函数中中断。
您可以将它们附加到列表中并返回它们,例如@ 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:
....
希望这可以帮助!
您的两个代码示例具有两种截然不同的行为:
print
在标准输出上显示某些内容,并允许for line
循环继续进行并打印其他匹配项,但是当执行落在sbo_extra_dwn
的末尾时返回None
return line
,从而终止整个sho_extra_dwn
函数。 这确实返回一个值,但仅找到第一个与条件匹配的值。 这里的其他答案是“给你一条鱼”,而不是向您显示您在捕鱼技术上所犯的错误。 您需要了解print
和return
之间的重要区别,然后进行修复。
比较这两个最小代码及其行为的不同之处:
def printer():
for c in 'user3634982':
print c
打印多少行? printer()
的返回值是多少?
def returner():
for c in 'user3634982':
return c
打印多少行? returner()
的返回值是多少?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.