Python3学习笔记:模块

你的名字 2022-05-22 12:20 431阅读 0赞

模块

Python代码以.py文件形式保存。而每个.py文件都可以看作是一个模块。当一个模块调用另一个模块时,便需要import语句。

在此前的章节中,我们已看到import语句的使用。

若在同一package下,则只需要调用import moduleName即可。否则需要使用from packageName import moduleName。

IDE中的Unresolved import

网上各种教程有描述,“若在同一package下,则只需要调用import moduleName即可”,但有时IDE仍会提示“Unresolved Import”。矛盾的是,虽然有错误提示,脚本却能正确执行。这是为什么呢?

70

执行结果如下

  1. it's module1
  2. sys path = ['/Users/breakloop/eclipse-workspace/helloworld/src/demo/module', '/Users/breakloop/eclipse-workspace/helloworld/src', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages', '/Library/Frameworks/Python.framework/Versions/3.6/lib/python36.zip']
  3. hello

首先,脱离IDE,在命令行模式下,进入python指令,import相同目录下的模块,确实不会报错。python会到当前目录下,以及sys.path (sys.path是一个路径列表)中查找引入的模块。这也是代码能够正确执行的原因。

而IDE之所以报错,是因为IDE仅仅将scr目录加入了PYTHONPATH,其子目录并不再PYTHONPATH中,

70 1

因此,IDE认为未能找到模块,因此提示错误。

当然,解决的办法也很简单。有3种

(1)使用from package import module的方式

  1. import sys
  2. from demo.module import module1
  3. if __name__ == '__main__':
  4. print("sys path =", sys.path)
  5. module1.hello()

(2)使用import package.module的方式

  1. import sys
  2. import demo.module.module1 as m1
  3. if __name__ == '__main__':
  4. print("sys path =", sys.path)
  5. m1.hello()

(3)在PYTHONPATH中添加当前目录。

70 2

通过以上几个方法,我们也了解了,如何告诉PYTHON从何处寻找module.

dir()函数

  1. from demo.module import module1
  2. if __name__ == '__main__':
  3. print(dir(module1))
  4. print()

相应输出为

  1. it's module1
  2. ['__builtins__', '__bye__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'hello']

dir()方法可以输出模块的所有属性和方法(包括私有方法)

help()函数

#

  1. from demo.module import module1
  2. if __name__ == '__main__':
  3. help(module1)
  4. print()

相应输出为

  1. Help on module demo.module.module1 in demo.module:
  2. NAME
  3. demo.module.module1 - Created on 2018624
  4. DESCRIPTION
  5. @author: breakloop
  6. FUNCTIONS
  7. __bye__()
  8. hello()
  9. FILE
  10. /Users/breakloop/eclipse-workspace/helloworld/src/demo/module/module1.py

help方法给出了module1的各种信息,包括:注释头,方法列表(包括私有方法),模块位置等。

__name__

我们在使用IDE创建模块时,通常会有一段代码

  1. if __name__ == '__main__':
  2. pass

当执行模块本身时,__name__将被置为“__main__”,因此我们可以根据__name__的值,来判断当前模块是被调用,或是自身在执行。例如,module1

  1. if __name__ == '__main__':
  2. print("inside")
  3. else:
  4. print("it's module1")
  5. def hello():
  6. print("hello")
  7. def __bye__():
  8. print("bye")

当运行module1时,输出“inside”。当被外部引用时,输出“it’s module1”

发表评论

表情:
评论列表 (有 0 条评论,431人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python学习笔记(3)

    42、requests网络库使用     requests使用的是urllib3,拥有了它的所有特性,requests支持HTTP连接保持和连接池,支持使用cookie保持会

    相关 Python3学习笔记模块

    模块 Python代码以.py文件形式保存。而每个.py文件都可以看作是一个模块。当一个模块调用另一个模块时,便需要import语句。 在此前的章节中,我们已看到imp