Python 3.6即将发布.PEP 494 - Python 3.6发布时间表提到12月底,所以我通过Python 3.6中的新功能看到他们提到了变量注释:
PEP 484引入了函数参数类型注释的标准,即类型提示.此PEP为Python添加语法以注释变量类型,包括类变量和实例变量:
Run Code Online (Sandbox Code Playgroud)primes: List[int] = [] captain: str # Note: no initial value! class Starship: stats: Dict[str, int] = {}与函数注释一样,Python解释器不会将任何特定含义附加到变量注释,只将它们存储在
__annotations__类或模块的特殊属性中.与静态类型语言中的变量声明相比,注释语法的目标是提供一种通过抽象语法树和__annotations__属性为第三方工具和库指定结构化类型元数据的简便方法.
因此,根据我的阅读,它们是来自Python 3.5的类型提示的一部分,在Python 3.5中的什么是类型提示中有所描述.
我按照captain: str和class Starship示例,但不确定最后一个:如何primes: List[int] = []解释?它是否定义了一个只允许整数的空列表?
我在修改字典,偶然写了类似
data = dict(a=1, b=2)
if condition:
data['c']: 3
Run Code Online (Sandbox Code Playgroud)
我希望这是一个语法错误,但是它可以正确运行,并且该语句似乎没有任何作用。
令我感到好奇的是:这是一种什么样的说法,为什么这是合法的?
我在代码中打了一个错字,在语法上完全沉默了。
dict_args : {"arg1":1,"arg2":2,"arg3":3}
# .... Some more code
some_function(**dict_args)
# .... Some more code
Run Code Online (Sandbox Code Playgroud)
如果您没有注意到它,则在声明变量时使用:代替。=dict_args
所以我的问题是,莫非是Python语法:a:1,本身,持有任何意义?还是假设它被认为是语法错误?
我在打印后添加冒号和分号,但解释器没有抛出错误。
请使用 python3.8.x(edit) 运行
x=5
print:(x)
print;(x)
Run Code Online (Sandbox Code Playgroud) python ×4
python-3.x ×3
syntax-error ×2
annotations ×1
python-3.6 ×1
syntax ×1
type-hinting ×1