【发布时间】:2019-04-03 15:35:29
【问题描述】:
实现for_each 函数的正确方法是什么,以便它可以接受任意数量的参数或列表或元组作为参数?
def do_something(arg):
print("done", arg)
def for_each(func, *args):
if len(args) == 1: # How to do this, since this gives an
args = args[0] # error if there's only one parameter besides func?
for arg in args:
func(arg)
for_each(do_something, 1, 2)
for_each(do_something, ['foo', 'bar'])
for_each(do_something, (3, 4, 5))
输出:
done 1 done 2 done foo done bar done 3 done 4 done 5
实现这一目标的正确方法是什么?因为如果这样调用它会中断:
for_each(do_something, 1)
Traceback (most recent call last): File "main.py", line 12, in <module> for_each(do_something, 1) File "main.py", line 8, in for_each for arg in args: TypeError: 'int' object is not iterable
【问题讨论】:
-
您是否尝试使用 map?,我不明白 args 是一个列表有什么问题,或者使用列表理解或映射,您可以执行 def for_each(func, args): return [ func(arg) 用于 args 中的 arg
-
@E.Serra 我只是希望我的函数的用户能够使用它来传递列表或单独传递参数。这只是一个非常简化的示例。
-
@ruohola 我的函数的第一个版本应该适合你,只需检查它是否是来自
collections.abc.Iterable的可迭代对象 :)
标签: python python-3.x function arguments