包与模块

包与模块

一、包(目录)

  • 当函数或类等代码块保存在不同源文件中(*.py这类源文件称为模块),所有保存源文件的目录(包括init.py),称之为包。

二、模块(源文件)

  • 在同一个模块文件中,要调用该模块中的函数或类等,直接调用即可,不存在包或者模块的导入问题。但是,如果要在别的模块文件中引用,则需要使用import进行导入。
  • 使用import导入一个模块时,事实上是将该模块的原代码执行了一遍,为了防止别的模块在导入时重复执行代码,必须添加一个判断条件:

    if _name_  == '_main_':        # 本质是判断当前代码是否在当前模块中直接运行,还是在其他模块中运行
      test_01()
    print(_name_)        
    # 当在当前模块中打印_name_魔术变量时,其值为_main_(字符串),如果在其他模块中应用挡墙模块,则打印的_name_是当前模块的真实名称,而非_main_
  • 导入模块

    import random    # 直接通过import导入,只能到模块级,不能到函数或类级
    print(random.choice([1,2,3,4,5]))
    # 可以通过form...import...导入到函数或类级,那么直接在代码中调用函数即可
    from random import choice
    print(choice([1,2,3,4,5]))
    # 通常情况下,在同一个包下,可以不需要在导入时明确声名包名,但是,建议无论什么情况下把包名加上
  • 避免在顶部进行两个模块之间互相循环导入

三、模块级变量

  • 模块级变量(直接隶属于当前模块,与函数或类同级,可以被其他函数直接引用,即全局变量)
  • 在函数中声名使用全局变量

    global source        # 使用global声名全局变量后,才可以正确引用到模块级变量
上一篇
下一篇