Python 模块(module)

                     

贡献者: addis; shizy0808

预备知识 Python 入门

   在 “Python 入门” 中,我们示范了如何从 math 模块中引入一些变量和函数(如 pisin).现在我们来学习 Python 模块的原理.

   事实上,Python 的模块可以是任意一个普通的 .py 拓展名的文件.这个文件中可以定义全局变量,函数,类,甚至是可执行的命令.当我们要在其他 .py 文件中使用这个文件中的函数或全局变量,只需要声明把前者作为模块使用即可.

   例如创建模块文件 mymodule.py 如下

# 函数
def plus1(num):
    return num + 1
# 全局变量
num = 3.5
num2 = plus1(num)
在该模块中定义了一个函数和两个全局变量.注意在定义第二个变量时执行了函数 plus1,这个命令会在模块被调用时执行.

1. 使用模块

   现在,我们我们在同一文件夹中新建如下 test.py,就可以用 import 语句来使用我们刚刚创建的模块.

import mymodule
print('num = ', mymodule.num)
print('num2 = ', mymodule.num2)
print('num2 + 1 = ', mymodule.plus1(mymodule.num2))
在 “Python 入门” 中我们还介绍了模块的不同导入方法,这里不再赘述.

   除了内建模块外,Python 默认只会在当前文件夹(即路径)下搜索模块文件.若要添加其他搜索路径,可以在 import 命令之前使用

import sys
sys.path.insert(1, 路径)
其中 路径 既可以是绝对路径也可以是相对路径.例如要指定当前路径的子文件夹 modules,则使用 'modules/' 即可;如果是上层文件夹中的子文件夹,可用 '../modules/'

2. 模块嵌套

   在上面的例子中,如果在 mymodule.py 文件中使用了 import 语句导入其他模块中的函数和变量等,那么在其 test.py 中也可以使用这些函数和变量.例如在 mymodule.py 第一行插入

from math import pi
那么在 test.py 中就可以使用 mymodule.pi 获取这个变量.但如果把这行改为
import math
那么在 test.py 中要使用 mymodule.math.pi 才能获取这个变量.

3. 模块目录

  

未完成:另一种情况是 mymod 的子文件夹下面也有 __init__.py

4. Python 内建模块

   Python 中有几个内建模块(built-in module),可以随时导入.

math 模块

   (未完成)

time 模块

   在 Python 中,通常有这几种方式来表示时间:

   时间戳(timestamp):通常来说,时间戳表示的是从 1970 年 1 月 1 日 00:00:00 开始按秒计算的偏移量.我们运行 type(time.time()),返回的是 float 类型.

   格式化的时间字符串

   元组(struct_time):struct_time 元组共有 9 个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)

random 模块

   随机生成内容.

import random
# 0,1之间时间生成的浮点数  float
print(random.random())
# 随机生成传入参数范围内的数字 即 1,2,3
print(random.randint(1, 3))
# 随机生成传入参数范围内的数字,range 顾头不顾尾
print(random.randrange(1, 3))
# 随机选择任意一个数字
print(random.choice([1, '23', [4, 5]]))

sys 模块

import sys
# 命令行参数List,第一个元素是程序本身路径
print(sys.argv)
# 结果['D:/Pycharm Community/python内置函数/sysTest.py']
# 获取Python解释程序的版本信息
print(sys.version)

os 模块

   os 模块是与操作系统交互的一个接口.

os.getcwd() # 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  # 改变当前脚本工作目录;相当于shell下cd
os.curdir  # 返回当前目录: ('.')
os.makedirs('dirname1/dirname2')    # 可生成多层递归目录
# 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.removedirs('dirname1')
os.mkdir('dirname')    # 生成单级目录
os.rmdir('dirname')    # 删除单级空目录,若目录不为空则无法删除,报错;
# 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.listdir('dirname')
os.remove()  # 删除一个文件
os.rename("oldname","newname")  # 重命名文件/目录
os.stat('path/filename')  # 获取文件/目录信息
os.path.abspath(path)  # 返回 path 规范化的绝对路径
os.path.split(path)  # 将 path 分割成目录和文件名二元组返回
os.path.exists(path) #  如果path存在,返回 True;如果 path 不存在,返回 False
os.path.isabs(path)  # 如果 path 是绝对路径,返回 True
os.path.isfile(path)  # 如果 path 是一个存在的文件,返回 True.否则返回 False
os.path.isdir(path) # 如果 path 是一个存在的目录,则返回 True.否则返回 False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回


致读者: 小时百科一直以来坚持所有内容免费,这导致我们处于严重的亏损状态。 长此以往很可能会最终导致我们不得不选择大量广告以及内容付费等。 因此,我们请求广大读者热心打赏 ,使网站得以健康发展。 如果看到这条信息的每位读者能慷慨打赏 10 元,我们一个星期内就能脱离亏损, 并保证在接下来的一整年里向所有读者继续免费提供优质内容。 但遗憾的是只有不到 1% 的读者愿意捐款, 他们的付出帮助了 99% 的读者免费获取知识, 我们在此表示感谢。

                     

友情链接: 超理论坛 | ©小时科技 保留一切权利