Python模块

模块概述

在Python中,模块(Module)是组织代码的重要方式,它能帮助开发者将代码分割成更小、更易于管理的单元,并促进代码复用性和可

维护性。一个模块就是一个包含Python定义和语句的文件。模块名就是文件名,通过模块,我们可以把相关的函数、类、变量等封装在

一起,从而实现功能上的分离和代码重用。我们重点要学习如何创建自定义模块,如何使用模块。

创建模块

只需创建一个以.py为扩展名的文件即可。例如,创建一个名为 mymodule.py 的文件:

age = 23
name = "python模块"

使用模块

可以通过 import 语句来导入模块中的内容。有两种主要的方式:

  1. 直接导入整个模块:直接导入法

  2. 从模块中导入特定的内容:跳跃式、贪婪式(跳跃式的一种简洁写法)

直接导入法

import mymodule

print(mymodule.age)
print(mymodule.name)
print(mymodule.version)

跳跃式

  1. 结合from关键字实现按需导入

    from mymodule import age, name
    
    print(age)
    print(name)

  2. 还可以给导入的模块或对象起别名,方便使用

    from mymodule import age, name as n
    
    print(n)

  3. 贪婪式

  4. 跳跃式的一种简洁写法

    from mymodule import *
    
    print(age)
    print(name)
    print(version)

if name == 'main':

if __name__ == '__main__': 是 Python 中一种常见的惯用法,用于检测当前模块是被直接运行还是被导入到另一个模块中。

这是一种控制代码执行的方式,确保某些代码块只在脚本直接执行时运行,而不是在作为模块被导入时执行。

这在编写可重用的模块和测试代码时特别有用的。

mymodule.py 文件

age = 23

if __name__ == '__main__':
    print(age)

 test.py 文件:

from mymodule import *

print(age)

所以它能帮助我们开发者更好地组织代码,使其既适合单独执行,也适合作为库的一部分被其他程序使用。

遵循这一使用方法可以让我们的代码更易于测试、维护和复用。

python库

Python 拥有丰富而强大的标准库第三方库,这些库极大地扩展了 Python 的功能,使其成为一种非常受欢迎的编程语言。

以下是 Python 中一些常见库的概述及其主要用途介绍

标准库

准库是 Python 解析器自带的一部分,无需额外安装。只要你安装了 Python解析器,就可以直接使用这些库。

经过长时间的发展和完善,标准库中的模块通常非常稳定,性能良好。

常见的标准库有:

  1. random:生成伪随机数以及进行随机选择等操作

  2. math:提供常见的数学函数

  3. time处理时间相关的函数,如获取当前时间戳、休眠等

第三方库

第三方库不是 Python 内置的,需要通过包管理工具单独安装,由开发者社区维护和支持,通常针对特定领域或问题提供解决方案

相比标准库,第三方库更新速度更快,能够迅速适应新技术和发展趋势。

常见的第三方库有:

  1. numpy:高效数值计算的基础库

  2. pandas:提供灵活的数据结构和数据分析工具

random

概述

random库是Python语言的一个标准库,用于产生各种分布的伪随机数序列。

random库采用梅森旋转算法生成伪随机数序列,可用于对随机性要求不高的大多数工程应用。

常用函数

random

作用:生成一个[0.01.0)之间的随机小数,无参数。

请注意这些函数每次执行后的结果可能是不一样的。

import random
print(random.random())

randint

作用:生成指定区间随机整数,randint(a,b),用于生成一个[a,b]之间的整数,要求a≤b。

import random

# 生成10-20之间的随机整数
res = random.randint(10, 20)

# ValueError
res = random.randint(20, 10)

uniform

作用:生成指定区间随机小数,uniform(a,b) ,用于生成一个[a,b]之间的随机小数。

import random

res = random.uniform(10, 20)
print(res)  # 生成10-20之间的随机小数

randrange

作用:指定步长生成对应随机数,randrange([start,] stop[,step] ) 用于生成 一 个[start,stop)之间的以step为步长的随机整数,

要求start≤stop,且有参数step时,start不可以缺省。

import random

res = random.randrange(10, 100, 5)
print(res)  # 都是步长为5的结果

res = random.randrange(10, 100)
print(res)  # 就是10-100之间随机数


res = random.randrange(10, 2)
print(res)  # start > stop

choice

作用:从指定随机数中随机,randchoice(seq) 用于从序列seq中随机选取一个元素。

import random

res = random.choice([10, 20, 30, 40, 50])
print(res)  


res = random.choice('I love python')
print(res)  


res = random.choice(['Python', 'VC', 'VB', 'Java'])
print(res) 

shuffle

作用:随机排列,shuffle(seq),用于将序列seq的顺序重新随机排列,并返回重新排列后的结果。

import random

s = [1, 2, 3, 4, 5]
random.shuffle(s)
print(s) 

sample

作用:用于从序列seq中随机选取k个元素组成新的序列

import random

# 从指定序列中 随机选取指定长度的随机数
res = random.sample([1, 2, 3, 4, 5], 3)
print(res)

math

概述

Python math 模块提供了许多对浮点数的数学运算函数。math 模块下的函数,返回值均为浮点数,除非另有明确说明。

