Python 用于从序列返回单个解压缩值或多个压缩值的语法

Python syntax for returning both a single unpacked value or multiple packed values from a sequence

这可能是一个伟大的 pythonic 异端,但我正在寻找复制下面代码行为的语法,而不是在函数 "sign" 中同时使用 return 和 yield 子句(编辑 该语法实际上不会产生以下输出)。

def sign_inner(num):
    return 1 if num>0 else -1 if num<0  else 0

def sign(*nums):
    if len(nums)==1:
        return sign_inner(nums[0])
    for num in nums:
        yield sign_inner(num)

想法是在给定单个输入时输出一个不可迭代对象,在给定多个输入时输出一个可迭代对象。 这是它应该如何表现的一个例子:

a = sign(3)
a
>>> 1
a, b = sign(3, -5)
a
>>> 1
b
>>> -1

我不介意在函数内部构造一个临时序列,只要它在 returned 时自动解包即可。 理想情况下,符号函数看起来像这样:

def sign(*nums):
    for num in nums:
        yield sign_inner(num)

但是 yield 创建了一个生成器对象,在单个输入的情况下必须添加一个逗号或括号来解包它:

a, = sign(3)
a
>>> 1

而没有逗号:

a = sign(3)
a
>>> <generator object sign at 0x____________>
def sign_inner(num):
    return 1 if num>0 else -1 if num<0  else 0

def sign(*nums):
    results = []
    for num in nums:
        results.append(sign_inner(num))
    return results[0] if len(results)==1 else results 

A = sign(5,1,-5)
B = sign(5)
a, b, c = sign(5,1,-5)

print(A)
print(B)
print (a)
print (a,b,c)

输出:

>> [1,1,-1]
>> 1
>> 1
>> 1  1  -1