python для эффективного использования результата функции в операторе if

1

Есть ли другая форма кода, что можно использовать функцию в выражении if и получить значение функции без выполнения функции дважды?

Например,

Существует функция fun1(arg), которая занимает час, чтобы вернуть свой результат (значение результата может быть либо None либо некоторым int)

и я хочу сделать некоторые дальнейшие вычисления (например, получить его квадрат), только если результат fun1 is not None.

Это будет сделано:

result = fun1(arg) 
if result: 
    result = result * result

Есть ли более короткие формы, такие как

if (result = fun1(arg)):
    result = result * result

в python?

  • 0
    Первый способ - стандартный способ сделать это, и он не приводит к дополнительным затратам памяти.
Теги:
if-statement

5 ответов

4
Лучший ответ

Он может быть более "чистым" в коде, в C/C++ возможно сделать второй. Не в Python, насколько мне известно. Кроме того, два примера вы дали иметь точно такие же потребности в плане памяти и вычислений. Таким образом, было бы абсолютно эквивалентно использовать любой из этих двух.

Эти два абсолютно идентичны. Таким образом, мой ответ был бы, пойдите своим первым методом, который вы уже знаете, как кодировать .

Не переусердствуйте, когда это не необходимо, это хороший совет в целом.

2

Это происходит в будущей версии python. См. Следующий PEP

https://www.python.org/dev/peps/pep-0572/

Он будет известен как выражение присваивания. Предложенный синтаксис подобен;

# Handle a matched regex
if (match := pattern.search(data)) is not None:
    # Do something with match
0

То, что вы пытаетесь сделать в своем втором коде, - это assignment inside expressions, чего нельзя сделать в Python.

Из официальных документов

Обратите внимание, что в Python, в отличие от C, присваивание не может происходить внутри выражений. Программисты C могут ворчать об этом, но он избегает общего класса проблем, встречающихся в программах на C: typing = в выражении, когда == был предназначен.

также см:

http://effbot.org/pyfaq/why-can-ti-use-an-assignment-in-an-expression.htm

0

Ну, второе возможное решение, которое вы написали, неверно, так как переменная "result" в выражении if не имеет заранее заданного значения. Я бы просто пошел с первым...

0

Нет, вы не можете этого сделать. Выражения в Python не работают как выражения в C ; ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню