【python基础教程】(7)Python 模块介绍

Python 模块

在前面的几个章节中我们基本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。

为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。

下面是一个使用 python 标准库中模块的例子。

实例:

import sys

print('命令行参数如下:')
for i in sys.argv:
    print(i)

print('\n\nPython 路径为:', sys.path, '\n')

 

执行结果:

C:\Users\yzp\PycharmProjects\base_practice\Scripts\python.exe D:/00test/base_practice/01test.py
命令行参数如下:
D:/00test/base_practice/01test.py


Python 路径为: ['D:\\00test\\base_practice', 'D:\\00test\\base_practice', 'C:\\Users\\yzp\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'C:\\Users\\yzp\\AppData\\Local\\Programs\\Python\\Python37\\DLLs', 'C:\\Users\\yzp\\AppData\\Local\\Programs\\Python\\Python37\\lib', 'C:\\Users\\yzp\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\yzp\\PycharmProjects\\base_practice', 'C:\\Users\\yzp\\PycharmProjects\\base_practice\\lib\\site-packages', 'C:\\Users\\yzp\\PycharmProjects\\base_practice\\lib\\site-packages\\setuptools-39.1.0-py3.7.egg', 'C:\\Program Files\\JetBrains\\PyCharm 2018.2\\helpers\\pycharm_matplotlib_backend'] 


Process finished with exit code 0
  • 1、import sys 引入 python 标准库中的 sys.py 模块;这是引入某一模块的方法。
  • 2、sys.argv 是一个包含命令行参数的列表。
  • 3、sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表。

import 语句

想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:

import module1[, module2[,... moduleN]

 

当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。

搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 support,需要把命令放在脚本的顶端:

support.py 文件代码

# -*- coding:utf-8 -*-
# filename: support.py


def print_func(par):
    print("hello", par)
    return

test.py 引入 support 模块:

# -*- coding:utf-8 -*-
# filename:test_module.py

import support

support.print_func("yin")

 

执行结果:

C:\Users\yzp\PycharmProjects\base_practice\Scripts\python.exe D:/00test/base_practice/test_module.py
hello yin

Process finished with exit code 0

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?

这就涉及到Python的搜索路径,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。

这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。

搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量,做一个简单的实验,在交互式解释器中,输入以下代码:

# -*- coding:utf-8 -*-
# filename:test.py

import sys

print(sys.path)

 

执行结果:

C:\Users\yzp\PycharmProjects\base_practice\Scripts\python.exe D:/00test/base_practice/01test.py
['D:\\00test\\base_practice', 'D:\\00test\\base_practice', 'C:\\Users\\yzp\\AppData\\Local\\Programs\\Python\\Python37\\python37.zip', 'C:\\Users\\yzp\\AppData\\Local\\Programs\\Python\\Python37\\DLLs', 'C:\\Users\\yzp\\AppData\\Local\\Programs\\Python\\Python37\\lib', 'C:\\Users\\yzp\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\yzp\\PycharmProjects\\base_practice', 'C:\\Users\\yzp\\PycharmProjects\\base_practice\\lib\\site-packages', 'C:\\Users\\yzp\\PycharmProjects\\base_practice\\lib\\site-packages\\setuptools-39.1.0-py3.7.egg', 'C:\\Program Files\\JetBrains\\PyCharm 2018.2\\helpers\\pycharm_matplotlib_backend']

Process finished with exit code 0

 

实例:

# -*- coding:utf-8 -*-
# filename: fibo.py


def fibo1(n):
    a, b = 0, 1
    while b < n:
        print(b, end=',')
        a, b = b, a+b
    print(" ")


def fibo2(n):
    a, b = 0, 1
    result = []
    while b < n:
        result.append(b)
        a, b = b, a+b
    print(result)

 

 

导入模块

# -*- coding:utf-8 -*-
# filename:test_module.py
from fibo import fibo1
from fibo import fibo2

n = 1000
fibo1(n)
print("----------分隔符------------ ")
fibo2(n)

 

执行结果:

C:\Users\yzp\PycharmProjects\base_practice\Scripts\python.exe D:/00test/base_practice/test_module.py
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987, 
----------分隔符------------ 
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]

Process finished with exit code 0

__name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

# -*- coding:utf-8 -*-
# filename = test.py

if __name__ == "__main__":
    print("程序本身运行~")
else:
    print("在外部引用时运行~")

 

运行输出如下:

C:\Users\yzp\PycharmProjects\base_practice\Scripts\python.exe D:/00test/base_practice/test.py
程序本身运行~

Process finished with exit code 0

 

外部引用:

# -*- coding:utf-8 -*-
# filename:test_module.py

import test

 

执行结果:

C:\Users\yzp\PycharmProjects\base_practice\Scripts\python.exe D:/00test/base_practice/test_module.py
在外部引用时运行~

Process finished with exit code 0

 

说明: 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。

说明:__name__ 与 __main__ 底下是双下划线, _ _ 是这样去掉中间的那个空格。

dir() 函数

内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:

# -*- coding:utf-8 -*-
# filename:test_module.py
import fibo
import time

print(dir(fibo))
print(dir(time))

 

执行结果:

C:\Users\yzp\PycharmProjects\base_practice\Scripts\python.exe D:/00test/base_practice/test_module.py
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fibo1', 'fibo2']
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime', 'localtime', 'mktime', 'monotonic', 'monotonic_ns', 'perf_counter', 'perf_counter_ns', 'process_time', 'process_time_ns', 'sleep', 'strftime', 'strptime', 'struct_time', 'thread_time', 'thread_time_ns', 'time', 'time_ns', 'timezone', 'tzname']

Process finished with exit code 0
上一篇:XRD格式转换 神器


下一篇:FTP与SFTP两者有什么区别