我知道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()
通过最佳实践我并不是指"这是最好的编码风格/最具可读性"但是相反,诸如内存消耗,速度等因素对于一般用途而言更加可靠。
答案 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 = ''
一起使用。