Подтвердить что ты не робот

Должен ли оператор возврата иметь круглые скобки?

Предположим, что в Python 3.x(и я думаю, что в Python 2.6 и в Python 2.7 тоже) следующие функции:

>>> def dbl_a(p): return p*2
>>> def dbl_b(p): return(p*2)
>>> def dbl_c(p): return (p*2)

Если мы запустим их, получим:

>>> dbl_a(42)
84
>>> dbl_b(42)
84
>>> dbl_c(42)
84

Три функции предоставляют одинаковый результат (значение и тип), и они кажутся эквивалентными.

Но какой из них имеет более правильное выражение return?

Есть ли какой-либо побочный эффект в любом из этих определений?

Те же самые вопросы относятся к следующей ситуации с несколькими возвращаемыми значениями:

>>> def dbl_triple_a(p): return p*2, p*3
>>> def dbl_triple_b(p): return(p*2, p*3)
>>> def dbl_triple_c(p): return (p*2, p*3)

>>> dbl_triple_a(42)
(84, 126)
>>> dbl_triple_b(42)
(84, 126)
>>> dbl_triple_c(42)
(84, 126)

В этом случае каждая функция возвращает кортеж, но мои вопросы остаются неизменными.

4b9b3361

Ответ 1

В скобках () в Python обычно используется 4 типа.

  • Он действует так же, как и большинство других основных языков - это конструкция, которая вынуждает приоритет оценки, например, в математической формуле. Это также означает, что он используется только тогда, когда это необходимо, например, когда вам нужно убедиться, что добавления и вычитания происходят раньше, чем умножения и деления.
  • Это конструкция для группировки неизменяемых значений вместе в том же духе, что и аналогичная запись в математике. Мы называем это кортежем в Python. Tuple также является базовым типом. Это конструкция, которая создает пустой кортеж и увеличивает приоритет оператора.
  • Он используется для группировки импортированных имен в операторах импорта, поэтому вам не нужно использовать разделитель нескольких строк \. Это в основном стилистика.
  • В длинных утверждениях вроде

    decision = (is_female and under_30 and single
                or
                is_male and above_35 and single)

скобка является альтернативным синтаксисом, чтобы избежать попадания предела 80 столбцов и использовать \ для продолжения оператора.

В любых других случаях, например, внутри предикатов if, while, for и оператора return я бы настоятельно рекомендовал не использовать (), если это не необходимо или облегчить читаемость (определяется 4 пункты выше). Один из способов получить эту точку в том, что в математике (1) и просто 1 означает точно то же самое. То же самое верно в Python.

Люди, идущие из языков C-семейства, немного привыкнут к этому, потому что () требуются в предикатах потока управления на этих языках по историческим причинам.

Последнее слово для операторов return, если вы только возвращаете 1 значение, опустите (). Но если вы возвращаете несколько значений, используйте OK (), потому что теперь вы возвращаете группировку, а () обеспечивает визуальную визуализацию. Однако этот последний момент стилистичен и подчинен предпочтению. Помните, что ключевые слова return возвращают результат оператора . Поэтому, если вы используете только , в своих операторах множественного присваивания и конструкциях кортежей, опустите (), но если вы используете () для распаковки значений и конструкций кортежей, используйте (), когда вы возвращаете несколько значений в return. Держите его согласованным.

Ответ 2

return value - это "правильный" способ - return - это языковая конструкция, а не функция.

Если вы хотите вернуть кортеж, используйте return your, values, here

Нет необходимости в каких-либо скобках (кортежи создаются оператором , ", а не ())

Ответ 3

В общем случае соглашение будет заключаться в том, чтобы не использовать скобки в операторе return, поскольку это не функция. В этом случае анализатор просто будет полностью игнорировать скобки.

Кортежи обычно выражаются скобками для повышения удобочитаемости, однако они не требуются.

В конечном счете, однако, все они идентичны, и все зависит от предпочтений.

Ответ 4

7.6. Оператор return

return_stmt ::=  "return" [expression_list]

expression_list

return может возникать только синтаксически вложенным в определение функции, а не в определении вложенного класса.

Если список выражений присутствует, он вычисляется, иначе заменяется None.

возвращает текущий вызов функции с листом выражения (или None) в качестве возвращаемого значения.

Когда return передает управление из инструкции try с предложением finally, это предложение finally выполняется до того, как он действительно покинет функцию.

В функции генератора оператор return указывает на то, что генератор выполнен и вызовет повышение StopIteration. Возвращаемое значение (если оно есть) используется как аргумент для построения StopIteration и становится атрибутом StopIteration.value.

В асинхронной генераторной функции пустой оператор return указывает, что асинхронный генератор выполнен и вызовет возведение StopAsyncIteration. Непустой оператор return является синтаксической ошибкой в ​​функции асинхронного генератора.

Таким образом, в основном return - это оператор с необязательным списком выражений в качестве аргумента. Поэтому скобки не требуются и только предпочтительны, когда это необходимо (т.е. Для прерывателей).

Ответ 5

В (почти) любом случае, если есть сомнения, используйте скобки!

Увидев, как все они делают то же самое, я думаю, что это вопрос личных предпочтений. Я бы выбрал последний.

Но опять же, я не знаком с python.