python 模块和包管理
Posted Hub-Link
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 模块和包管理相关的知识,希望对你有一定的参考价值。
一、模块导入
导入模块,其实就是导入第三方模块,我们直接调用这个第三方模块里面的方法即可。导入模块需要使用关键字 import
import math
math是Python标准库中的一个模块,用来进行数学运算
## 计算一个数的平方根
math.sqrt(4)
我们可以使用dir函数来查看math模块里的所有函数
dir(math)
我们也可以使用from … import … 这种语句来具体导入某一个子模块或函数
from math import sqrt
sqrt(4)
这种方式更精确的导入某个函数,使用起来更方便, 但要注意重名的问题。如果说我们的代码本来就有一个叫sqrt的函数,那我们可以使用 as 关键字来给模块起一个别名。
from math import sqrt as squarte
def sqrt(num): ## 我们自定义的函数
pass
squarte(4) # 2
有时候需要一次性导入多个模块
import sys, os
from math import sqrt, pow
二、自定义模块
有些时候第三方的模块不能满足我们自己的业务需求,这个时候我们就可以自定义模块
我们以一个综合案例“电商购物车”为例,实际的文件结构应该是这样的
init.py,这是一个空文件,它的文件名看起来很奇怪,这是Python规定的命名规范,只要目录有一个名为__init__.py的文件,则将这个目录视为包(package)
main.py作为项目的入口文件,我们实际运行的时候就是从它启动
1、main.py代码
from shopcart.cart import Cart
from shopcart.goods import Goods
if __name__ == '__main__':
g1 = Goods('iPhone 11', 6000, 0.9)
g2 = Goods('U盘32G', 100, 0.8)
g3 = Goods('华为P40', 5000)
cart = Cart()
cart.add(g1)
cart.add(g2, 3)
name 表示当前文件所在模块的名称,模块可以通过检查自己的 name 来得知是否运行在main 作用域中,这使得模块可以在作为脚本运行时条件性地执行一些代码,而在被 import 时不会执行。
2、cart.py代码
class Cart:
"""购物车"""
def __init__(self):
self.cart =
self.goods_list = []
def add(self, goods, num=1):
"""向购物车中添加商品"""
if goods in self.goods_list:
self.cart[goods.id] = self.cart[goods.id] + num
else:
self.goods_list.append(goods)
self.cart[goods.id] = num
print(goods.id+" 商品添加购物车成功.")
3、goods.py代码
class Goods:
"""商品类"""
id_count = 0
@classmethod
def generate_id(cls):
cls.id_count += 1
return cls.id_count
def __init__(self, name, price, discount=1):
self.id = str(self.generate_id()).zfill(5)
self.name = name
self.price = price
self.discount = discount
def calc_price(self):
"""计算商品打折后的实际价格"""
return self.price * self.discount
三、常用内置模块
1、os - 操作系统接口
os 模块提供了一种使用与操作系统相关的功能的便捷式途径
# 获取当前目录的路径
os.getcwd()
# 创建指定目录
os.mkdir(path)
# 与 mkdir() 类似,但会自动创建到达最后一级目录所需要的中间目录。
os.makedirs(path)
# 返回一个列表,该列表包含了 path 中所有文件与目录的名称。
os.listdir()
另一个很常用的子模块就是os.path,它提供了常用的路径操作。
# 显示当前目录的绝对路径
os.path.abspath('./')
os.path.abspath("__file__")
在大部分操作系统中,一般用 . 表示当前目录,用 … 表示父级目录
相对路径:相对于当前目录的路径
绝对路径:以根目录为开始的路径(windows和Mac、Linux的根目录不同)
目录分隔符:windows 是 \\ , Mac 和 Linux中是 /
# 如果 path 是 现有的 目录,则返回 True。
os.path.isdir(path)
# 如果 path 是 现有的 常规文件,则返回 True。
os.path.isfile()
# 目录分隔符
os.sep
# 合理地拼接一个或多个路径部分。
os.path.join(path, *paths)
# 返回路径 path 的目录名称
os.path.dirname("/tmp/test.txt") # '/tmp'
# 返回路径 path 的基本名称,文件名或是最后一级的目录名
os.path.basename("/tmp/test.txt") # 'test.txt'
os.path.basename("/tmp/test") # 'test'
2、sys -系统相关参数及函数
- sys.path 函数: 它返回的是一个列表,包含了若干个路径,它表示的是Python查找包的路径顺序,有一个空字符串,它表示当前目录
- sys.argv 函数: 表示启动的时候传递给Python脚本的命令行参数
import sys
if __name__ == '__main__':
print("Hello", end=' ')
if len(sys.argv) > 1:
print(' '.join(sys.argv[1:]))
print(sys.argv)
上述是一个Python脚本 hello.py 的代码,现在我们试着用不同的方式启动它
python hello.py
python hello.py Mike
python hello.py Mr Mike
可以看到sys.argv是一个列表,它的第一个元素就是脚本的文件名。所以传递它的启动参数,都会放在列表的后面。我们可以使用这种方式接收用户传递的参数。
3、random - 生成随机数
准确的说是生成伪随机数,这是一个数学问题。默认random模块会根据当前的系统时间作为随机数种子,所以可以保证生成的随机数不会重复。
# 生成一个随机浮点数,范围[0.0, 1.0)
random.random()
# 生成1到100之间的随机整数,包括1和100
random.randint(1, 100)
# 从序列中随机抽出一个元素
random.choice(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
# 从序列中随机抽出k个元素,注意抽出来的元素可能会重复
random.choices(['a', 'b', 'c', 'd', 'e', 'f', 'g'], k=2)
# 跟choices函数类似,但它是不重复的随机抽样
random.sample(['a', 'b', 'c', 'd', 'e', 'f', 'g'])
# 将一个序列随机打乱,注意这个序列不能是只读的
lst = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
random.shuffle(lst)
以上是关于python 模块和包管理的主要内容,如果未能解决你的问题,请参考以下文章