Назовите эту конструкцию языка Python/рубина (использующий значения массива для удовлетворения параметров функции)

Существует другой способ делать это, с помощью *.sol, *csproj файлы.

  1. открываются, Ваш файл
  2. решения ищут *.csproj, который требуется изменить
  3. , это будет похоже на это (относительно *.sol файла):

    Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shani.Commands.Impl", "Shani.Commands.Impl\Shani.Commands.Impl.csproj", "{747CFA4B-FC83-419A-858E-5E2DE2B948EE}"

  4. и просто изменяют первую часть на новый diretory, например:

    Impl\Shani.Commands.Impl\Shani.Commands.Impl.csproj

  5. , конечно, не забывают перемещаться, целый проект к тому каталогу

Весело проводят время.

20
задан Nakilon 17 July 2013 в 15:32
поделиться

7 ответов

В документации Python это называется Распаковка списков аргументов . Это довольно удобная функция. В Python вы также можете использовать двойную звездочку (**) для распаковки словаря (хеша) в аргументы ключевого слова. Они также работают в обратном направлении. Я могу определить такую ​​функцию:

def sum(*args):
    result = 0
    for a in args:
        result += a
    return result

sum(1,2)
sum(9,5,7,8)
sum(1.7,2.3,8.9,3.4)

Чтобы упаковать все аргументы в список произвольного размера.

28
ответ дан 29 November 2019 в 23:14
поделиться

Типичная терминология для этого называется «применение функции к списку», или для краткости «подать заявку».

См. http://en.wikipedia.org/wiki/Apply

Он был в LISP практически с момента его создания в далеком 1960 году. Рад, что питон открыл это заново: -}

Apply обычно находится в списке или его представлении. как массив. Однако можно применять функции к аргументам, которые происходят из других частей, таких как структуры. Наш ПАРЛАНСКИЙ язык имеет фиксированные типы (int, float, string, ...) и структуры. Как ни странно, список аргументов функции очень похож на структуру определение, а в PARLANSE это определение структуры, и вы можете «применить» функцию PARLANSE к совместимой структуре. Вы также можете "создавать" экземпляры структуры, например:


 (define S
    (structure [t integer]
               [f float]
               [b (array boolean 1 3)]
    )structure
 )define s

  (= A (array boolean 1 3 ~f ~F ~f))

  (= s (make S -3 19.2 (make (array boolean 1 3) ~f ~t ~f))


  (define foo (function string S) ...)

  (foo +17 3e-2 A) ; standard function call

  (foo s) ; here's the "apply"

PARLANSE выглядит как лисп, но не является.

5
ответ дан 29 November 2019 в 23:14
поделиться

В рубине это часто называют «сплат».

Также в рубине вы можете использовать его для обозначения «всех других элементов в списке».

a, *rest = [1,2,3,4,5,6]
a     # => 1
rest  # => [2, 3, 4, 5, 6]

Это может также появляются по обе стороны от оператора присваивания:

a  = d, *e

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

10
ответ дан 29 November 2019 в 23:14
поделиться

В Haskell это тоже есть (для пар), с функцией uncurry :

ghci> let f x y = 2*x + y
f :: (Num a) => a -> a -> a
ghci> f 1 2
4
ghci> f 10 3
23
ghci> uncurry f (1,2)
4
ghci> uncurry f (10,3)
23

Вы также можете превратить ее в оператор, чтобы он был более похож на splat:

ghci> f `uncurry` (1,2)
4
ghci> let (***) = uncurry
(***) :: (a -> b -> c) -> (a, b) -> c
ghci> f *** (10,3)
23

И хотя было бы легко определить аналогичные функции для случаев с тремя, четырьмя кортежами и т. Д., Для n наборов общей функции нет (например, splat работает на других языках ) из-за строгой типизации Haskell.

2
ответ дан 29 November 2019 в 23:14
поделиться

Руби называет это splat , хотя Дэвид Блэк также придумал изящный унарный {, ra} y-оператор (то есть унарный оператор unarray )

3
ответ дан 29 November 2019 в 23:14
поделиться

Я называл это «расширением списка», но я не думаю, что это стандартная терминология (я не думаю, что есть ...). Lisp во всех версиях (включая Scheme), а также Haskell и другие функциональные языки могут сделать это достаточно легко, но я не думаю, что это легко сделать на «основных» языках (может быть, вы можете сделать это как «рефлексию» в некоторых! -).

2
ответ дан 29 November 2019 в 23:14
поделиться

На большинство вопросов уже даны ответы, но что касается вопроса «Как называется оператор *?», Технический термин - «звездочка» (происходит от латинского слова asteriscum , что означает «маленькая звездочка», что, в свою очередь, происходит от греческого ἀστερίσκος ). Однако часто его называют «звездой» или, как указано выше, «сплатом».

1
ответ дан 29 November 2019 в 23:14
поделиться
Другие вопросы по тегам:

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