深究 Pycharm shadows name 'xxxx' from outer scope 警告

yufei       4 周 前       59

处女座的人有一个硬伤,看到任何警告都想消灭。

今天,代码写着写着就出现了一个 黄色 的警告 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 出现的条件

  1. 首先应该满足变量屏蔽。也就是函数内定义了一个和函数外同名的变量

  2. 函数外定义的变量,没有其它地方使用过。
    如果其它地方使用了,就不会触发这个警告了。
    比如下面的代码,是绝对不会触发警告的

    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)
    
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2018 简单教程 twle.cn All Rights Reserved.