上一篇文章Python中那些简单又好用的特性和用法发出后,群里的小伙伴又给补充了几个好用的用法,结合生产实用经验汇总整理如下,各位看官如有需要请自取

  1. 反射,反射是一种机制,可以在运行时获取、检查和修改对象的属性和方法。Python提供了一些内置的函数和属性,可以用于实现反射操作

dir()函数:返回对象的所有属性和方法的列表

class MyClass:
def __init__(self):
self.name = "运维咖啡吧"
self.age = 25 my_obj = MyClass()
print(dir(my_obj))

getattr()函数:获取对象的属性或方法

class MyClass:
def __init__(self):
self.name = "运维咖啡吧"
self.age = 25 my_obj = MyClass()
name = getattr(my_obj, "name")
print(name)

setattr()函数:设置对象的属性或方法

class MyClass:
def __init__(self):
self.name = "运维咖啡吧"
self.age = 25 my_obj = MyClass()
setattr(my_obj, "name", "blog.ops-coffee.cn")
print(my_obj.name)

hasattr()函数:检查对象是否具有指定的属性或方法

class MyClass:
def __init__(self):
self.name = "运维咖啡吧"
self.age = 25 my_obj = MyClass()
has_name = hasattr(my_obj, "name")
print(has_name)

这些函数和属性可以帮助你在运行时动态地访问和修改对象的属性和方法。反射为编写更灵活和通用的代码提供了一种机制,可以根据需要操作对象的属性和方法

  1. 交换变量,这是一种非常常见和方便的操作,可以在需要时快速交换变量的值
a = 10
b = 20 a, b = b, a print(a, b) # 输出: 20 10
  1. 可迭代对象解包,它允许你将可迭代对象的元素解包到单独的变量中。这对于同时处理多个值非常有用
# 解包元组
a, b, c = (1, 2, 3)
print(a, b, c) # 输出: 1 2 3 # 解包列表
x, y, z = [4, 5, 6]
print(x, y, z) # 输出: 4 5 6
  1. 深复制和浅复制,当处理复杂的数据结构时,深复制和浅复制允许你创建对象的副本。深复制会创建一个全新的对象,而浅复制会创建一个新对象,但共享内部数据。
import copy

# 创建一个列表
original_list = [1, 2, [3, 4]] # 浅复制
shallow_copy = copy.copy(original_list) # 深复制
deep_copy = copy.deepcopy(original_list) # 修改原始列表中的嵌套列表
original_list[2][0] = 5 print(original_list) # 输出: [1, 2, [5, 4]]
print(shallow_copy) # 输出: [1, 2, [5, 4]]
print(deep_copy) # 输出: [1, 2, [3, 4]]
  1. with语句的多个上下文管理器:在一个with语句中,你可以同时使用多个上下文管理器,以便在代码块执行前后执行多个操作
class CustomContextManager1:
def __enter__(self):
print("Entering CustomContextManager1") def __exit__(self, exc_type, exc_val, exc_tb):
print("Exiting CustomContextManager1") class CustomContextManager2:
def __enter__(self):
print("Entering CustomContextManager2") def __exit__(self, exc_type, exc_val, exc_tb):
print("Exiting CustomContextManager2") # 使用多个上下文管理器
with CustomContextManager1(), CustomContextManager2():
# 在这里执行一些操作

比较常用的是一次打开多个文件进行操作,例如同时打开文件1和文件2,读取文件1内容处理后写入文件2

with open("file1.txt") as file1, open("file2.txt") as file2:
# 在这里可以使用file1和file2进行操作
  1. 装饰器,通过装饰器来复用函数,简化操作
# 创建一个装饰器函数,用于计算函数执行时间
import time def calculate_time(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"函数 {func.__name__} 执行时间为: {end_time - start_time} 秒")
return result
return wrapper # 应用装饰器到函数
@calculate_time
def long_running_function():
time.sleep(2) long_running_function()
  1. 使用字典来代替冗长的if/else判断,提升代码可读性
def operation_add(a, b):
return a + b def operation_subtract(a, b):
return a - b def operation_multiply(a, b):
return a * b def operation_divide(a, b):
return a / b # 定义一个操作字典,将操作名映射到对应的函数上
operations = {
"add": operation_add,
"subtract": operation_subtract,
"multiply": operation_multiply,
"divide": operation_divide
} # 使用字典进行操作选择和调用相应的函数
result = operations["multiply"](2, 3)
print("结果:", result)
  1. 字符串格式化,使用占位符和格式化字符串来构建新的字符串
