函数返回整型或整型列表.将第一个变量赋值给一个变量



假设我们有

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]

另一个函数调用的额外开销可能使这种方法不受欢迎。

最新更新