Python——模块

💦 模块

定义重复利用的代码的文件被称为模块。模块中定义的代码可以被导入到另一个模块或者主模块中。

其中,模块就是一个包含了python定义和声明的“ .py ”文件。例如我们定义一个“ fib.py ”的文件,内容如下:

def fib1(n):
    a = 2
    b = 2
    while b < n:
        print(b)
        b *= 2

def fib2(n):
    result = []
    a = 2
    b = 2
    while b < n:
        result.append(b)
        b *= 3
    return result

☁️ 使用模块

模块也是对象,所以调用模块中的内容和调用对象中的内容的方法是一样的。首先,我们需要在同级目录下再另建一个文件test.py,如下图👇:
在这里插入图片描述
然后我们再进入到test.py文件中去调用fib.py模块,例如👇:

import fib
fib.fib1(20)
print(fib.fib2(20))
#2
#4
#8
#16
#[2,6,18]

☁️ __name__变量

模块的模块名可通过全局变量“__name__”来获得。例如(此时我们还是在test.py中执行)👇:

import fib
print(fib.__name__)
print(__name__)
#fib
#__main__

可以看到,fib的“__name__”打印出来的是fib,但是第二个print也就是打印本文件的“__name__”却是“__main__”。

在python中,“__name__”是当前模块名,如果当前模块被直接运行,那么此时它的模块名就是“__main__”。(就像我们在test.py模块中直接运行它)。所以,我们在定义模块时,可以通过看当前的“__name__”变量的值是否为“__main__”来判断当前文件是被直接运行还是作为模块被导入。例如(在test中)👇:

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

☁️ dir函数

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

import fib
print(dir(fib))
print(dir())
#['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib1', 'fib2']
#['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib']

从执行结果可以看到一些内置变量,也可以看到在fib中定义的两个函数fib1和fib2。

💦 包

代码、模块、包它们三者的关系是:“包”包含模块且至少包含一个“__init__.py”文件,模块包含代码。

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

包可以在python中新建,如下图👇:
在这里插入图片描述
现在我们要来使用包,创建包后,需在它的目录下另外创建3个文件,一定要包含__init__.py,如下图👇:在这里插入图片描述
fun1.py中的代码为:

def print1():
	print("fun1")

fun2.py中的代码为:

def print2():
	print("fun2")

__inti__.py中的代码为:

if __name__ == "__main__":
	print("作为主程序运行")
else:
	print("package 初始化")

然后我们需要在与Package1同级目录下创建一个文件来调用这个包,如下图👇:
在这里插入图片描述
这里创建的是一个work.py来调用包。work.py中的代码为:

from Package1.fun1 import print1
from Package1.fun2 import print2

print1()
print2()
#package 初始化
#fun1
#fun2

💦 标准库

Python官方提供了不少包和模块,我们称之为标准库。下面介绍一些常用的标准库中的模块。

☁️ sys

s y s sys sys模块的功能很多,这里介绍一些比较实用的功能。 s y s sys sys模块提供了许多函数和变量来处理python运行时环境的不同部分。

  1. 识别操作系统(sys.platform)
import sys
print(sys.platform)
#win32
  1. 处理命令行参数(sys.argv)
    s y s . a r g v sys.argv sys.argv变量可以获取命令行的参数。 a r g v argv argv是一个list类型的变量,它会返回在命令行中用户输入的参数。
    详情可以点击下面链接,来源:CSDN博主——流动的风与雪。
    http://t.csdn.cn/s20Y8

  2. 退出程序(sys.exit)
    执行到主程序末尾,解释器会自动退出,如果需要中途退出程序,可以调用 s y s . e x i t sys.exit sys.exit函数,它带有一个可选的整数参数返回给调用它的程序,表示你可以在主程序中捕获对 s y s . e x i t sys.exit sys.exit的调用。(参数0表示正常退出,其它为异常)。例如👇:

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

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

#缺少参数
  1. 获取模块搜索路径(sys.path)
    例如:
import sys

for path in sys.path:
    print(path)

执行结果如下:
在这里插入图片描述
❗️:不同的环境下执行结果可能不一样。

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

import sys

sys.path.append("c:\\")
for path in sys.path:
    print(sys)

此时调用“import”来导入模块时,python解释器会去“c:\”目录中查找模块。

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

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

输出如下:
在这里插入图片描述
后面还有很多…

☁️ os

python中的os模块封装了操作系统的文件和目录操作。下面介绍一些常见的方法。

  1. 获取当前文件所在目录
import os
print(__file__)
#D:/pycharm/pythonProject1/test.py
print(os.path.dirname(__file__))
#D:/pycharm/pythonProject1

__file__是python的内置变量,os.path.dirname(__file__)表示的是文件当前所在文件夹的位置。

  1. 获取当前路径以及切换当前路径
import os
print(os.getcwd())
#D:\pycharm\pythonProject1
os.chdir("c:\\")
print(os.getcwd())
#c:\

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

  1. 重命名文件
import os
os.rename("test.py","test1.py")

上面代码将我们原来名为“test.py”的文件改为“test1.py”。

  1. 查看指定的路径是否存在
import os
a = os.path.exists("D:\\pycharm\\pythonProject1\\test1.py")
print(a)
#True

存在返回 T r u e True True,否则返回 F a l s e False False

  1. 判断给出的路径是否为一个文件
import os
a = os.path.isfile("D:\\pycharm\\pythonProject1\\test.py")
print(a)
#False

这里因为我们前面更改了名字,所以返回 F a l s e False False

  1. 判断所给出的路径是否为一个目录
import os
a = os.path.isdir("D:\\pycharm\\pythonProject1\\test.py")
print(a)
#False
b = os.path.isdir("D:\\pycharm\\pythonProject1")
print(b)
#True
  1. 创建单层目录
import os
os.mkdir("d:\\test1111111")

在这里插入图片描述

位置就能找到我们创建的目录了。但是os.mkdir函数只能创建一层目录,在有父目录的情况下创建子目录,如果父目录不存在则不能创建并输出错误。

  1. 创建多层目录
import os
os.makedirs("d:\\test2\\test3")

在这里插入图片描述
——————————————————————————————
在这里插入图片描述
这时我们点进test2就会发现里面还有一个目录test3。

☁️ math

下面简单介绍几个math库中的函数。

  1. 两个常量
import math
print(math.pi)
#3.141592653589793
print(math.e)
#2.718281828459045
  1. 指数运算
import math
print(math.pow(2,3))
#8.0
  1. 对数计算
import math
print(math.log(math.e))
#1.0
print(math.log(100,10))
#2.0

该函数默认底数为e,可以实用第二个参数来改变对数的底数。

  1. 三角函数计算
import math
print(math.sin(math.pi/2))
#1.0
print(math.cos(0))
#1.0

☁️ random

  1. 0~1之间的随机浮点数
import random
print(random.random())
#0.9822369992491721
#0.5783076696174532
#...
  1. 指定范围内的浮点数
import random
print(random.uniform(1,10))
#5.49485532264801
#9.106030260288195
#...
  1. 指定范围内的整数
import random
print(random.randint(1,10))
#1
#5
#...
  1. 从给定的序列中随机获得一个元素
import random
a = ["hello",1,2,"你好"]
print(random.choice(a))
#hello
#2
#...
  1. 将一个列表中的元素打乱
import random
a = list(range(1,10))
print(random.shuffle(a)) #注意,该函数没有返回值
#None
import random
a = [1,2,3,4]
random.shuffle((a))
print(a)
#[2,3,1,4]

❗️:这个函数会修改原来的序列,所以原来的序列必须是可修改的,因此元组等类型不能作为该函数的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值