打印并返回一个函数

时间:2018-04-23 20:09:03

标签: python python-3.x

我的功能就像这样:

def get_list_of_movies(table):

    #some code here

    print(a_list)
    return a_list

我想使用print和return的原因是我在很多地方使用这个功能。所以从菜单调用此功能后,我想获得打印的内容列表。

我在另一个函数中使用的这个函数 - 只是为了得到列表。问题是 - 当我调用此函数时,它也会打印列表。

问题:如何防止函数在另一个函数中用于获取列表时执行打印行?

这是练习的一部分,所以我无法定义更多的功能/拆分这个或者洙 - 我只限于这个功能。

编辑:谢谢你的回答!我只是初学者,但你向我展示了我从未想过的python(一般编程)的方法!使用第二个参数(boolin)非常敏捷。我在这里学到了很多东西!

2 个答案:

答案 0 :(得分:3)

添加一个默认值为None的单独参数来控制打印。通

def get_list_of_movies(table, printIt=False):
    ...
    if printIt:
        print(a_list)
    return a_list

...

movies = get_list_of_movies(table, printIt=True)

另一种方法是将print本身作为参数传递,其中默认值为no-op:

def get_list_of_movies(table, printer=lambda *args: None):
    ...
    printer(a_list)
    return a_list

...

movies = get_list_of_movies(table, printer=print)

这打开了能够自定义打印结果的大门;你正在有效地添加一个对返回值执行的任意回调,这也可以通过自定义传递函数来处理:

def print_it_first(x):
    print(x)
    return x

movies = print_it_first(get_list_of_movies(table))

这不需要get_list_of_movies本身的任何特殊处理,因此从设计的角度来看可能更好。

答案 1 :(得分:1)

一种完全不同的方法是始终打印列表,但控制它打印到的位置:

def get_list_of_movies(table, print_to=os.devnull):
    ...
    print(a_list, file=location)
    return a_list

 movies = get_list_of_movies(table, print_to=sys.stdout)

print_to参数可以是任何类文件对象,默认情况下确保不会在任何地方写入输出。