声明空变量的最佳实践

Sim*_*mon 1 python string declare

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

some_variable = '' 
some_variable = str()
Run Code Online (Sandbox Code Playgroud)

两者之间是否存在差异,哪些被认为是最佳实践?

例:

some_variable = str() 

for number in range(10): 
    some_variable += str(number)
print(some_variable)
Run Code Online (Sandbox Code Playgroud)

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

通过最佳实践,我并不是指"哪种编码风格最佳/最具可读性",而是指内存消耗,速度等因素,总体而言,这些因素对于一般用途更为可靠.

fre*_*ish 7

我知道Python是一种动态语言,通常不需要预先声明变量

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

这两者之间有区别吗?哪一个被认为是最佳实践?

是的,存在差异。考虑一下:

def str():
   return 1

x = str()
Run Code Online (Sandbox Code Playgroud)

Python不会保护您免受变量阴影的影响。但文字空字符串''不能被隐藏。这是功能层面上的差异。

性能水平上也存在差异:由于被转换为不同的字节码,x = ''速度稍快一些。x = str()毕竟x = ''不需要函数调用(由于变量遮蔽而无法再次优化)。

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

总而言之:与 一起去x = ''

  • 从技术上讲,声明和定义是两个不同的东西。(例如,C 允许在不定义的情况下声明变量。)Python 没有与定义分开的声明;而是将声明与定义分开。仅当将值分配给名称时才会立即创建变量。 (4认同)
  • 事先“禁止”变量声明和“不需要”变量声明之间是有区别的。对于后者...... *咳嗽* PHP *咳嗽*(某种程度上) (3认同)

Dan*_*den 6

如果要将变量初始化为空值,则使用空值文字会稍快一些,因为它可以避免必须进行名称查找.

也就是说,如果你写:

some_variable = str()
Run Code Online (Sandbox Code Playgroud)

Python首先需要确保你没有写过像傻瓜这样的东西

str = int
Run Code Online (Sandbox Code Playgroud)

首先在一些可见范围内,所以它必须进行递归名称查找.

但如果你写:

some_variable = ''
Run Code Online (Sandbox Code Playgroud)

那么有没有办法,''都不会是什么,但一个str.(类似的原则适用于列表和元组文字:prefer []()over list()tuple().)

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

  • 有很多情况应该(并且必须)显式初始化变量; 并非所有事物都可以或应该被简化为发电机或理解.当然,初始化具有永远*使用*的值的变量是完全没有必要的. (2认同)