数学常数

math库中的4个数学常数

常量描述
math.e返回欧拉数 (2.7182...)
math.inf返回正无穷大浮点数
math.nan返回一个浮点值 NaN (not a number)
math.piπ 一般指圆周率。 圆周率 PI (3.1415...)
import math

# 输出 e 的值
print(math.e)

# 输出正无穷大
print(math.inf)
# 输出负无穷大
print(-math.inf)

# 输出 nan
print(math.nan)

# 输出 nan 类型
print(type(math.nan))

# 输出 PI
print(math.pi)

 

常用函数

  1. math.floor()

    1. 将数字向下舍入到最接近的整数

  2. math.ceil(x)

    1. 将 x 向上舍入到最接近的整数

  3. math.degrees(x)

    1. 将角度 x 从弧度转换为度数。1弧度约为57.3°

  4. math.radians(x)

    1. 将角度 x 从度数转换为弧度

  5. math.fabs(x)

    1. 返回 x 的绝对值

  6. math.factorial(x)

    1. 返回 x 的阶乘。 如果 x 不是整数或为负数时则将引发 ValueError

  7. math.fmod(x, y)

    1. 返回 x/y 的余数

  8. math.fsum(iterable)

    1. 返回可迭代对象 (元组, 列表, 等)中的元素总和,是浮点值

  9. math.sqrt(x)

    1. 返回 x 的平方根

  10. math.pow(x, y)

    1. 将返回 x 的 y 次幂

  11. math.prod(iterable)

    1. 计算可迭代对象中所有元素的积

      import math
      
      print(math.floor(10.1))
      print(math.ceil(10.1))
      print(math.degrees(1))
      print(math.radians(57.29577951308232))
      print(math.fabs(-1))
      
      print(math.factorial(4))
      print(math.fmod(4, 3))
      print(math.fsum((1, 2, 3, 4)))
      print(math.sqrt(8))  # 2.82
      print(math.pow(2, 3))
      print(math.prod([1, 2, 3, 4]))

Pydantic

概述

Pydantic 是一个Python库,用于数据验证和设置管理。它最初是为了弥补Python标准库在数据验证方面的不足而设计的。

Pydantic是在运行时验证类型是否有问题,Pydantic 会在运行时抛出错误。

安装

pip install pydantic

 

问题描述

dataclass:Python 3.7 引入的标准库特性,目的是简化创建只用于存储数据的类,减少样板代码。内置提供了init实现

from dataclasses import dataclass


@dataclass
class Person:
    name: str
    age: int


p = Person(100, 23)
print(p)

上述代码在编辑器中是可以正常运行的,而且执行python指令去运行py文件也会正常运行

python main.py

但是如果我们使用mypy指令去运行py文件则会提示赋值类型错误。

mypy 是一个用于 检查Python 的静态类型检查工具,它可以帮助我们在不运行代码的情况下发现类型相关的错误。

静态类型检查能够在开发过程中尽早捕获类型错误,提高代码的可靠性和可维护性。

安装

pip install mypy

执行文件

mypy main.py
main.py:10: error: Argument 1 to "Person" has incompatible type "int"; expected "str"  [arg-type]
Found 1 error in 1 file (checked 1 source file)

Pydantic数据验证功能

Pydantic默认自带数据验证功能,如果name传递的类型不是str则运行会报错

from pydantic import BaseModel


class Person(BaseModel):
    name: str
    age: int

# BaseModel会内部提供init函数,并且必须关键字参数传递
# 这时我们给name传递int类型,运行则会报错。
p = Person(name=100, age=23)
print(p)

邮箱验证

需要安装email-validator,这样EmailStr才会生效

pip install email-validator 或者去 pycharm中安装

可以校验邮箱格式是否正确

from pydantic import BaseModel, EmailStr


class Person(BaseModel):
    name: str
    age: int
    email: EmailStr


p = Person(name="100", age=23, email="1024@163.com")
print(p)

自定义验证

使用field_validator装饰器 对指定的字段进行验证

如果验证不满足需求,可以自定义验证规则

可以要求年龄必须是正数

from pydantic import BaseModel, field_validator


class Person(BaseModel):
    name: str
    age: int

    # 对age字段进行验证,要求是类方法
    @field_validator("age")
    def validate_age(cls, value):
        if value < 0:
            raise ValueError(f"年龄必须是正数: {value}")
        return value


p = Person(name="zs", age=-10)
print(p)

Pydantic转换为JSON

from pydantic import BaseModel


class Person(BaseModel):
    name: str
    age: int
    wedding: bool


p = Person(name="zs", age=10, wedding=True)
print(p.model_dump_json())  # 返回 JSON 格式的字符串。
print(p.model_dump())  # 返回 Python 字典或者列表

# json_str = '{"name": "John", "age": 25, "wedding": true}'
json_str = p.model_dump_json()
person = Person.model_validate_json(json_str)
print(person)
print(person.age)

# model_validate_json 可以将JSON字符串转换为Person对象