name = "Alice"
age = 25
message = "My name is {} and I am {} years old.".format(name, age)
# 输出: "My name is Alice and I am 25 years old."
  1. 使用lamba函数进行简单的函数定义
add = lambda x, y: x + y
result = add(2, 3)
# 输出: 5
  1. 使用reversed函数反转可迭代对象
numbers = [1, 2, 3, 4, 5]
reversed_numbers = list(reversed(numbers))
# 输出: [5, 4, 3, 2, 1]
  1. 使用map函数对可迭代对象中的每个元素应用指定的函数
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x**2, numbers))
# 输出: [1, 4, 9, 16, 25]
  1. 使用filter函数根据指定的条件筛选可迭代对象中的元素
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
# 输出: [2, 4]
  1. 生成器函数,使用yield关键字来生成一个值,并且在每次生成值后暂停执行,等待下一次调用
# 下面是一个简单的生成器函数示例,用于生成斐波那契数列
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b fib = fibonacci()
print(next(fib)) # 输出:0
print(next(fib)) # 输出:1
print(next(fib)) # 输出:1

生成器函数可以一次生成一个值,而不是一次生成所有值,这使得生成器函数非常适合处理大量数据或无限序列

  1. 使用functools模块中的partial函数进行函数参数固定:partial函数可以固定函数的部分参数,生成一个新的函数
from functools import partial

def power(x, y):
return x ** y square = partial(power, y=2)
cube = partial(power, y=3) print(square(5)) # 输出 25
print(cube(5)) # 输出 125
  1. 使用try...else语句在try块没有引发异常时执行特定的代码
try:
# 可能会引发异常的代码
result = 10 / 2
except ZeroDivisionError:
# 如果发生ZeroDivisionError异常
print("除数不能为零!")
else:
# 如果没有发生异常
print("结果为:", result)

类似的还有try...finally无论是否发生异常,都会执行

try:
# 可能会引发异常的代码
f = open('example.txt', 'r')
# 其他操作
except IOError:
# 如果发生IOError异常
print("无法打开文件")
else:
# 如果没有发生异常
print(f.read())
finally:
# 无论是否发生异常,都会执行的清理代码
f.close()
  1. 通过signal解耦代码
import signal
import os # 定义一个事件处理函数
def handle_event(signum, frame):
if signum == signal.SIGUSR1:
print("接收到用户定义信号1,执行事件A")
# 执行事件A的逻辑
elif signum == signal.SIGUSR2:
print("接收到用户定义信号2,执行事件B")
# 执行事件B的逻辑
else:
print(f"接收到未知信号: {signum}") # 注册事件处理函数
signal.signal(signal.SIGUSR1, handle_event) # 注册处理用户定义信号1的事件处理函数
signal.signal(signal.SIGUSR2, handle_event) # 注册处理用户定义信号2的事件处理函数 # 模拟发送事件信号
def send_event1():
# 发送用户定义信号1
print("发送用户定义信号1")
os.kill(os.getpid(), signal.SIGUSR1) def send_event2():
# 发送用户定义信号2
print("发送用户定义信号2")
os.kill(os.getpid(), signal.SIGUSR2) # 执行事件
send_event1() # 执行事件1
send_event2() # 执行事件2

两篇文章一共总结了32个用法,先这么多,欢迎大伙继续补充

