Синтаксис Python для возврата как одного неупакованного значения, так и нескольких упакованных значений из последовательности - PullRequest
0 голосов
/ 07 июня 2018

это может быть большой питонической ересью, но я ищу синтаксис, который повторяет поведение кода ниже, без использования и return, и предложения yield в функции "sign" ( edit этот синтаксис на самом деле не производит следующие выходные данные.Вот пример того, как он должен себя вести:

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

Я не против создать временную последовательность внутри функции, если она автоматически распаковывается при возврате.В идеале функция sign должна выглядеть примерно так:

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____________>

1 Ответ

0 голосов
/ 07 июня 2018
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
...