python - get' none'在打印列表

时间:2016-09-13 00:46:41

标签: python return-value

新手在这里。有人可以向我解释为什么'没有'在此代码的末尾打印,但仅在函数内部调用?

背景: 我有一个变量(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?

4 个答案:

答案 0 :(得分:4)

Python中的每个函数都返回一些东西,默认返回值为None。所以

print(share_details(share_data))

调用share_detailsshare_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值。