Python模块及导入方法

2024年03月25日 Python教程 Python51

Python模块及导入方法

模块就是一个 Python 文件。一个空的 Python 文件也可以称为模块。多数情况下,一个 Python 文件包含变量、函数和其他的内容,这些内容可以被其他代码使用。

使用模块的最简单方法就是“import 模块名”。下面在当前目录下创建一个文件 child.py,内容如下:

""" this is the child module      # 文件child.py的内容
"""    
name = "child"               # 定义一个变量
def hello():                 # 定义一个函数
    print("hello from child")

下面来操作这个模块:

>>> import child                  # 引入该模块
>>> child                         # child现在就是一个模块
<module 'child' from '/moduleDemo1/child.py'>
>>> child.__doc__       # 查看该模块的__doc__属性,即模块最开始的字符串
' this is the child modulen'
>>> child.__file__                # 模块的文件信息
'/moduleDemo1/child.py'
>>> child.__name__                # 模块名
'child'
>>> child.name                    # 访问该模块中的name变量
'child'
>>> child.hello                   # 查看hello,其是一个函数
<function hello at 0x108fa3e18>
>>> child.hello()                 # 调用hello()函数
hello from child

可以发现,基本用法就是 import 的某个模块,然后即可使用该文件中定义的变量、函数等资源。使用时带上模块的名,如 child.name 表示属于模块 child 的变量 name。

如果不希望将某个文件中所有的内容都引入进来,如只希望引入 hello() 函数,则可以使用下面的语句:

from child import hello

这样 child 模块下的 hello() 函数就被引入到当前空间,这时不再需要使用 child.hello,而应该使用 hello。

>>> from child import hello
>>> hello()
hello from child

如果不希望每次访问某个模块的资源都带上模块名,可以使用下面的方法:

from 模块名import *

这样指定模块的内容都被加载到了当前空间,使用时便不需要再带上模块名。

>>> from child import *
>>> hello
<function hello at 0x10eef8c80>
>>> hello()
hello from child
>>> name
'child'

如果同时使用这两种方式,是否会发生冲突呢?答案是不会的,我们会发现两份资源共存,而且相互不影响。

>>> import child              # 同时使用两种方式
>>> from child import *
>>> id(child.name)            # 它们的id是不同的
4524178480
>>> id(name)
>>> id(name)
4530112248
>>> child.name
'child'
>>> name
'child'
>>> child.name = "new_name"   # 修改其中一个并不会影响另一个
>>> name
'child'

前面提到了在当前目录下创建一个文件,为何要在当前目录下呢?其他的目录可不可以呢?答案是不可以,因为只有某些特定目录下的文件才会被引入进来。这就类似于 Shell 中的 path,只有在指定目录下的文件才可以被自动执行。但是 Shell 中可以通过绝对路径来执行不在 path 目录中的程序,而 Python 没有办法这么做。

那么如何知道哪些路径下的Python文件能够被引入呢?这是在 sys.path 变量中定义的。

>>> import sys
>>> sys.path                           # 这是一个列表,每个元素表示一个搜索路径
['',                                            # 当前目录
'/anaconda3/lib/python37.zip',
'/anaconda3/lib/python3.7',
'/anaconda3/lib/python3.7/lib-dynload',
'/anaconda3/lib/python3.7/site-packages',
'/anaconda3/lib/python3.7/site-packages/aeosa']

可以看到,sys.path 是一个路径的列表,只要将 Python 文件放到其中任意一个路径下就可以被成功 import 进来。

上一节 下一节

本文链接:http://so.lmcjl.com/news/336/

展开阅读全文