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
这可能是一个伟大的 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