python3高级特性

1. 装饰器

装饰器是 Python 的一种高阶函数,它可以在不修改函数内部代码的情况下,给函数增加额外的功能。

案例:记录函数执行时间的装饰器

import time  
  
def timing_decorator(func):  
    def wrapper(*args, **kwargs):  
        start_time = time.time()  
        result = func(*args, **kwargs)  
        end_time = time.time()  
        print(f"Function {func.__name__} took {end_time - start_time:.6f} seconds to execute.")  
        return result  
    return wrapper  
  
@timing_decorator  
def my_function():  
    time.sleep(1)  # 模拟耗时操作  
    print("Function executed.")  
  
my_function()

效果图

2. 迭代器

迭代器是一个可以记住遍历位置的对象,它可以从头到尾访问数据集合的元素。

案例:使用迭代器遍历列表

my_list = [1, 2, 3, 4, 5]  
my_iter = iter(my_list)  
print(next(my_iter))  # 输出: 1  
print(next(my_iter))  # 输出: 2  
# ... 可以继续调用 next() 直到 StopIteration 异常

效果图

3. 生成器

生成器是一种特殊的迭代器,它使用 yield 关键字来产生值,并且只在需要时计算下一个值,这可以节省内存。

案例:生成斐波那契数列的生成器

def fibonacci(n):  
    a, b = 0, 1  
    while a < n:  
        yield a  
        a, b = b, a + b  
  
# 使用生成器  
for num in fibonacci(10):  
    print(num)

效果图

4. 高阶函数

高阶函数是接受函数作为参数或返回函数作为结果的函数。

案例:高阶函数实现函数映射

def apply_func(func, lst):  
    return [func(x) for x in lst]  
  
def square(x):  
    return x ** 2  
  
numbers = [1, 2, 3, 4, 5]  
squared_numbers = apply_func(square, numbers)  
print(squared_numbers)  # 输出: [1, 4, 9, 16, 25]

效果图

5. 匿名函数

匿名函数(lambda 函数)是没有名称的简短函数。

案例:使用匿名函数对列表进行排序

my_list = [(1, 'a'), (2, 'c'), (3, 'b')]  
my_list.sort(key=lambda x: x[1])  # 根据元组的第二个元素排序  
print(my_list)  # 输出: [(1, 'a'), (3, 'b'), (2, 'c')]

效果图

6. 偏函数

偏函数是固定了某些参数的新函数,返回一个新函数,这个新函数可以调用原函数,且原函数的某些参数值始终不变。

案例:使用偏函数设置默认参数

from functools import partial  
  
def greet(name, greeting="Hello"):  
    print(f"{greeting}, {name}!")  
  
greet_with_hi = partial(greet, greeting="Hi")  
greet_with_hi("Alice")  # 输出: Hi, Alice!

效果图

7. 切片

切片用于在序列类型(如列表、元组、字符串)上选择一段连续的元素。

案例:使用切片选择字符串中的一部分

s = "Hello, World!"  
substring = s[7:12]  # 选择索引7到11的字符(不包括12)  
print(substring)  # 输出: World

效果图

8. 列表解析式

列表解析式是一种简洁创建列表的方式。

案例:使用列表解析式创建平方数列表

numbers = [1, 2, 3, 4, 5]  
squares = [x**2 for x in numbers]  
print(squares)  # 输出: [1, 4, 9, 16, 25]

效果图

9 元组拆包

元组拆包是将元组中的元素分别赋值给不同的变量。这在处理返回多个值的函数或接收多个值的函数参数时非常有用。

案例:交换两个变量的值

a, b = 1, 2  
print(f"Before swap: a = {a}, b = {b}")  
  
# 使用元组拆包交换值  
a, b = b, a  
print(f"After swap: a = {a}, b = {b}")  # 输出: After swap: a = 2, b = 1

效果图

10 多进程

多进程是指操作系统中同时运行多个进程,每个进程都拥有独立的内存空间和系统资源。Python的multiprocessing模块支持多进程编程。

案例:使用多进程计算平方数

from multiprocessing import Process  
  
def square(n):  
    print(f"The square of {n} is {n**2}")  
  
if __name__ == "__main__":  
    processes = []  
    for i in range(5):  
        p = Process(target=square, args=(i,))  
        processes.append(p)  
        p.start()  
  
    for p in processes:  
        p.join()  # 等待所有进程完成

效果图

11 进程通信

进程通信是指在不同进程之间传递信息或数据。Python的multiprocessing模块提供了QueuePipe等方式来实现进程间通信。

案例:使用Queue进行进程通信

from multiprocessing import Process, Queue  
  
