Pat*_*ick 3 python return-value
这里是新手。有人可以向我解释为什么在这段代码的末尾打印“none”,但仅在函数内部调用时才打印吗?
背景:我有一个变量(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']]
Run Code Online (Sandbox Code Playgroud)
我有兴趣打印最后 5 行。
如果我在主程序中使用它:
for row in share_data[-5:]:
print(row)
Run Code Online (Sandbox Code Playgroud)
我得到正确的数据:
['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']
Run Code Online (Sandbox Code Playgroud)
...但是当我创建一个函数来执行此操作时:
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
Run Code Online (Sandbox Code Playgroud)
并这样调用该函数:
print(share_details(share_data))
Run Code Online (Sandbox Code Playgroud)
...我得到的是这个(注意最后的“无”):
['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
Run Code Online (Sandbox Code Playgroud)
我认为是函数末尾的“return”语句触发了它,但不知道如何/为什么。
编辑 - 现在很清楚我的错误是什么(即在函数内部打印,然后在外部打印返回值)我可以跟进一个额外的问题吗? 将所有打印委托给一个函数是个好习惯吗?为了额外的可读性,可能调用了一个函数:
print_share_details(share_data)
Run Code Online (Sandbox Code Playgroud)
或者有更好的方法,更具可读性/Pythonic?
Python 中的每个函数都会返回一些内容,默认返回值为 None。所以
print(share_details(share_data))
Run Code Online (Sandbox Code Playgroud)
调用share_details,share_details打印 的最后 5 行share_data,share_details返回None(默认情况下),然后print打印该返回值。