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



这可能是一个伟大的pythonic异端,但我正在寻找复制下面代码行为的语法,而不在函数"sign"中使用返回和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

我不介意在函数中构造一个临时序列,只要它在返回时自动解压缩即可。 理想情况下,符号函数如下所示:

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