def worker(q):  
    result = q.get()  # 从队列中获取任务  
    print(f"Processing {result}")  
    q.put(result * 2)  # 将处理结果放回队列  
  
if __name__ == "__main__":  
    q = Queue()  
    q.put(10)  # 向队列中添加任务  
  
    p = Process(target=worker, args=(q,))  
    p.start()  
    p.join()  
  
    result = q.get()  # 从队列中获取处理结果  
    print(f"Result: {result}")  # 输出: Result: 20

效果图

12 进程锁

进程锁用于同步多个进程对共享资源的访问,以避免竞态条件。multiprocessing模块提供了Lock来实现进程锁。

案例:使用进程锁保护共享资源

from multiprocessing import Process, Lock, Value  
  
def increment(lock, counter, n):  
    for _ in range(n):  
        with lock:  # 使用with语句自动管理锁  
            counter.value += 1  
  
if __name__ == "__main__":  
    lock = Lock()  
    counter = Value('i', 0)  # 创建一个共享整数计数器  
  
    processes = []  
    for _ in range(10):  
        p = Process(target=increment, args=(lock, counter, 1000))  
        processes.append(p)  
        p.start()  
  
    for p in processes:  
        p.join()  
  
    print(f"Final counter value: {counter.value}")  # 输出应该接近10000

效果图

13 进程池

进程池用于限制同时运行的进程数量,这对于管理系统资源非常有用。multiprocessing.Pool类提供了进程池的实现。

案例:使用进程池计算平方数列表

from multiprocessing import Pool  
  
def square(n):  
    return n ** 2  
  
if __name__ == "__main__":  
    with Pool(processes=4) as pool:  # 创建一个包含4个进程的进程池  
        numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  
        results = pool.map(square, numbers)  # 使用进程池计算平方数  
  
    print(results)  # 输出: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

效果图

14 多线程

多线程是指在同一个进程中运行多个线程,共享进程的内存空间和系统资源。Python的threading模块支持多线程编程。

案例:使用多线程打印数字

import threading
import time
​
​
# 打印奇数的线程函数
def print_odd_numbers():
    for i in range(1, 6, 2):
        time.sleep(0.5)  # 模拟耗时操作
        print(i)
​
    # 打印偶数的线程函数
​
​
def print_even_numbers():
    for i in range(2, 6, 2):
        time.sleep(0.5)  # 模拟耗时操作
        print(i)
​
    # 创建线程
​
​
odd_thread = threading.Thread(target=print_odd_numbers)
even_thread = threading.Thread(target=print_even_numbers)
​
# 启动线程
odd_thread.start()
even_thread.start()
​
# 等待线程结束
odd_thread.join()
even_thread.join()
​
print("All threads have finished.")

效果图

15 os模块

简单介绍os模块提供了很多与操作系统交互的功能,如文件操作、目录操作、环境变量获取等。它允许Python程序执行系统相关的操作,如创建和删除文件、读取环境变量等。

案例:列出当前目录下的所有文件和文件夹

import os  
  
# 列出当前目录下的所有文件和文件夹  
for item in os.listdir('.'):  
    print(item)

效果图

17 datetime模块

简单介绍datetime模块提供了日期和时间的类,用于解析、格式化、操作日期和时间。该模块中的datetime类可以表示一个具体的日期和时间,支持加减运算以及日期时间的比较等。

案例:获取当前日期和时间,并计算一天后的日期

from datetime import datetime, timedelta  
  
# 获取当前日期和时间  
now = datetime.now()  
print("Current date and time:", now)  
  
# 计算一天后的日期  
one_day_later = now + timedelta(days=1)  
print("Date one day later:", one_day_later)

效果图

18 time模块

简单介绍time模块主要用于处理时间,如获取当前时间戳、将时间戳转换为格式化字符串等。它还提供了程序控制的功能,如sleep用于让程序暂停执行一段时间。

案例:获取当前时间戳,并转换为格式化字符串

import time  
  
# 获取当前时间戳  
timestamp = time.time()  
print("Current timestamp:", timestamp)  
  
# 将时间戳转换为格式化字符串  
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))  
print("Formatted time:", formatted_time)

效果图

19 base64模块

简单介绍base64模块提供了Base64编码和解码的功能,通常用于在文本数据中表示、传输、存储二进制数据。它常用于电子邮件的传输编码,以及在XML中存储复杂数据。

案例:对字符串进行Base64编码和解码

import base64  
  
# 对字符串进行Base64编码  
encoded_str = base64.b64encode(b"Hello, World!")  
print("Encoded string:", encoded_str)  
  
# 对Base64编码的字符串进行解码  
decoded_str = base64.b64decode(encoded_str)  
print("Decoded string:", decoded_str.decode('utf-8'))

