python 高级技巧 0706

python 33个高级用法技巧

  1. 列表推导式 简化了基于现有列表创建新列表的过程。
squares = [x**2 for x in range(10)]
print(squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  1. 字典推导式 用简洁的方式创建字典。
square_dict = {x: x**2 for x in range(10)}
print(square_dict)
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
  1. 集合推导式 生成没有重复值的集合。
unique_squares = {x**2 for x in range(10)}
print(unique_squares)
{0, 1, 64, 4, 36, 9, 16, 49, 81, 25}
  1. 生成器表达式 创建一个按需生成值的迭代器。
gen = (x**2 for x in range(10))
print(list(gen))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  1. Lambda 函数 创建小型匿名函数。
add = lambda x, y: x + y
print(add(3, 5))
8
  1. Map 函数 将一个函数应用到输入列表的所有项目上。
squares = list(map(lambda x: x**2, range(10)))
print(squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  1. Filter 函数 从序列中过滤出满足条件的项目。
even_numbers = list(filter(lambda x: x % 2 == 0, range(10)))
print(even_numbers)
[0, 2, 4, 6, 8]
  1. Reduce 函数 对序列中的所有元素应用累积函数。
from functools import reduce
sum_all = reduce(lambda x, y: x + y, range(10))
print(sum_all)
45
  1. 链式比较 允许在一行中进行多个比较。
x = 5
result = 1 < x < 10
print(result)
True
  1. 枚举 生成枚举对象,提供索引和值。
list1 = ['a', 'b', 'c']
for index, value in enumerate(list1):print(index, value)
0 a
1 b
2 c
  1. 解包 从容器中提取多个值。
a, b, c = [1, 2, 3]
print(a, b, c)
print(*[1, 2, 3])
1 2 3
1 2 3
  1. 链式函数调用 链式调用多个函数。
def add(x):return x + 1def multiply(x):return x * 2result = multiply(add(3))
print(result)
8
  1. 上下文管理器 自动处理资源管理。
with open('file.txt', 'w') as f:f.write('Hello, World!')
  1. 自定义上下文管理器 创建自定义资源管理逻辑。
class MyContext:def __enter__(self):print('Entering')return selfdef __exit__(self, exc_type, exc_value, traceback):print('Exiting')with MyContext() as m:print('Inside')
Entering
Inside
Exiting
  1. 装饰器 修改函数的行为。
def my_decorator(func):def wrapper():print("Something is happening before the function is called.")func()print("Something is happening after the function is called.")return wrapper@my_decorator
def say_hello():print("Hello!")say_hello()
Something is happening before the function is called.
Hello!
Something is happening after the function is called.
  1. 类装饰器 使用类来实现装饰器。
class Decorator:def __init__(self, func):self.func = funcdef __call__(self):print("Something is happening before the function is called.")self.func()print("Something is happening after the function is called.")@Decorator
def say_hello():print("Hello!")say_hello()
Something is happening before the function is called.
Hello!
Something is happening after the function is called.
  1. 生成器函数 创建迭代器,逐个返回值。
def my_generator():for i in range(3):yield ifor value in my_generator():print(value)
0
1
2
  1. 异步生成器 异步生成值。
import asyncio
import nest_asyncionest_asyncio.apply()async def my_gen():for i in range(3):yield iawait asyncio.sleep(1)async def main():async for value in my_gen():print(value)asyncio.run(main())
0
1
2
  1. 元类 控制类的创建行为。
class Meta(type):def __new__(cls, name, bases, dct):print(f'Creating class {name}')return super().__new__(cls, name, bases, dct)class MyClass(metaclass=Meta):pass
Creating class MyClass
  1. 数据类 简化类的定义。
from dataclasses import dataclass@dataclass
class Person:name: strage: intp = Person(name='Alice', age=30)
print(p)
Person(name='Alice', age=30)
  1. NamedTuple 创建不可变的命名元组。
from collections import namedtuplePoint = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p)
Point(x=1, y=2)
  1. 单例模式 确保类只有一个实例。
class Singleton:_instance = Nonedef __new__(cls, *args, **kwargs):if not cls._instance:cls._instance = super().__new__(cls, *args, **kwargs)return cls._instances1 = Singleton()
s2 = Singleton()
print(s1 is s2)
True
  1. 多继承 使用多个基类创建类。
class Base1:def __init__(self):print("Base1")class Base2:def __init__(self):print("Base2")class Derived(Base1, Base2):def __init__(self):super().__init__()Base2.__init__(self)d = Derived()
Base1
Base2
  1. 属性 控制属性的访问和修改。
class MyClass:def __init__(self, value):self._value = value@propertydef value(self):return self._value@value.setterdef value(self, new_value):self._value = new_valueobj = MyClass(10)
print(obj.value)
obj.value = 20
print(obj.value)
10
20
  1. 自定义迭代器 创建自定义的可迭代对象。
class MyIterator:def __init__(self, data):self.data = dataself.index = 0def __iter__(self):return selfdef __next__(self):if self.index < len(self.data):result = self.data[self.index]self.index += 1return resultelse:raise StopIterationmy_iter = MyIterator([1, 2, 3])
for value in my_iter:print(value)
1
2
3
  1. 上下文管理器 使用 contextlib简化上下文管理。
from contextlib import contextmanager@contextmanager
def my_context():print("Entering")yieldprint("Exiting")with my_context():print("Inside")
Entering
Inside
Exiting
  1. 函数缓存 缓存函数结果以提高性能。
from functools import lru_cache@lru_cache(maxsize=32)
def fib(n):if n < 2:return nreturn fib(n-1) + fib(n-2)print([fib(n) for n in range(10)])
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
  1. 多线程 使用线程并发执行任务。
import threadingdef print_numbers():for i in range(5):print(i)thread = threading.Thread(target=print_numbers)
thread.start()
thread.join()
0
1
2
3
4
  1. 多进程 使用进程并发执行任务。
from multiprocessing import Processdef print_numbers():for i in range(5):print(i)process = Process(target=print_numbers)
process.start()
process.join()
0
1
2
3
4
  1. 队列 使用队列在线程或进程间传递数据。
from queue import Queueq = Queue()
for i in range(5):q.put(i)while not q.empty():print(q.get())
0
1
2
3
4
  1. 信号量 控制对资源的访问。
import threading# 创建一个信号量对象,初始值为2
semaphore = threading.Semaphore(2)# 定义一个访问资源的函数def access_resource():# 使用上下文管理器来获取信号量with semaphore:# 模拟资源访问的操作print("Resource accessed")# 创建4个线程,每个线程都运行access_resource函数
threads = [threading.Thread(target=access_resource) for _ in range(4)]# 启动所有线程
for thread in threads:thread.start()# 等待所有线程完成
for thread in threads:thread.join()
Resource accessed
Resource accessed
Resource accessed
Resource accessed
  1. 上下文管理器协议 创建自定义资源管理逻辑。
class MyContext:def __enter__(self):print('Entering')return selfdef __exit__(self, exc_type, exc_value, traceback):print('Exiting')with MyContext() as m:print('Inside')
Entering
Inside
Exiting
  1. 序列化、反序列化
import pickle# 创建一个数据字典
data = {'a': 1, 'b': 2, 'c': 3}# 将数据序列化并写入文件
with open('data.pkl', 'wb') as f:pickle.dump(data, f)
import pickle# 从文件中读取序列化的数据
with open('data.pkl', 'rb') as f:loaded_data = pickle.load(f)# 打印反序列化后的数据
print(loaded_data)
{'a': 1, 'b': 2, 'c': 3}

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

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

相关文章

数据结构1:C++实现边长数组

数组作为线性表的一种&#xff0c;具有内存连续这一特点&#xff0c;可以通过下标访问元素&#xff0c;并且下标访问的时间复杂的是O(1)&#xff0c;在数组的末尾插入和删除元素的时间复杂度同样是O(1)&#xff0c;我们使用C实现一个简单的边长数组。 数据结构定义 class Arr…

web零碎知识2

不知道我的这个axios的包导进去没。 找一下关键词&#xff1a; http请求协议&#xff1a;就是进行交互式的格式 需要定义好 这个式一发一收短连接 而且没有记忆 这个分为三个部分 第一个式请求行&#xff0c;第二个就是请求头 第三个就是请求体 以get方式进行请求的失手请求…

Vatee万腾平台:智慧生活的无限可能

在科技日新月异的今天&#xff0c;我们的生活正被各种智能技术悄然改变。从智能家居到智慧城市&#xff0c;从个人健康管理到企业数字化转型&#xff0c;科技的力量正以前所未有的速度渗透到我们生活的每一个角落。而在这场智能革命的浪潮中&#xff0c;Vatee万腾平台以其卓越的…

Swagger php注解常用语法梳理

Swagger php注解常用语法梳理 快速编写你的 RESTFUL API 接口文档工具&#xff0c;通过注释定义接口和模型&#xff0c;可以和代码文件放置一起&#xff0c;也可以单独文件存放。 Swagger 优势 通过代码注解定义文档&#xff0c;更容易保持代码文档的一致性模型复用&#xff0…

C++(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例

C(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例 文章目录 C(Qt)-GIS开发-QGraphicsView显示瓦片地图简单示例1、概述2、实现效果3、主要代码4、源码地址 更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;GIS开发 &#x1f448; 1、概述 支持多线程加…

【十三】图解 Spring 核心数据结构:BeanDefinition 其二

图解 Spring 核心数据结构&#xff1a;BeanDefinition 其二 概述 前面写过一篇相关文章作为开篇介绍了一下BeanDefinition&#xff0c;本篇将深入细节来向读者展示BeanDefinition的设计&#xff0c;让我们一起来揭开日常开发中使用的bean的神秘面纱&#xff0c;深入细节透彻理解…

第9章 项目总结01:项目流程,每个模块的介绍

1 请介绍一下你的项目 学成在线项目是一个B2B2C的在线教育平台&#xff0c;本项目包括了用户端、机构端、运营端。 核心模块包括&#xff1a;内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。 下图是项目的功能模块图&#xff1a; 项目采用前后端分离的技…

去除gif动图背景的工具网站

选择视频或GIF - 取消屏幕 (unscreen.com)https://www.unscreen.com/upload

24-7-6-读书笔记(八)-《蒙田随笔集》[法]蒙田 [译]潘丽珍

文章目录 《蒙田随笔集》阅读笔记记录总结 《蒙田随笔集》 《蒙田随笔集》蒙田&#xff08;1533-1592&#xff09;&#xff0c;是个大神人&#xff0c;这本书就是250页的样子&#xff0c;但是却看了好长好长时间&#xff0c;体会还是挺深的&#xff0c;但看的也是不大仔细&…

【TORCH】绘制权重分布直方图,权重torch.fmod对torch.normal生成的随机数进行取模运算

要绘制上述代码中权重初始化的分布&#xff0c;可以分别展示每一层初始化权重的直方图。我们将用 torch.fmod 对 torch.normal 生成的随机数进行取模运算&#xff0c;确保权重值在 -2 到 2 之间。 含义解释 torch.normal(0, init_sd, size...)&#xff1a;生成服从均值为 0、…

以黑盒与白盒的角度分析和通关xss-labs(XSS漏洞类型与总结)

目录 目录 前言 XSS漏洞的总结和梳理 1.第一关(基础palyload) 黑盒测试 白盒测试 2.第二关(闭合) 黑盒测试 白盒测试 3.第三关(字符转义) 黑盒测试 白盒测试 4.第四关(字符过滤或替换) 黑盒测试 白盒测试 5.第五关(关键词替换) 黑盒测试 白盒测试 6.第六关(…

el-table实现固定列,及解决固定列导致部分滚动条无法拖动的问题

一、el-table实现固定列 当数据量动态变化时&#xff0c;可以为 Table 设置一个最大高度。 通过设置max-height属性为 Table 指定最大高度。此时若表格所需的高度大于最大高度&#xff0c;则会显示一个滚动条。 <div class"zn-filter-table"><!-- 表格--…

AI对于高考和IT行业的深远影响

目录 AI对IT行业的冲击及深远影响1. 工作自动化2. 新的就业机会3. 行业融合4. 技术升级和创新5. 数据的重要性 IT行业的冬天要持续多久&#xff1f;大学的软件开发类专业是否还值得报考&#xff1f;其他问题IT行业是否都是加班严重&#xff1f;35岁后就业困难是否普遍现象&…

基于TCP的在线词典系统(分阶段实现)

1.功能说明 一共四个功能&#xff1a; 注册 登录 查询单词 查询历史记录 单词和解释保存在文件中&#xff0c;单词和解释只占一行, 一行最多300个字节&#xff0c;单词和解释之间至少有一个空格。 2.功能演示 3、分阶段完成各个功能 3.1 完成服务器和客户端的连接 servic…

springcloud-alibba之FeignClient

代码地址&#xff1a;springcloud系列: springcloud 组件分析拆解 1.FeignClient的集成 springboot版本&#xff1a;3.1.5 springcloud组件版本&#xff1a;2022.0.4 nacos客户端的版本&#xff1a;2.3.2 1.引pom 这里引入了nacos和feginclient的版本 <dependency>…

【MySQL】事务四大特性以及实现原理

事务四大特性 原子性&#xff08;Atomicity&#xff09; 事务中的所有操作要么全部完成&#xff0c;要么全部不执行。如果事务中的任何一步失败&#xff0c;整个事务都会被回滚&#xff0c;以保持数据的完整性。 一致性&#xff08;Consistency&#xff09; 事务应确保数据库…

机器学习——决策树及其可视化

1、决策树概念 顾名思义&#xff0c;决策树是利用数据结构中树结构来进行判断&#xff0c;每一个结点相当于一个判断条件&#xff0c;叶子结点即是最终的类别。以鸢尾花为例&#xff0c;可以得到如下的决策树&#xff1a; 2、决策树分类的依据是什么&#xff1f; 根据前面分…

跨越语言的界限:Vue I18n 国际化指南

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 国际化简介 vue-i18n 安装和配置 创建语言包 基本使用 切换语言 动态翻…

CTFShow的RE题(二)

逆向5 附件无后缀&#xff0c;查一下是zip&#xff0c;解压得到一个exe一个dll文件。 往下继续看 但也根进去看看 发现是在加载的dll文件 还有一个返回时调用的函数 发现是打印函数 根据以往的经验应该是要跳转到这里&#xff0c;动调一下。 发现exe链接了dll&#xff0c;…

Lock4j简单的支持不同方案的高性能分布式锁实现及源码解析

文章目录 1.Lock4j是什么?1.1简介1.2项目地址1.3 我之前手写的分布式锁和限流的实现 2.特性3.如何使用3.1引入相关依赖3.2 配置redis或zookeeper3.3 使用方式3.3.1 注解式自动式3.3.2 手动式 4.源码解析4.1项目目录4.2实现思路 5.总结 1.Lock4j是什么? 1.1简介 lock4j是苞米…