我讨厌Python无法区分变量的声明和用法。您无需进行静态输入即可实现这一目标。最好有一种方式说“这是我故意声明的变量,我打算引入一个新名称,这不是错字”。
此外,我通常以一次写入样式使用Python变量,也就是说,我将变量视为不可变的,并且在第一次分配变量后不对其进行修改。由于有了列表理解等功能,这实际上非常容易,并且使代码流更易于遵循。
但是,我无法证明这一事实。Python中没有什么阻止我覆盖或重用变量。
总之,我想用该语言有两个关键字:var
和let
。如果我写入未由任何一个声明的变量,Python应该引发错误。此外,将let
变量声明为只读,而var
变量为“普通”。
考虑以下示例:
x = 42 # Error: Variable `x` undeclared
var x = 1 # OK: Declares `x` and assigns a value.
x = 42 # OK: `x` is declared and mutable.
var x = 2 # Error: Redeclaration of existing variable `x`
let y # Error: Declaration of read-only variable `y` without value
let y = 5 # OK: Declares `y` as read-only and assigns a value.
y = 23 # Error: Variable `y` is read-only
请注意,类型仍然是隐式的(但是let
对于所有意图和目的,变量都是静态类型的,因为它们不能反弹到新值,而var
变量仍可以动态类型)。
最后,所有方法参数应自动为let
,即它们应为只读。除了以下习惯用法外,通常没有充分的理由来修改参数:
def foo(bar = None):
if bar == None: bar = [1, 2, 3]
可以用稍微不同的惯用语代替:
def foo(bar = None):
let mybar = bar or [1, 2, 3]