效果图

20 copy模块

简单介绍copy模块提供了浅拷贝和深拷贝的功能,用于复制对象。浅拷贝只复制对象本身,而不复制对象内部的子对象;深拷贝则递归地复制对象及其所有子对象。

案例:使用浅拷贝和深拷贝复制列表

import copy  
  
# 原始列表  
original_list = [1, [2, 3], 4]  
  
# 浅拷贝列表  
shallow_copy_list = copy.copy(original_list)  
print("Shallow copy:", shallow_copy_list)  
  
# 修改浅拷贝列表中的子列表,原始列表也会受到影响  
shallow_copy_list[1].append(5)  
print("Original list after shallow copy modification:", original_list)  
  
# 深拷贝列表  
deep_copy_list = copy.deepcopy(original_list)  
print("Deep copy:", deep_copy_list)  
  
# 修改深拷贝列表中的子列表,原始列表不会受到影响  
deep_copy_list[1].append(6)  
print("Original list after deep copy modification:", original_list)

效果图

21 collections模块

简单介绍collections模块提供了一些特殊的容器数据类型,它们为常见的数据结构提供了更高级别的接口,如namedtuple(具有名称的元组)、deque(双端队列)、Counter(计数器)、OrderedDict(有序字典)和defaultdict(带有默认值的字典)等。

案例OrderedDict是一个字典子类,它保持元素被插入时的顺序。

from collections import OrderedDict
​
# 创建一个OrderedDict对象
od = OrderedDict()
​
# 添加键值对
od['first'] = 1
od['second'] = 2
od['third'] = 3
​
# 遍历OrderedDict,保持插入顺序
for key, value in od.items():
    print(key, value)
# 输出:
# first 1
# second 2
# third 3

效果图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/555206.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

lua学习笔记18(面相对象之多态)

print("*****************************面相对象多态*******************************") --相同方法不同执行逻辑 object{} object.id1 function object:new()local obj{}self.__indexself setmetatable(obj,self)return obj end function object:subClass(className)…

PLC程序远程上下载

在工业自动化领域&#xff0c;PLC&#xff08;可编程逻辑控制器&#xff09;扮演着至关重要的角色。然而&#xff0c;传统的PLC程序上传与下载方式往往受限于物理距离和现场环境&#xff0c;给工程师们带来了诸多不便。如今&#xff0c;随着远程技术的不断发展&#xff0c;PLC程…

基于XML配置bean(一)

文章目录 1.获取bean的两种方式1.通过id获取bean&#xff08;前面用过&#xff09;2.通过类型获取bean&#xff08;单例时使用&#xff09;1.案例2.代码1.beans.xml2.SpringBeanTest.java3.结果 3.注意事项 2.三种基本依赖注入方式1.通过属性配置bean&#xff08;前面用过&…

Eureka基础介绍和使用

目录 一.理论基础 二.父项目 2.1 新建父项目 2.2 管理依赖 三.子项目 3.1 新建子项目 3.2 注册中心Server依赖和启动类和配置文件 3.3 生产者Client 依赖和启动类和配置文件 3.5 消费者Custmer依赖和配置类、启动类和配置文件 四.心跳 五.公共资源项目 5.1新建实体…

BUG:vue表单验证校验不报错,必填都有信息,就是不能正常往下进行

vue表单验证未报错却出现异常 框架bug场景解决办法 框架 UI&#xff1a;element-UI 前端&#xff1a;vue2 bug场景 正常表单里面&#xff0c;有的信息要求必填或者加了一些限制&#xff0c;作为校验验证&#xff0c;只有走到校验才会执行其他行为&#xff0c;比如调用保存接…

labelimg安装和使用(解决闪退问题)

&#x1f308;个人主页&#xff1a;Rookie Maker &#x1f525; 系列专栏&#xff1a;计算机视觉 &#x1f3c6;&#x1f3c6;关注博主&#xff0c;随时获取更多关于IT的优质内容&#xff01;&#x1f3c6;&#x1f3c6; &#x1f600;欢迎来到我的代码世界~ &#x1f601; 喜…

C++修炼之路之list--C++中的双向循环链表

目录 前言 一&#xff1a;正式之前先回顾数据结构中的双向循环链表 二&#xff1a;list的简介 三&#xff1a;STL中list常用接口函数的介绍及使用 1.构造函数接口 2.list迭代器 范围for 3.数据的修改接口函数 4.list容量操作函数 5.list的迭代器失效 6.演示代码和测…

【网络编程】Web服务器shttpd源码剖析——线程池调度

