贡献者: addis; shizy0808
在 “Python 入门” 中,我们示范了如何从 math
模块中引入一些变量和函数(如 pi
和 sin
)。现在我们来学习 Python 模块的原理。
事实上,Python 的模块可以是任意一个普通的 .py
拓展名的文件。这个文件中可以定义全局变量,函数,类,甚至是可执行的命令。当我们要在其他 .py
文件中使用这个文件中的函数或全局变量,只需要声明把前者作为模块使用即可。
例如创建模块文件
# 函数
def plus1(num):
return num + 1
# 全局变量
num = 3.5
num2 = plus1(num)
# 执行一些命令
print('欢迎使用 mymodule.py')
在该模块中定义了一个函数和两个全局变量。注意在定义第二个变量时执行了函数 plus1
,这个命令和下面的 print()
都会在模块被 import
时执行。关于创建模块的更多细节详见 “Python 创建模块笔记”。
现在,我们我们在同一文件夹中新建如下文件,就可以用 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/'
。
import module名字
以后,可以用 module名字.__file__
查看 module 的文件路径。
在上面的例子中,如果在 mymodule.py
文件中使用了 import
语句导入其他模块中的函数和变量等,那么在其 test.py
中也可以使用这些函数和变量。例如在 mymodule.py
第一行插入
from math import pi
那么在 test.py
中就可以使用 mymodule.pi
获取这个变量。但如果把这行改为
import math
那么在 test.py
中要使用 mymodule.math.pi
才能获取这个变量。
__init__.py
文件(内容通常为空)用于把所在目录标记为模块目录。例如创建 mymod/__init__.py
以及 mymod/mod1.py
后,如果 mymod
在搜索路径下,那么就可以 import mymod.mod1
或者 from mymod import mod1
。例如:import matplotlib.pyplot as plt
对应的文件就是 matplotlib/pyplot.py
__init__.py
也可以存在于子文件夹中。
Python 中有几个内建模块(built-in module),可以随时导入。
(未完成)
在 Python 中,通常有这几种方式来表示时间(import time
):
时间戳(timestamp):通常来说,时间戳表示的是从 1970 年 1 月 1 日 00:00 (UTC)1 开始按秒计算的偏移量(不包括闰秒)。我们运行 type(time.time())
,返回的是 float
类型精确到 1e-6
秒。
格式化的时间字符串
localtime()
返回当地时间,返回类型为 time.struct_time
,类共有 9 个成员:(年:tm_year
,月:tm_mon
,日:tm_mday
,时:tm_hour
,分:tm_min
,秒:tm_sec
,周几:tm_wday
(周 1 是 0),一年中第几天:tm_yday
,是否夏令时:tm_isdst
)
gmtime()
返回 GMT 时间,返回类型同样为 time.struct_time
随机生成内容。
import random
# 0,1之间时间生成的浮点数 float
print(random.random())
# 随机生成传入参数范围内的数字 即 1,2,3
print(random.randint(1, 3))
# 随机生成传入参数范围内的数字,range 顾头不顾尾
print(random.randrange(1, 3))
# 随机选择 list 中一个元素
print(random.choice([1, '23', [4, 5]]))
import sys
# 命令行参数List,第一个元素是程序本身路径
print(sys.argv)
# 结果['D:/Pycharm Community/python内置函数/sysTest.py']
# 获取 Python 解释程序的版本信息
print(sys.version)
目录与文件操作
os.getcwd() # 获取当前工作目录(current working directory)
os.chdir("dirname") # 改变当前脚本工作目录;相当于 shell 下 cd
os.makedirs('dirname1/dirname2') # 可生成多层递归目录
# 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.removedirs('dirname1')
os.mkdir('dirname') # 生成单级目录
os.rmdir('dirname') # 删除单级空目录,若目录不为空则无法删除,报错
# 列出指定目录下的所有文件和子目录的 list,包括隐藏文件
os.listdir('dirname')
os.remove('filename') # 删除一个文件
os.rename('oldname', 'newname') # 重命名文件/目录
os.stat('path/filename') # 获取文件/目录信息
os.path.abspath('path') # 返回 path 规范化的绝对路径
os.path.split('path') # 将 path 分割成目录和文件名二元组返回
os.path.exists('path') # 判断 path 是否存在
os.path.isabs('path') # 判断 path 是否为绝对路径
os.path.isfile('path') # 判断 path 是否为一个存在的文件
os.path.isdir('path') # 判断 path 是否为一个存在的目录
os.path.join('path1', 'path2', ...) # 将多个路径组合后返回 path1/path2/... (最后没有 /)
1. ^ 这个时刻也叫 epoch