Можно ли вызвать однопараметрическую функцию Python без использования скобок? - PullRequest
5 голосов
/ 29 мая 2010

В документации Python указано, что допустимо опускать скобки, если функция принимает только один параметр, но

    myfunction "Hello!"

генерирует синтаксическую ошибку. Так в чем же дело?

(я использую Python 3.1)

EDIT:

Утверждение, которое я читаю, относится только к выражениям генератора :

    The parentheses can be omitted on calls with only one argument.

Ответы [ 4 ]

6 голосов
/ 29 мая 2010

Для редактирования:

Если вы запишите выражение генератора, например stuff = (f(x) for x in items), вам понадобятся скобки, точно так же, как вам нужно [ .. ] для понимания списка.

Но когда вы передаете что-то из выражения генератора в функцию (что является довольно распространенным шаблоном, потому что это большая идея генераторов), вам не нужны два набора скобок - вместо чего-то вроде s = sum((f(x) for x in items)) (внешние скобки для обозначения вызова функции, внутренние для выражения генератора) вы можете просто написать sum(f(x) for x in items)

4 голосов
/ 29 мая 2010

Вы можете сделать это с помощью iPython - опция командной строки -autocall управляет этой функцией (используйте -autocall 0, чтобы отключить эту функцию, -autocall 1, по умолчанию, чтобы она работала только при аргумент присутствует, и -autocall 2 чтобы он работал даже для вызываемых без аргументов вызовов).

2 голосов
/ 29 мая 2010

Без скобок это были бы не functions, а statements или keywords (встроенный язык).

Этот поток StackOverflow (с некоторыми очень хорошими ответами) содержит указание на то, как можно создавать свои собственные на чистом Python (с помощью продвинутых хакерских программ, и не очень хорошая идея 99,99% случаев).

0 голосов
/ 29 мая 2010

Как я понимаю, правило касается только выражений генератора ... так, например: sum (x 2 для x в диапазоне (10)), но вам все равно придется написать: уменьшить (operator.add, (x 2 для x в диапазоне (10))).

Это не относится к общим функциям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...