hello &#xff01;大家好呀&#xff01; 欢迎大家来到我的网络编程系列之web服务器shttpd源码剖析——线程池调度&#xff0c;在这篇文章中&#xff0c;你将会学习到在Linux内核中如何创建一个自己的并发服务器shttpd&#xff0c;并且我会给出源码进行剖析&#xff0c;以及手绘…

allure2教程-3-测试报告定制

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节&#xff0c;我们学习一下pytestallure2生成html测试报告的方法&#xff0c;本小节我们学习一下allure2测试报告的定制。 allure2报告预览 预览网址&#xff1a;https://demo.qameta.io/allure/# allur…

[leetcode] minimum-falling-path-sum

. - 力扣&#xff08;LeetCode&#xff09; 给你一个 n x n 的 方形 整数数组 matrix &#xff0c;请你找出并返回通过 matrix 的下降路径 的 最小和 。 下降路径 可以从第一行中的任何元素开始&#xff0c;并从每一行中选择一个元素。在下一行选择的元素和当前行所选元素最多…

归并排序了解吗?手撕一个我看看?

目录 1- 归并排序原理1-1 主要思想1-2 实现步骤 2- 归并排序代码实现(双指针)⭐ 归并排序 ——实现思路 3- ACM模式实现 1- 归并排序原理 1-1 主要思想 归并排序基于分治 将序列中待排序的数数字分为若干组&#xff0c;每个数字分为一组 将若干组两两合并&#xff0c;保证合…

3D模型处理的多进程并行【Python】

今天我们将讨论如何使用 Python 多进程来处理大量3D数据。 我将讲述一些可能在手册中找到的一般信息&#xff0c;并分享我发现的一些小技巧&#xff0c;例如将 tqdm 与多处理 imap 结合使用以及并行处理存档。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生…

【蓝桥杯2025备赛】素数判断:从O(n^2)到O(n)学习之路

素数判断:从O( n 2 n^2 n2)到O(n)学习之路 背景:每一个初学计算机的人肯定避免不了碰到素数&#xff0c;素数是什么&#xff0c;怎么判断&#xff1f; 素数的概念不难理解:素数即质数&#xff0c;指的是在大于1的自然数中&#xff0c;除了1和它本身不再有其他因数的自然数。 …

4.18作业

顺序栈&#xff1a; #include "seq_stack.h" seq_p creat_stack() //从堆区申请顺序栈的空间 {seq_p S(seq_p)malloc(sizeof(seq_stack));if(SNULL){printf("空间申请失败\n");return NULL;}bzero(S->data,sizeof(S->data));S->top-1;return S; …

OpenGL:图元

OpenGL的图元 点 GL_POINTS: 将顶点绘制成单个的点 线 GL_LINES:将顶点用于创建线段,2个点成为一条单独的线段。如果顶点个数是奇数,则忽略最后一个。 顶点:v0, v1, v2, v3, … , vn,线段:v0-v1, v2-v3, v4-v5, … , vn-1 - vn GL_LINE_STRIP:将顶点用于创建线段,…

在Linux系统中,禁止有线以太网使用NTP服务器进行时间校准的几种方法

目录标题 方法 1&#xff1a;修改NTP配置以禁止所有同步方法 2&#xff1a;通过网络配置禁用NTP同步方法 3&#xff1a;禁用NTP服务 在Linux系统中&#xff0c;如果想要禁止有线以太网使用NTP服务器进行时间校准&#xff0c;可以通过以下几种方法之一来实现&#xff1a; 方法 …

tcp网络编程——2

1.一个服务器只能有一个客户端连接&#xff08;下面代码&#xff09; ​​​​​​​tcp网络编程&#xff08;基础&#xff09;-CSDN博客 2.一个服务器可以有多个客户端连接&#xff08;多线程&#xff09; server端创建多个线程&#xff0c;每个线程与不同的client端建立连…

代码签名证书的作用及申请

代码签名证书新兴的数字证书的一种&#xff0c;应用范围相对于传统的数字证书而言要稍微少一些。用于验证软件代码的来源和完整性&#xff0c;并提供了一种防止代码被篡改或损坏的机制。常用于软件开发上&#xff0c;代码签名证书由签名证书公钥和私钥证书两部分组成&#xff0…

day05-Elasticsearch01

1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch 是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在 GitHub 搜索代码在电商网站搜索商品在百度搜索答案在打…

【工位ubuntu的配置】补充

软件 安装桌面图标的问题 登录密码 root的密码为&#xff1a;19980719 按照如下的链接进行配置&#xff1a; https://blog.csdn.net/zhangmingfie/article/details/131102331?spm1001.2101.3001.6650.3&utm_mediumdistribute.pc_relevant.none-task-blog-2%7Edefault%7E…
最新文章