python - python如何处理条件语句中的临时变量?

标签 python namespaces garbage-collection runtime temporary

说我有以下代码

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

在第二个版本中创建了一个名为“元音”的字符串对象,而我在第一个版本中只写了“aeiouAEIOU”。

这两者之间会有运行时差异或空间使用差异吗?

另外,第一个版本的调用堆栈中是否会显示临时变量?如果没有,python 在完成 in 操作后是否只是丢弃它?

最佳答案

除去其余的评论,没有显着的运行时性能。如果您确实想检查它,您可以使用 timeit模块看提供的两个版本代码的差异,应该是比较小的差异。

但是要回答您的问题,是的,只要访问和使用在堆栈(内存)中引用的变量,它就会被破坏。但是,我更喜欢第一个版本“更好”,因为它可以防止在实际表示的变量中产生歧义。有时变量存储会被客户端覆盖而您可能不知道,这可能会导致您不希望发生的函数的未定义行为。

关于python - python如何处理条件语句中的临时变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60574334/

相关文章:

python - 在我自己的 View 中使用 django PasswordResetView 功能

python - 如何在 python JSON 字符串中转义 true/false bool 值

python - 更新 Anaconda 中的统计模型

c++ - C++ 中的命名空间别名

asp.net - 没有命名空间的文件夹 C#、.Net、VS 2008

eclipse - 很想知道 Eclipse 'Show Heap Status' 做了什么

python - 可以同时接受 init args 和 call args 的装饰器?

vb.net - 一个具有两个不同命名空间的类?

python - pyqt:在 pyqt 中将多个信号连接到同一函数的正确方法(QSignalMapper 不适用)

java - 为什么 System.gc() 在这段代码中只回收一个对象?