Dynamical output in Python Functions
当我们使用def时,可以使用**kwargs和*args来定义函数的动态输入。
是否有类似的返回元组,我一直在寻找这样的行为:
1 2 3 4 5 6 7 8 | def foo(data): return 2,1 a,b=foo(5) a=2 b=1 a=foo(5) a=2 |
但是,如果我只声明一个要解包的值,它会将整个元组发送到那里:
1 2 | a=foo(5) a=(2,1) |
我可以使用"if"语句,但我想知道是否有一些不那么麻烦的东西。我也可以使用一些hold变量来存储这个值,但是我的返回值可能很大,只需要一些占位符就可以了。
谢谢
如果需要完全归纳返回值,可以这样做:
1 2 3 4 5 6 7 8 9 10 11 12 | def function_that_could_return_anything(data): # do stuff return_args = ['list', 'of', 'return', 'values'] return_kwargs = {'dict': 0, 'of': 1, 'return': 2, 'values': 3} return return_args, return_kwargs a, b = function_that_could_return_anything(...) for thing in a: # do stuff for item in b.items(): # do stuff |
在我看来,返回字典,然后使用
1 2 3 4 | dict_return_value = foo() a = dict_return_value.get('key containing a', None) if a: # do stuff with a |
我不太明白你到底在问什么,所以我猜几下。
如果有时要使用单个值,请考虑一个
1 2 3 4 5 6 7 8 9 10 11 12 | from collections import namedtuple AAndB = namedtuple('AAndB', 'a b') def foo(data): return AAndB(2,1) # Unpacking all items. a,b=foo(5) # Using a single value. foo(5).a |
或者,如果您使用的是python 3.x,那么可以使用扩展的iterable解包来轻松解包以下一些值:
1 2 3 4 5 6 | def foo(data): return 3,2,1 a, *remainder = foo(5) # a==3, remainder==[2,1] a, *remainder, c = foo(5) # a==3, remainder==[2], c==1 a, b, c, *remainder = foo(5) # a==3, b==2, c==1, remainder==[] |
有时名称
1 | a, *_ = foo(5) |