dataclass 和 pydantic 区别

  1. 设计目的

    1. dataclass:Python 3.7 引入的标准库特性,目的是简化创建只用于存储数据的类,减少样板代码。

    2. pydantic:第三方库,专注于数据验证和设置管理,保证数据符合特定的类型和约束。

  2. 数据验证

    1. dataclass:本身不提供数据验证功能,虽然可以通过类型注解声明字段类型,但 Python 解释器不会强制类型检查。

    2. pydantic:有强大的数据验证功能,创建模型实例时会自动验证数据类型和约束条件,不符合要求会抛出异常。

  3. 类型支持

    1. dataclass:支持 Python 内置类型和自定义类型,但没有额外的类型处理功能。

    2. pydantic:除了基本类型,还支持更复杂的类型,如 EmailStr、field_validator 等。

  4. 序列化和反序列化

    1. dataclass:没有内置的序列化和反序列化机制。

    2. pydantic:提供了方便的序列化和反序列化方法,如 model_dump、model_dump_json、parse_raw 等。

time

概述

time是Python提供的用于处理时间的标准库。

time提供了一系列操作时间的函数,具有系统级精确计时器的计时功能,可以实现程序计时、分析程序性能等与时间相关的功能。

类别分类

time库函数的功能主要分为三类:时间处理、时间、格式化和计时。

  1. 时间处理功能函数主要包括:

    1. time.time()

    2. time.gmtime()

    3. time.localtime()

    4. time.ctime()

  2. 时间格式化功能函数主要包括:

    1. time.mktime()

    2. time.strftime()

    3. time.strptime()

  3. 计时功能函数主要包括:

    1. time.sleep()

时间处理函数

时间处理功能函数主要包括:

  1. time.time()

    1. 获得当前时间的时间戳

  2. time.gmtime()

    1. UTC时间

  3. time.localtime()

    1. 本地时间

  4. time.ctime()

    1. 返回一个表示本地时间的字符串。

      import time
      
      print(time.time())
      # 获得当前时间的时间戳(1970纪元后经过的浮点秒数)
      # 所谓时间戳,即从格林威治时间1970年01月01日00分00秒
      # (北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
      
      print(time.gmtime())  # 返回的是UTC时间(格林威治标准时间)
      
      print(time.localtime())  # 如果你期望得到本地时间,应该使用 time.localtime()。
      
      print(time.ctime())  # 返回一个表示本地时间的字符串。 

时间格式化函数

时间格式化功能函数主要包括:

  1. time.mktime()

    1. mktime()函数将struct_time(或包含9个元素的元组对应于struct_time)作为参数,并返回自当地时间的纪元以来经过的秒数。

      import time
      
      t = (1970, 1, 1, 8, 1, 0, 4, 362, 0)
      
      local_time = time.mktime(t)
      print(local_time)

      time.strftime()

    2. 字符串格式化,该strftime()函数以struct_time(或与其对应的元组)作为参数,并根据所使用的格式代码返回表示它的字符串。

      这里%Y,%m,%d,%H等都是格式代码:

      %Y - 年

      %m - 月

      %d - 日

      %H - 小时

      %M - 分钟

      %S - 秒

      import time
      
      named_tuple = time.localtime() 
      print(named_tuple)  # 我们要把年月日等信息 按照我们的格式显示
      time_string = time.strftime("%Y-%m-%d %H:%M:%S", named_tuple)
      print(time_string)

      time.strptime()

    3. 该strptime()函数解析表示时间的字符串并返回时间格式

      import time
      
      time_string = "2024-7-2"
      result = time.strptime(time_string, "%Y-%m-%d")

计时功能函数

计时功能函数主要包括:

  1. time.sleep()

    1. sleep()函数在给定的秒数内暂停(延迟)当前线程的执行。

      import time
      
      print("这是立即打印。")
      time.sleep(2.4)
      print("这是2.4秒后打印的。")

 

字符串格式化

概述

如果有大量的字符串拼接需求,可以使用字符串模版来实现,字符串模板是一个由字符串和槽组成的字符串,用来控制字符串和变量的显

示效果,其中槽用大括号“{}”表示,对应format()方法中用逗号分隔的参数。

str = "姓名是:{},年龄是:{}".format("zs", 18)

 

匹配

按位置顺序匹配

"姓名是:{},年龄是:{}".format("zs", 18)

按自定义序号顺序匹配

str = "名字是:{1}, 年龄是:{0}".format(18, "Tom")  # 带数字号,默认18 是0,tom是1

str = '{0} {1} {0}'.format('apple', '苹果')  # 打乱顺序,同一个参数填充多次

按关键字匹配

str = "名字是:{name}, 年龄是:{age}".format(age=18, name="Tom") 
print(str)

格式控制

小数点保留

print("{:.2f}".format(12345.67890))  # 小数点保留2位
print("{:25.2f}".format(12345.67890))  # 数字默认右对其 并小数点保留2位
print("{:.2}".format("Python"))  # 字符串默认左对其 并保留2个字符

占位符

str = "租用%s的天数是%.2f,价格是%d" % ("benz", 2, 100)
print(str)

format

num = 100
name = 'zs'
str = f"正确的数字是{num}。名字是:{name}"
print(str)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gao_xu_sheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值