继续总结Python中那些简单好用的用法的更多相关文章

  1. python中一个简单的webserver

     python中一个简单的webserver 2013-02-24 15:37:49 分类: Python/Ruby 支持多线程的webserver   1 2 3 4 5 6 7 8 9 10 11 ...

  2. python中的 try...except...finally 的用法

    python中的 try...except...finally 的用法 author:headsen chen date:2018-04-09  16:22:11 try, except, final ...

  3. Python中生成器和yield语句的用法详解

    Python中生成器和yield语句的用法详解 在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况.一些话题("if/else控制流" ...

  4. python中列表元素连接方法join用法实例

    python中列表元素连接方法join用法实例 这篇文章主要介绍了python中列表元素连接方法join用法,实例分析了Python中join方法的使用技巧,非常具有实用价值,分享给大家供大家参考. ...

  5. Python 中lambda 简单介绍

    转自:https://www.cnblogs.com/AlwaysWIN/p/6202320.html 在学习python的过程中,lambda的语法经常出现,现在将它整理一下,以备日后查看. 1.l ...

  6. MD5在Python中的简单使用

    MD5不是加密 https://draveness.me/whys-the-design-password-with-md5/ 参考为什么这么设计 Message-Digest Algorithm 5 ...

  7. 正则表达式在python中的简单使用

    正则表达式独立与编程语言,基本上所有的编程语言都实现了正则表达式的相关操作.在Python中正则表达式的表现为re模块: import re 其操作有三个方法: my_string = "h ...

  8. 【转】Python中string的strip,lstrip,rstrip用法

    Python中的strip用于去除字符串的首尾字符串,同理,lstrip用于去除左边的字符,rstrip用于去除右边的字符. 这三个函数都可传入一个参数,指定要去除的首尾字符. 需要注意的是,传入的是 ...

  9. python 中 sorted() 和 list.sort() 的用法

    今天用python自带的sorted对一个列表进行排序, 在这里总结一下 只要是可迭代对象都可以用sorted . sorted(itrearble, cmp=None, key=None, reve ...

  10. python中List的sort方法的用法

    python列表排序 简单记一下python中List的sort方法(或者sorted内建函数)的用法. 关键字: python列表排序 python字典排序 sorted List的元素可以是各种东 ...

随机推荐

  1. 19.0 Boost 基于ASIO网络编程技术

    Boost ASIO库是一个基于C++语言的开源网络编程库,该库提供了成熟.高效.跨平台的网络API接口,并同时支持同步与异步两种模式,ASIO库提供了多重I/O对象.异步定时器.可执行队列.信号操作 ...

  2. SpringBoot自动化配置

    SpringBoot自动化配置 一.SpringBoot自动化配置原理 1.SpringBoot引导类注解介绍 在SpringBoot的启动引导类上有一个@SpringBootApplication注 ...

  3. Linux 进程卡住了怎么办?

    在我们使用 Linux 系统时,如果网络或者磁盘等 I/O 出问题,会发现进程卡住了,即使用 kill -9 也无法杀掉进程,很多常用的调试工具,比如 strace, pstack 等也都失灵了,是怎 ...

  4. 教你用JavaScript实现鼠标特效

    案例介绍 欢迎来的我的小院,我是霍大侠,恭喜你今天又要进步一点点了!我们来用JavaScript编程实战案例,做一个鼠标爱心特效.鼠标在页面移动时会出现彩色爱心特效.通过实战我们将学会createEl ...

  5. ASP.NET Core分布式项目实战(业务介绍,架构设计,oAuth2,IdentityServer4)--学习笔记

    任务4:第一章计划与目录 敏捷产品开发流程 原型预览与业务介绍 整体架构设计 API 接口设计 / swagger Identity Server 4 搭建登录 账号 API 实现 配置中心 任务5: ...

  6. Python脚本的输入输出

    一.必备知识回顾和补充 1. Hello world回顾 1.输出文本,使用print函数输出文本. 2.让用户输入名字,然后输出带名字的问候语.使用input函数获取用户的输入,使用变量保存输入值. ...

  7. scrapy框架使用:分布式、增量式

    scrapy框架的使用 前记:爬虫框架部分整理完成,后续慢慢完善, 声明: 1)仅作为个人学习,如有冒犯,告知速删! 2)不想误导,如有错误,不吝指教! 创建工程: scrapy startproje ...

  8. WPF常用控件 自定义样式( ScrollViewer TextBox PasswordBox Button RadioButton CheckBox ToggleButton ProgressBar TabControl Loading Waiting 饼图 渐变图标 消息通知 )

    控件样式一览: ScrollViewer 继承样式,使用方法跟原生一致,就不过多阐述. TextBox,PasswordBox 继承样式,Tag属性为提示文字. RadioButton,CheckBo ...

  9. 当我忘记SQL怎么写的时候,我……

    当我忘记SQL怎么写的时候,我-- 以往的我,打开电脑百度一番,打开笔记查询一轮,发现没找到我最想要的 不要慌,问题不大 后来发现MySQL本身就带有帮助文档. 于是我一顿操作:win+R >& ...

  10. 【Android】屏幕旋转时数据丢失问题解决方案

    1 问题描述 ​ 在旋转屏幕时,记录旋转屏幕次数的计数器(count)一直为 0,不能实现累加效果.主要因为在旋转屏幕时,会销毁原来的变量,重新构建界面. 2 解决思路 ​ 在 Activity 销毁 ...