python3高级特性

news2024/10/7 18:24:52

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.coloradmin.cn/o/1594435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring高手之路17——动态代理的艺术与实践

文章目录 1. 背景2. JDK动态代理2.1 定义和演示2.2 不同方法分别代理2.3 熔断限流和日志监控 3. CGLIB动态代理3.1 定义和演示3.2 不同方法分别代理&#xff08;对比JDK动态代理写法&#xff09;3.3 熔断限流和日志监控&#xff08;对比JDK动态代理写法&#xff09; 4. 动态代理…

SpringBoot多模块项目整合Shiro报错No bean of type ‘org.apache.shiro.realm.Realm‘ found.

环境 依赖版本 spring-boot-dependencies 2.7.6 shiro-spring-boot 1.13.0 问题 项目启动报错 *************************** APPLICATION FAILED TO START ***************************Description:No bean of type org.apache.shiro.realm.Realm found.Action:Please …

007Node.js安装自启动工具supervisor运行js文件

在vscode中&#xff0c;某些运行中的程序修改xx.js文件后&#xff0c;通过CtrlC终止再重新运行。supervisor是自启动工具&#xff0c;会不停的查看你的文件&#xff0c;一旦发现有修改&#xff0c;就立马重新载入运行。 我们可以通过安装supervisor代替node命令运行xx.js。终端…

卷积神经网络原来是这样实现图像识别的

积神经网络原来是这样实现图像识别的 图像识别是非常有趣和具有挑战性的研究领域。本文阐述了卷积神经网络用于图像识别的概念、应用和技术。 什么是图像识别&#xff0c;为什么要使用它&#xff1f; 在机器视觉领域&#xff0c;图像识别是指软件识别人物、场景、物体、动作和图…

单例模式以及常见的两种实现模式

单例模式是校招中最常考的设计模式之一. 设计模式其实就是类似于“规章制度”&#xff0c;按照这个套路来进行操作。 单例模式能保证某个类在程序中只存在唯一 一份实例。而不会创建出多个实例&#xff0c;如果创建出了多个实例&#xff0c;就会编译报错。而不会创建出多个实…

数据库SQL语言实战(二)

目录 检索查询 题目一 题目二 题目三 题目四 题目五 题目六 题目七 题目八 题目九&#xff08;本篇最难的题目&#xff09; 分析 实现&#xff08;两种方式&#xff09; 模板 总结 检索查询 按照要求查找数据库中的数据 题目一 找出没有选修任何课程的学…

【算法刷题 | 二叉树 06】4.10( 路径总和、路径总和 || )

文章目录 13.路径总和13.1问题13.2解法一&#xff1a;递归13.2.1递归思路&#xff08;1&#xff09;确定递归函数参数以及返回值&#xff08;2&#xff09;确定终止条件&#xff08;3&#xff09;确定递归逻辑 13.2.2代码实现 14.路径总和 ||14.1问题14.2解法一&#xff1a;递归…

【设计模式】聊聊观察者设计模式原理及应用

原理 观察者模式属于行为模式&#xff0c;行为模式主要解决类和对象之间交互问题。 含义&#xff1a;在对象之间定义一个一对多的依赖&#xff0c;当一个对象状态改变时&#xff0c;所有依赖的对象会自动通知。 被依赖的对象被观察者(Observable) &#xff0c;依赖的对象观察…

2024年广东省网络系统管理样题第3套网络部署部分

2024年广东省网络系统管理样题第3套网络部署部分 模块A&#xff1a;网络构建 极安云科专注职业教育技能培训4年&#xff0c;包含信息安全管理与评估、网络系统管理、网络搭建等多个赛项及各大CTF模块培训学习服务。本团队基于赛项知识点&#xff0c;提供完整全面的系统性理论教…

欧拉回路算法

