假设我们有
def f_1():
return (3, 4)
def f_2():
return 2
给出了函数。这不是我可以修改的代码。我们知道它们要么返回整数,要么返回整数的序列。
我想将返回值赋值给一个变量,如果返回值是整数序列,则变量应该只接受第一个整数。
在Python中有一个内置的语法设备允许我这样做吗?
for function in [f_1, f_2]:
...
x = function()[0] # Works for f_1, breaks for f_2
y = function() # Works for f_2, assigns (3, 4) for f_1 while
# we really would like only the 3 to be the
# assigned value
注意:假设我们不知道哪些函数返回序列,哪些函数返回数字。
是否有一个内置的语法设备
。通常的做法是请求原谅:
x = function()
try:
x = x[0]
except TypeError:
pass
我不会选择try-except语句。对我来说,这太过分了。
我更有可能尝试这样做:
result = function()
# this can be changed to abc.Sequence for more general approach
if isinstance(result, (list, tuple)):
result = result[0]
在另一个方向,将f_2
包装在另一个函数中,以确保在循环中调用的函数总是返回一个序列。
for function in [f_1, lambda : (f_2(),)]:
x = function()[0]
另一个函数调用的额外开销可能使这种方法不受欢迎。