声明空变量的最佳实践
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 = ''
。
我知道 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 = ''
。