处女座的人有一个硬伤,看到任何警告都想消灭。
今天,代码写着写着就出现了一个 黄色 的警告 shadows name 'contract_version' from outer scope
原代码如下
def contract_v1(): contract_version = '1' contract = 'contract_v{}.sol'.format(contract_version) print('current contract:contract_',contract) if __name__ == '__main__': contract_version = '1' # 默认合约版本 contract_v1()
要消除这个黄色的警告,只需要一个知识点:变量隐藏 (variables shadow)
变量隐藏 就只有一句话:内部定义的变量会屏蔽父级定义的同名变量
怎么理解呢? 打个比方,比如我村子里有一个人叫李三,镇上也有一个人叫李三。当村子里的两个人聊天的时候说 李三 咋咋咋的时候,这个李三就是村子里的,而不是镇上的。
对于 Python3 来说,这句话的意思就是:函数内定义的变量会屏蔽模块内定义的变量
好了,知道了原理,我们来谈谈 shadows name 'contract_version' from outer scope
出现的条件
-
首先应该满足变量屏蔽。也就是函数内定义了一个和函数外同名的变量
-
函数外定义的变量,没有其它地方使用过。
如果其它地方使用了,就不会触发这个警告了。
比如下面的代码,是绝对不会触发警告的def contract_v1(): contract_version = '1' contract = 'contract_v{}.sol'.format(contract_version) print('current contract:contract_',contract) if __name__ == '__main__': contract_version = '1' # 默认合约版本 contract_v1() print('default version',contract_version)
目前尚无回复