声明空变量的最佳实践

时间:2018-03-23 14:14:18

标签: python string declare

我知道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()

  

通过最佳实践我并不是指"这是最好的编码风格/最具可读性"但是相反,诸如内存消耗,速度等因素对于一般用途而言更加可靠。

2 个答案:

答案 0 :(得分:6)

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

也就是说,如果你写:

"{{ host[item.item] }}":

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

那样愚蠢的东西
some_variable = str()

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

但如果你写:

str = int

然后some_variable = '' 除了''之外不可能有str。 (类似的原则适用于列表和元组文字:首选[]()优先于list()tuple()。)

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

答案 1 :(得分:3)

  

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

什么?首先,如何在动态之前声明变量与动态相关?其次,你怎么能想象任何语言声明变量"前手" (无论那意味着)工作?你需要在某个时刻直接声明一些变量。

  

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

是的,有差异。考虑一下:

def str():
   return 1

x = str()

Python 不会保护您免受variable shadowing的侵害。但是文字空字符串''不能被遮蔽。这在功能层面上有所不同。

性能级别也存在差异:x = ''由于被转换为不同的字节码而略快于x = str()。毕竟x = ''不需要函数调用(由于变量阴影而无法再次优化)。

最后,esthethics:x = ''可能比x = str()更具可读性。再次,因为你需要确定str()实际上是在上下文中。

总而言之:与x = ''一起使用。