新手在这里。有人可以向我解释为什么'没有'在此代码的末尾打印,但仅在函数内部调用?
背景: 我有一个变量(share_data),其中包含一些列表:
share_data =
[['Date', 'Ticker', 'Company', 'Mkt Cap', 'VM Rank', 'Value Rank', 'Momentum Rank'],
['2016-08-27', 'BEZ', 'Beazley', '2,063', '89', '72', '76'],
['2016-08-30', 'BEZ', 'Beazley', '2,063', '89', '72', '76'],
['2016-08-31', 'BEZ', 'Beazley', '2,050', '89', '72', '75'],
['2016-09-01', 'BEZ', 'Beazley', '2,039', '96', '73', '93'],
['2016-09-02', 'BEZ', 'Beazley', '2,069', '90', '72', '77'],
['2016-09-03', 'BEZ', 'Beazley', '2,120', '96', '70', '94'],
['2016-09-06', 'BEZ', 'Beazley', '2,106', '90', '71', '77'],
['2016-09-07', 'BEZ', 'Beazley', '2,085', '89', '71', '76'],
['2016-09-08', 'BEZ', 'Beazley', '2,091', '89', '72', '77'],
['2016-09-09', 'BEZ', 'Beazley', '2,114', '89', '71', '77'],
['2016-09-10', 'BEZ', 'Beazley', '2,084', '94', '71', '89'],
['2016-09-12', 'BEZ', 'Beazley', '2,084', '94', '71', '89']]
我有兴趣打印最后5行。
如果我在 main 程序中使用它:
for row in share_data[-5:]:
print(row)
我得到了正确的数据:
['2016-09-07', 'BEZ', 'Beazley', '2,085', '89', '71', '76']
['2016-09-08', 'BEZ', 'Beazley', '2,091', '89', '72', '77']
['2016-09-09', 'BEZ', 'Beazley', '2,114', '89', '71', '77']
['2016-09-10', 'BEZ', 'Beazley', '2,084', '94', '71', '89']
['2016-09-12', 'BEZ', 'Beazley', '2,084', '94', '71', '89']
...但是当我创建一个函数来执行此操作时:
def share_details(share_data, n=5):
''' Prints the last n rows of a share's records'''
for row in share_data[-n:]:
print(row)
return
以这种方式调用函数:
print(share_details(share_data))
...我得到的就是这个(请注意最后的'无结果):
['2016-09-07', 'BEZ', 'Beazley', '2,085', '89', '71', '76']
['2016-09-08', 'BEZ', 'Beazley', '2,091', '89', '72', '77']
['2016-09-09', 'BEZ', 'Beazley', '2,114', '89', '71', '77']
['2016-09-10', 'BEZ', 'Beazley', '2,084', '94', '71', '89']
['2016-09-12', 'BEZ', 'Beazley', '2,084', '94', '71', '89']
None
我认为这是'返回'在触发它的函数结束时的声明,但不知道如何/为什么。
编辑 - 现在它清楚我的错误是什么(即在函数中打印,然后在外面返回值)我可以跟进还有问题吗? 将所有打印委托给一个函数是不错的做法?可能是一个名为的函数,为了额外的可读性:
print_share_details(share_data)
或者有更好的方式更具可读性/ pythonic?
答案 0 :(得分:4)
Python中的每个函数都返回一些东西,默认返回值为None。所以
print(share_details(share_data))
调用share_details
,share_details
打印share_data
的最后5行,share_details
返回None
(默认情况下),然后print
打印返回值。
答案 1 :(得分:2)
print(share_details(share_data))
将打印该方法调用的返回值。在您的方法中,您只需return
,它将返回None
。只需做:
return
将返回None
,这相当于没有返回,因为None
是由没有return
的方法返回的。
您需要确定要作为对方法调用的响应返回的内容。如果您不想返回任何内容,只需在方法中进行打印,那么您无需实际明确调用return
,也无需print
方法调用。
所以,而不是这样做:
print(share_details(share_data))
只需在没有印刷品的情况下调用它:
share_details(share_data)
并删除方法结束时的返回值,因此您将拥有:
def share_details(share_data, n=5):
''' Prints the last n rows of a share's records'''
for row in share_data[-n:]:
print(row)
答案 2 :(得分:1)
当您编写print(share_details(share_data))
时 - 表示打印share_details
函数返回的值。打印值后,该函数返回None
。
如果函数没有返回任何需要打印的内容,最好省略print
并调用函数,如:
share_details(share_data)
答案 3 :(得分:1)
只需删除外部的print语句。它是无用的,并且从空的return语句中打印None值。