Как python обрабатывает временные переменные в условном выражении? - PullRequest
0 голосов
/ 07 марта 2020

Допустим, у меня есть следующий код

def vc_count(word, low, high):
    if low > high:
        return 0, 0
    v, c = vc_count(word, low+1, high)
    if word[low] in "aeiouAEIOU":
        return v+1, c
    else:
        return v, c+1
def vc_count(word, low, high):
    if low > high:
        return 0, 0
    v, c = vc_count(word, low+1, high)
    vowels = "aeiouAEIOU"
    if word[low] in vowels:
        return v+1, c
    else:
        return v, c+1

Во второй версии создается строковый объект с именем 'vowels', а в первой я просто написал "aeiouAEIOU".

Будет ли разница между временем выполнения или разницей в использовании пространства между этими двумя?

Кроме того, появится ли временная переменная в стеке вызовов для первой версии? Если нет, python просто сбрасывает его после завершения операции?

1 Ответ

1 голос
/ 07 марта 2020

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

Но чтобы ответить на ваш вопрос, да, как только поскольку эта переменная, на которую ссылаются в стеке (памяти), доступна и используется, она по существу уничтожается. Тем не менее, я бы предпочел первую версию «лучше», поскольку она предотвращает неоднозначность в пределах того, какие переменные должны быть фактически представлены. Иногда хранилище переменных будет перезаписано клиентом, и вы можете об этом не знать, что может привести к неопределенному поведению функции, которого вы бы не хотели.

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