我的功能就像这样:
def get_list_of_movies(table):
#some code here
print(a_list)
return a_list
我想使用print和return的原因是我在很多地方使用这个功能。所以从菜单调用此功能后,我想获得打印的内容列表。
我在另一个函数中使用的这个函数 - 只是为了得到列表。问题是 - 当我调用此函数时,它也会打印列表。
问题:如何防止函数在另一个函数中用于获取列表时执行打印行?
这是练习的一部分,所以我无法定义更多的功能/拆分这个或者洙 - 我只限于这个功能。
编辑:谢谢你的回答!我只是初学者,但你向我展示了我从未想过的python(一般编程)的方法!使用第二个参数(boolin)非常敏捷。我在这里学到了很多东西!
答案 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
参数可以是任何类文件对象,默认情况下确保不会在任何地方写入输出。