Python字典中冒号(:)的作用及一段特殊代码的合法性问询
Python字典中冒号(:)的作用及一段特殊代码的合法性问询
哈哈,刚看到这段代码的时候我也愣了一下——毕竟咱们平时给字典键赋值都是用=,突然冒出来个冒号还不报错,确实有点反直觉!
先给你吃个定心丸:你写的第二行代码完全是合法的Python代码,不会触发语法错误,但它根本不是你以为的“字典赋值操作”,这就是为啥它能跑起来却没修改字典的值。
咱们平时给字典的键赋值用的是dict1['temp'] = 5,这是标准的赋值语句,会真正改变字典里对应键的值。但你写的dict1['temp'] : 5,其实是Python 3.6及以后版本支持的表达式标注语法。这种语法原本是用来做类型提示的,比如我们会写age: int = 25来标注变量age的类型是整数,但Python的语法允许给任意合法的表达式添加标注——哪怕这个标注只是个普通数值,没有类型意义。
换句话说,dict1['temp'] : 5只是给dict1['temp']这个表达式(此时它的值是10)加了一个标注值5,但这个操作不会对字典本身产生任何影响。你可以试试运行完这段代码后打印dict1['temp'],结果肯定还是原来的10,因为这段代码根本没做赋值动作。
这种语法虽然合法,但几乎没有实际业务用途,除非是在一些元编程的特殊场景里。Python解释器会承认它的合法性,但不会让它影响程序的正常逻辑,所以才会出现“能跑但没效果”的情况。
备注:内容来源于stack exchange,提问作者Prabhat Mangina
相关产品推荐
相关产品推荐

