【问题标题】:How to use modules如何使用模块
【发布时间】:2022-01-13 14:46:53
【问题描述】:

我需要了解如何解决“未定义”名称错误。所以我在下面做了一个代码示例。

我要根目录下的文件,一个必须作为模块使用。第一个文件是主文件,第二个文件是附加文件,我需要将其用作模块。 因此,我必须将函数名称 greet() 与全局变量一起从 main 移动到附加。

当我将函数从 main 移动到附加时,我必须将附加导入到 main。我得到的错误是全局变量无法识别。如何以避免“未访问”或“未定义”错误消息的方式导入模块。

这是移动问候功能之前的主文件。

#global
name = 'Leo'

def greet():
    global name
    print(f'Hello {name}!')
greet()

def do():
    global name
    print(f'How is your day {name}?')
do()

这是从 main 中获取的代码的附加内容

#global
name = 'Leo'

def greet():
    global name
    print(f'Hello {name}!')
greet()

现在主要应该是这样的

def do():
    global name
    print(f'How is your day {name}?')
do()

【问题讨论】:

    标签: python import module


    【解决方案1】:

    如果您只使用通用导入语句,则导入模块中包含的内容将添加到以模块名称开头的命名空间,如下所示:

    import additional
    
    def do():
        print(f'How is your day {additional.name}?')
    do()
    

    您可以从模块中导入特定的东西,然后导入的对象将不会在其名称中添加任何内容:

    from additional import name
    
    def do():
        print(f'How is your day {name}?')
    do()
    

    在这两种情况下,您都可以注意到附加的 greet() 也被执行。那是因为在导入某些东西时,导入的模块就像任何其他 Python 代码一样被执行。

    如果您想避免这种情况,请确保在 Python 脚本中添加非常常见的代码:

    if __name__=="__main__":
        greet()
    

    这将确保 if 语句中包含的任何内容仅在模块作为程序的入口点运行时才会执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-06
      • 2012-01-03
      • 2020-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多