1 基本概念 1.1 欧拉路径和欧拉回路 欧拉路径&#xff1a;欧拉路是指从图中任意一个点开始到图中任意一个点结束的路径&#xff0c;并且图中每条边通过的且只通过一次。 欧拉回路:欧拉回路是指起点和终点相同的欧拉路。 注意&#xff1a;如果欧拉回路&#xff0c;那么一定存在…

基于51单片机的无线病床呼叫系统设计—LCD1602显示

基于51单片机的无线病床呼叫系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.病人按下按键&#xff0c;LCD1602显示对应的床位号&#xff1b; 2.多人同时呼叫&#xff0c;显示屏同时显示&#xf…

5、JVM-G1详解

G1收集器 -XX:UseG1GC G1 (Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的机器. 以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征. G1将Java堆划分为多个大小相等的独立区域&#xff08;Region&#xff09;&#xff0c;JVM目标…

001vscode为什么设置不了中文?

VSCode中文插件安装 在VSCode中设置中文的首要步骤是安装“Chinese (Simplified) Language Pack for Visual Studio Code”扩展插件。这一过程十分简单&#xff0c;只需打开VSCode&#xff0c;进入扩展市场&#xff0c;搜索“ Chinese (Simplified) Language Pack ”然后点击…

C语言高质量编程之assert()和const

目录 编程中常见的错误 assert() const 编程中常见的错误 在编程中我们通常会遇到三种错误形式&#xff0c;分别是&#xff1a;编译型错误&#xff0c;链接型错误&#xff0c;运行时错误。 编译型错误&#xff1a; 在编译阶段发生的错误&#xff0c;绝大多数情况是由语法错误…

【Golang学习笔记】从零开始搭建一个Web框架(二)

文章目录 模块化路由前缀树路由 前情提示&#xff1a; 【Golang学习笔记】从零开始搭建一个Web框架&#xff08;一&#xff09;-CSDN博客 模块化路由 路由在kilon.go文件中导致路由和引擎交织在一起&#xff0c;如果要实现路由功能的拓展增强&#xff0c;那将会非常麻烦&…

第二期书生浦语大模型训练营第三次作业

任务一&#xff1a;在茴香豆 Web 版中创建自己领域的知识问答助手 构建个人回答助手 进入web页面&#xff0c;传输属于自己的文件&#xff0c;此处进行输入大量投资领域资料&#xff0c;构建个人投资者问答助手 回答示例 茴香豆缺陷 此处会发现茴香豆仍然存在一些缺点&#…

CF938Div3(A-F)

A: 买n个酸奶&#xff0c;一次一瓶a元,一次买两瓶可以优惠价b元,也可以a元,问恰好买n瓶需要多少钱. void solve() {int n, a, b;cin >> n >> a >> b;int ans min(a * n, n / 2 * b n % 2 * a);cout << ans << endl; } B: 给你一个数组,问能…

手把手教你安装深度学习框架PyTorch:一键式安装指南

随着人工智能和深度学习的飞速发展&#xff0c;PyTorch作为一个强大而灵活的深度学习框架&#xff0c;受到了越来越多研究者和开发者的青睐。PyTorch不仅易于上手&#xff0c;而且支持动态计算图&#xff0c;使得调试和实验变得非常方便。本文将手把手教你如何安装PyTorch&…

Spark-机器学习(1)什么是机器学习与MLlib算法库的认识

从这一系列开始&#xff0c;我会带着大家一起了解我们的机器学习&#xff0c;了解我们spark机器学习中的MLIib算法库&#xff0c;知道它大概的模型&#xff0c;熟悉并认识它。同时&#xff0c;本篇文章为个人spark免费专栏的系列文章&#xff0c;有兴趣的可以收藏关注一下&…

若依从0到1部署

服务器安装 MySQL8 Ubuntu 在 20.04 版本中&#xff0c;源仓库中 MySQL 的默认版本已经更新到 8.0&#xff0c;因此可以直接使用 apt-get 安装。 设置 apt 国内代理 打开 https://developer.aliyun.com/mirror/ 阿里云镜像站&#xff0c;找到适合自己的系统&#xff1a; 找…