声明空变量的最佳实践

Best practice for declaring an empty variable

我知道 Python 是一种动态语言,通常不需要事先声明变量,但是在我需要创建一个变量然后稍后给它赋值的情况下,以下两个方法有效:

some_variable = '' 
some_variable = str()

这两者之间是否存在差异,哪个被认为是最佳做法?

示例:

some_variable = str() 

for number in range(10): 
    some_variable += str(number)
print(some_variable)

适用于 some_variable = ''some_variable = str()

By best practice I do not mean "which is best coding style/most readable" but rather factors such as memory consumption, speed and which on the whole is more reliable for general use.

如果您想将变量初始化为空值,使用空值文字会稍微快一些,因为它避免了必须进行名称查找。

也就是说,如果你写:

some_variable = str()

Python首先要确保你没有写过像

这样的傻东西
str = int

首先在某个可见范围内,因此它必须进行递归名称查找。

但是如果你写:

some_variable = ''

那么 '' 就只能是 str。 (类似的原则适用于列表和元组字面量:比 list()tuple() 更喜欢 []()。)

不过,更一般地说:将变量初始化为空值通常被认为是 Python 中的代码味道。对于空列表之类的东西,请考虑使用生成器表达式 (... for ... in ...) 或生成器函数(使用 yield)——在大多数情况下,您完全可以避免设置空值,这通常被认为是更多 Pythonic 风格。

I know Python is a dynamic language and declaring variables before-hand is generally not necessary

什么?首先,事先声明一个变量与动态或非动态有何关系?其次,您怎么能想象任何禁止声明变量 "before-hand" (无论那意味着什么)的语言都可以工作?你需要在某些时候直接声明一些变量。

Is there a difference between both of these and which is considered best practice?

是的,有区别。考虑一下:

def str():
   return 1

x = str()

Python 不会 保护您免受 variable shadowing 的伤害。但是文字空字符串 '' 不能被隐藏。这是功能层面上的差异。

性能水平也有差异:x = ''x = str() 稍快,因为被翻译成不同的字节码。毕竟 x = '' 不需要函数调用(由于变量阴影,无法再次优化)。

最后是美学:x = '' 可能比 x = str() 更具可读性。同样,因为您需要确定 str() 在上下文中实际是什么。

所以总而言之:选择 x = ''