Передача функционирует, которые имеют несколько возвращаемых значений как аргументы в Python

До сих пор я обнаружил, что эти команды для правильной работы должны быть в разных сценариях и выполняться в определенном порядке. Итак, вот как это работает:

"scripts": {
  "aaa": "set TMP=test && npm run bbb",
  "bbb": "echo %TMP%"
}

npm run aaa

вывод: test

Но этот не будет работать:

"scripts": {
  "aaa": "set TMP=test",
  "bbb": "npm run aaa && echo %TMP%"
}

npm run bbb

вывод: <just empty>

Похоже, что для поиска созданной переменной требуются две отдельные команды npm run: переменная должна быть создана в первый npm run и может быть найден во втором.

15
задан alain.janinm 30 April 2012 в 21:10
поделиться

3 ответа

printa(*cord())

* вот оператор расширения аргумента... хорошо я забываю то, чем это технически называют, но в этом контексте это берет список или кортеж и разворачивает его, таким образом, функция рассматривает каждый элемент списка/кортежа как отдельный аргумент.

Это - в основном реверс * Вы могли бы использовать для получения всех аргументов неключевого слова в функциональном определении:

def fn(*args):
    # args is now a tuple of the non-keyworded arguments
    print args

fn(1, 2, 3, 4, 5)

печать (1, 2, 3, 4, 5)

fn(*[1, 2, 3, 4, 5])

делает то же.

23
ответ дан 1 December 2019 в 01:46
поделиться

Попробуйте это:

>>> def cord():
...     return (1, 1)
...
>>> def printa(y, x):
...     print a[y][x]
...
>>> a=[[1,2],[3,4]]
>>> printa(*cord())
4

Звезда в основном говорит, "используют элементы этого набора как позиционные параметры". Можно сделать то же с dict для аргументов ключевого слова с помощью двух звезд:

>>> a = {'a' : 2, 'b' : 3}
>>> def foo(a, b):
...    print a, b
...
>>> foo(**a)
2 3
6
ответ дан 1 December 2019 в 01:46
поделиться

На самом деле Python действительно не возвращает несколько значений, он возвращает одно значение, которое может быть несколькими значениями, упакованными в кортеж. Что означает, что необходимо "распаковать" возвращенное значение, чтобы иметь кратные числа. Оператор как

x,y = cord()

делает это, но непосредственно использование возвращаемого значения, когда Вы выполнили

printa(cord())

не делает, вот почему необходимо использовать звездочку. Возможно, хороший термин для него мог бы быть "неявной распаковкой кортежа" или "распаковкой кортежа без присвоения".

4
ответ дан 1 December 2019 в 01:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: