0
点赞
收藏
分享

微信扫一扫

Python--模块

夏沐沐 2022-09-20 阅读 200


一、介绍

在Python中,程序都是以单个​​.py​​为后缀的文件运行。随着程序的变长,可能需要将其拆分为几个文件以便于维护。有时候可能几个程序都需要相同的功能,显然每次把需要的功能复制到文件中并不利于维护,如果我们要修改功能,就必须修改每个文件,这样不仅操作不方便,而且容易出错。

为了满足这些需求,Python引入了模块的概念,可以把需要重复利用的代码定义在一个文件中,并在脚本或者Python交互式解释器中使用它们。定义重复利用的代码的文件称为模块,模块中定义的代码可以被导入到另一个模块或者主模块(脚本执行时可以调用的变量集位于最高级,并且处于计算器模式)中。

二、模块

2.1、模块介绍

模块就是一个包含了Python定义和声明的​​.py​​​文件(模块命名规则和变量名规则相同),例如:新建一个​​fc.py​​文件

# fc.py
def foo(a,b):
return a+b

接下来我们可以在与​​fc.py​​同一个目录下使用这个模块,例如:

import fc

print(foo(1,2))

2.2、__name__变量

模块的模块名可以通过全局变量​​__name__​​获得,例如:

import fc

print(fc.__name__)
print(__name__)

# 输出
# fc
# __main__

在Python中,​​__name__​​​是当前模块名。如果模块被运行时模块名为​​__main__​​,则当前模块是被运行的,反之,则当前模块是被导入的。

if __name__ == "__main__":
print("直接运行")
else:
print("被作为模块导入")

2.3、dir函数

​dir​​​函数可以列出对象的模块标识符,标识符有函数、类和变量。当你为​​dir​​函数提供一个模块名的时候,它返回模块定义的名称列表。如果不提供参数,它返回当前模块中定义的名称列表,例如:

import fc

print(dir(fc))

# 输出
# ['__builtins','__cached__','__doc__','__file__','__loader__','__name__','__package__','__spec__','foo']

可以从结果中看出,模块​​fc​​​中定义了函数​​foo​​​,使用​​dir​​函数可以方便我们了解对象(模块也是对象)的构造。

2.4、使用模块

模块也是对象,所以调用模块中的内容和调用对象中的内容的方法是一样的,但是要先引入模块,例如:

# 导入整个模块
import fc

fc.foo(1,2)

还可以导入模块中的部分功能函数,例如:

# 导入模块中的部分函数
from fc import foo

foo(1,2)

import​from...import...​的区别

  • ​import​​​是导入整个模块,​​from...import...​​是导入模块中的部分功能;
  • 使用​​import​​方式要通过对象调用模块内部的函数;
  • 使用​​from...import...​​方式可以直接使用函数,不需要通过对象调用;

三、包

3.1、使用包

Python通过模块来组织代码,模块即一个py文件,是通过“包”来加以组织的,而​​“包”​​​则​​是​​​一个包含​​__init__.py​​​的​​文件夹​​​,代码、模块和包,它们三者的关系就是:“包”包含模块且至少包含一个​​__init__.py​​模块,模块包含代码。

简单来说,包就是文件夹,且该文件夹下必须有​​__init__.py​​​文件,该文件的内容可以为空。​​__init__.py​​用于标识当前文件夹是一个包。

Python--模块_python


Python--模块_浮点数_02


在包内目录下创建test.py

# test.py

import fun1
from package.fun2 import print2

fun1.print1()
print2()

3.2、包在多目录中使用

当你导入一个模块或者包的时候,Python解释器对模块位置的搜索顺序是:
(1)首先查找当前目录;
(2)如果不在当前目录,Python则会搜索​​​Shell​​​变量​​PYTHONPATH​​​下的每个目录;
(3)如果都找不到,Python就会查看默认路径。Unix系统下,默认路径一般为​​​/usr/local/lib/python/​​;

四、标准库

Python官方提供了很多包和模块,我们称之为标准库。Python标准库会随着Python解释器一起安装到你的电脑中,在此只是简单介绍一些较为实用的功能。

4.1、sys

sys模块的功能很多,提供了许多函数和变量来处理Python运行时环境的不同部分。

1、识别操作系统

import sys

print(sys.platform)

# 输出
# win32

系统

执行结果

Linux

‘linux’

Windows

‘win32’

Windows/Cygwin

‘cygwin’

Mac OS X

‘darwin’

2、处理命令行参数
​​​sys.argv​​​变量可以获取命令行的参数。​​argv​​是一个list类型的变量,它会返回在命令行中用户输入的参数,例如:

import sys

print(sys.argv)

3、退出程序
执行到主程序末尾,解释器会自动退出,如果需要中途退出程序,可以调用​​​sys.exit​​​函数,它带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对​​sys.exit​​的调用(0是正常退出,其他为异常)

import sys

if len(sys.argv) <= 1:
print("缺少参数")
sys.exit(1)
for arg in sys.argv:
print(arg)

如果直接执行该文件,则执行结果如下:

缺少参数

程序会提示“缺少参数”后退出程序;如果我们带上参数运行程序,该程序则会打印出所有的参数内容。

4、获取模块搜索路径
在​​​sys.path​​中存储了python结束其需要搜索的所有路径,并且我们可以通过该变量修改搜索模块的路径。

import sys

for path in sys.path:
print(path)

由于​​sys.path​​​是列表类型的变量,所以我们可以像修改列表一样修改​​sys.path​​变量来增加python解释器查找模块的路径,例如:

import sys

def print_path():
for path in sys.path:
print(path)

print("修改前")

print_path()
sys.path.append("c:\\")

print("修改后")

print_path()

5、查找已导入的模块
​​​sys.modules​​​是一个全局字典,该字典在Python启动后就加载到内存中。每当程序员导入新的模块时,​​sys.modules​​​就会自动记录该模块。当第二次导入该模块时,Python会直接到字典中查找,从而加快程序运行的速度。​​sys.modules​​拥有字典所拥有的一切方法,例如:

import sys

print(sys.modules.keys())
print(sys.modules.values())
print(sys.modules["os"])

4.2、os

Python的​​os​​模块封装了操作系统的文件和目录操作。

1、获取当前文件所在目录

import os

print(__file__)
print(os.path.dirname(__file__))

Python--模块_python_03


​__file__​​​是Python的内置变量,​​os.path.dirname(__file__)​​表示的是文件当前的位置。

2、获取当前路径以及切换当前路径

import os

print(os.getcwd())
os.chdir("c:\\")
print(os.getcwd())

Python--模块_搜索_04


​os.getcwd​​​可以获取当前执行程序的路径,​​os.chdir​​可以切换当前的路径。

3、重命名文件

import os

os.rename("before.txt","after.txt")

​rename​​​函数会将文件​​before.txt​​​重命名为​​after.txt​

4、查看指定的路径是否存在

import os

folder = os.path.exists("c:\\windows")
print(folder)

Python--模块_搜索_05


​os.path.exists​​可以判断目录或者文件是否存在,如果存在则返回“True”,反之则返回“False”。

5、判断给出的路径是否是一个文件

import os

folder = os.path.isfile("c:\\windows\\system32")
print(folder)

​os.path.isfile​​可以判断给出的路径是否是一个文件,如果不是文件或者文件不存在都会返回“False”,如果是文件则返回“True”。

6、判断给出的路径是否是一个目录

import os

folder = os.path.isdir("c:\\windows\\ststem32")
print(folder)

​os.path.isdir​​可以判断给出的路径是否是一个目录,如果不是目录或者目录不存在都会返回“False”,如果是目录则返回“True”。

7、获取系统环境变量

import os

for k,v in os.environ.items():
print(k,"=>",v)

8、创建单层目录

import os

os.mkdir("d:\\w01")

​os.mkdir​​方法只能创建一层目录,在有父目录的情况下创建子目录,如果父目录不存在则不能创建并输出错误。

9、创建多层目录

import os

os.makedirs("d:\\w01\\t1")

​os.makedirs​​​和​​os.mkdir​​​的用法完全一样,区别是​​os.makedirs​​可以创建多层目录,如果父目录不存在则先创建父目录。

4.3、math

1、math库中的两个常量
​​​math​​库中提供了两个常量供计算使用,包括圆周率和自然常数。

import math

print("圆周率:",math.pi)
print("自然常数",math.e)

2、math库中的运算函数
(1)向上取整

import math

print("1.7",math.ceil(1.7))

(2)向下取整

import math

print("1.7",math.floor(1.7))

(3)指数运算

import math

print("2^4",math.pow(2,4))

(4)对数运算(默认底数为e,可以使用第二个参数来改变对数的底数)

import math

print("log(3)",math.log(3))
print("log(100,10)",math.log(100,10))

(5)平方根计算

import math

print("sqrt(4)",math.sqrt(4))

(6)三角函数

import math

print("sin(pi/2)",math.sin(pi/2))
print("cos(pi)",math.cos(pi))
print("tan(0)",math.tan(0))

(7)角度和弧度互换

import math

print(math.degrees(math.pi)) # 弧度制转角度值
print(math.radians(90)) # 角度制转弧度制

4.4、random

  • 使用​​rand.seed(x)​​改变随机数生成器的种子seed。
  • ​random.random​​用于生成一个0-1的随机浮点数:0<= n < 1.0:

import random

print(random.random())

  • ​random.uniform​​用于生成一个指定范围内的随机浮点数:

import random

# 输出一个1到150之间的随机浮点数
print(random.uniform(1,150))

  • ​random.randint​​用于生成一个指定范围内的整数:

import random

print(random.randint(1,150))

  • ​random.choice​​会从给定的序列中获取一个随机元素:

import random

seq1 = (1,15,8,97,22)
seq2 = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]
print(random.choice(seq1))
print(random.choice(seq2))

  • ​random.shuffle​​用于将一个列表中的元素打乱:

import random

seq1 = list(range(1,10))
seq2 = ["星期日","星期一","星期二","星期三","星期四","星期五","星期六"]

print("打乱前")
print(seq1)
print(seq2)

random.shuffle(seq1)
random.shuffle(seq2)

print("打乱后")
print(seq1)
print(seq2)

​random.shuffle​​​会修改原来的序列,所以原来的序列必须是可修改的,因此元组等类型不能作为​​random.shuffle​​的参数使用。

五、安装第三方库

如果你使用的是Ubuntu系统,请确保已经安装了​​python 3-pip​​软件包。如果不确定或者未安装,请运算:

sudo apt install

如果你使用的是CentOS系统,请确保已经安装​​python 34-pip​​软件包。如果不确定或者未安装,请运算:

sudo yum install

一切准备就绪之后,就可以在终端输入:

pip3 --version

来确认我们安装的pip是否正常工作。请注意输入的是​​pip3​​​,而不是​​pip​​​,因为许多版本的操作系统尤其是Linux操作系统都会预装Python 2版本的​​pip​​​,使用​​pip3​​可以确保我们使用的是Python3版本的pip。

命令

功能

pip3 list

列出已安装的软件包

pip3 search 关键字

搜索软件包

pip3 install 软件包名字

安装软件包

pip3 uninstall 软件包名字

卸载指定的软件包

如果我们有许多第三方库需要安装,可以把需要安装的软件写入到一个纯文本文件(一般命名为requirements.txt)中,一行写一个软件包。例如:

Jinja2==2.8
Mako==1.0.4
Markdown==2.6.6
PyMsSQL==0.7.5
six==1.10.0

然后我们可以使用命令:

pip3 install

一次性向安装这些软件,方便又快速。

六、globals和locals函数

Python内置了两个函数–globals和locals,它们提供了基于字典的访问局部和全局变量的方式。

在理解这两个函数是,我们首先要了解一下Python中的名字空间(或称为命名空间namespace)概念,Python使用名字空间记录变量的轨迹。名字空间只是一个字典,它的键就是变量名,值就是变量的值。实际上,名字空间可以像Python的字典一样进行访问。

每个函数都有着自己的名字空间,叫做“局部名字空间”,它记录了函数的变量,包括函数的参数和局部定义的变量。
每个模块都拥有自己的名字空间,叫做“全局名字空间”,它记录了模块的变量,包括函数、类、其他导入的模块、模块级的变量和常量。
还有就是“内置名字空间”,任何模块均可以访问它,它存放着内置的函数和异常。

当一行代码要使用变量x的值时,Python会按照如下顺序到所有可用的名字空间中查找变量:
(1)局部名字空间–特指当前函数或类的方法。如果函数定义了一个局部变量x,Python将使用这个变量,然后停止搜索;
(2)全局名字空间–特指当前的模块。如果模块定义了一个名为x的变量、函数或类,Python将使用这个变量,然后停止搜索;
(3)内置名字空间–对每个模块都是全局的。作为最后的尝试,Python将假设x是内置函数或变量;

如果Python在这些名字空间中都找不到x,它将放弃查找并引发一个NameError的异常,同时传递"There is no variable named x"这样一条信息。

像Python中的许多内置函数一样,名字空间在运行时直接可以访问。但是,局部名字空间也可以通过内置的​​locals​​​函数来访问,全局名字空间可以通过内置的​​globals​​函数来访问。

local_var = locals().copy()

for k,v in local_var.items():
print(k,"=>",v)

Python--模块_搜索_06


locals()函数可以返回所有内置的本地变量。如果我们在文件中定义过任何东西,locals()函数也会返回。

from math import *

glocal_var = globals().copy()

for k,v in glocal_var .items():
print(k,"=>",v)

Python--模块_搜索_07


globals()函数可以返回所有模块级别的变量、函数等。


举报

相关推荐

python--通过zipfile模块压缩文件

python--循环

Python--类

python--集合

0 条评论