Python中如何处理临时变量命名与生命周期的问题

请教一下, 一些临时变量的名字在某个 section 完成后,不会在使用
大家是重复使用同一个名字还是每次都重新起一个新名字,

场景如下,
一个取得当前汇率的程序
main
1. 取得 aud 汇率, 做一些计算,print
aud_usd = fx_rate(‘aud’, ‘usd’)
使用 aud_usd 做一些运算,aud_usd 使命完成, 后面不会在有 call
打印结果

2. 取得 CAD 汇率, 做一些计算,print
cad_usd = fx_rate(‘aud’, ‘usd’)
使用 cad_usd 做一些运算
打印结果

(第一步和第二部中的运算 是不同的场景, 所以没法抽象到一个 function 中)

那么 aud_usd cad_usd 是不是可以直接用一个 common 变量 to_usd ?

谢谢大家.
Python中如何处理临时变量命名与生命周期的问题


7 回复

用两个变量


在Python里,临时变量其实没啥特别的,就是普通的局部变量。它的生命周期和命名完全由作用域决定,写代码的时候注意这几点就行:

  1. 作用域就是生命周期:函数里定义的变量,函数执行完就没了。类方法里的变量,方法执行完也就没了。这是自动的,不用你操心回收。
  2. 命名怎么清晰怎么来:临时变量常用短名字,像 i, j, tmp, item, value 这些。但别太省,a, b, x 这种过于简单的名字只在非常局部的循环或简单计算里用,其他地方用会让人看不懂。
  3. 用上下文管理器处理“临时资源”:这才是关键。如果你说的“临时变量”指的是文件句柄、网络连接、锁这类需要明确关闭的资源,一定要用 with 语句:
    with open('temp.txt', 'w') as f:  # f 在这里就是临时文件句柄
        f.write('some data')
    # 出了 with 块,文件自动关闭,f 理论上也不该再用了
    
  4. 循环和推导式里的临时变量:这些变量只在当前迭代或表达式里有效,很安全:
    results = [x*2 for x in some_list]  # x 只在推导式里存在
    for index, value in enumerate(data):  # index, value 只在当前循环迭代有效
        process(value)
    

总结:遵循作用域,名字别乱写,资源用 with

明显 2 个啊, 如果你取一个名, 接坑的人会骂你的.

用两个

谢谢楼上的 3 个大神的回答。

意思是使用两个不同的变量名主要是为了方便编写程序的人员分辨,但其实对代码本身的运行不会有什么影响,是吗?


有啊。
第一种方案没有新的变量。
如果是 java 或.net 之类自动回收的语言就是在未回收前占内存,导致你的代码更耗电。
没有自动回收的语言忘记回收,你这个操作多来几万次你看看你的内存占用量…………
当然一般程序对耗电量等没有什么特别需求,所以就是无自动回收语言注意回收内存,有自动回收语言没什么区别。
为了可读性牺牲性能是团队工作中正确的做法。

回到顶部