【Python | 进阶】提高你的Python技能,99个让代码更简洁、更快的秘密技巧, 确定不来看看?

在这里插入图片描述

🤵‍♂️ 个人主页: @AI_magician
📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。
👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍
🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩,但一直很感兴趣!希望大佬带带)

在这里插入图片描述

在使用python,其实有着许许多多所不为人知的python技巧,这些小技巧可以让代码更简洁高效,应该多加利用! 这里就和分享99个Python的小技巧 (持续更新!!!!)

  1. 使用enumerate()获取索引。在for循环中使用enumerate可以同时获取索引和值,非常方便:
for i, v in enumerate(list_name):print(i, v)
  1. 使用collections模块的defaultdict创建字典。可以不用检查key是否存在,直接赋值:
from collections import defaultdictd = defaultdict(list) # 默认值
d['a'].append(1) 
print(d) # {'a': [1]}
  1. 使用zip()同时遍历两个列表。可以同时处理两个列表:
names = ['a', 'b']
ages = [20, 30]for name, age in zip(names, ages): # 变成元组对print(name, age)
  1. 使用reversed()反向遍历。不需要先reverse列表:
for i in reversed(range(1, 10)):print(i) 
  1. 使用set去重。可以很方便的对列表去重:
list_with_duplicates = [1, 2, 1, 3]
list_without_duplicates = list(set(list_with_duplicates))
  1. 使用any()和all()判断列表。any()只要有一个True就返回True,all()需要全部True才返回True

  2. 使用with语句自动关闭文件。不需要try-finally来关闭文件:

with open('file.txt') as f:data = f.read()

文件会在with代码块结束后自动关闭。

  1. 使用列表推导式(List Comprehensions)来简化列表的创建。它可以在一行代码中创建一个新的列表,非常方便:
squares = [x**2 for x in range(1, 6)]
print(squares)  # [1, 4, 9, 16, 25]
  1. 使用字典推导式(Dictionary Comprehensions)来简化字典的创建。类似于列表推导式,可以在一行代码中创建一个新的字典:
squares = {x: x**2 for x in range(1, 6)}
print(squares)  # {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
  1. 使用**装饰器(Decorators)**来修改函数的行为。装饰器可以在不修改原函数代码的情况下,为函数添加额外的功能:
def uppercase_decorator(func):def wrapper():result = func()return result.upper()return wrapper@uppercase_decorator # 实现一个大写装饰器,对所有返回为string的大写
def greet():return "hello"print(greet())  # "HELLO"
  1. 使用生成器(Generators)来按需生成数据。生成器可以节省内存,并且可以在需要时逐个生成值:
def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + bfib = fibonacci()
print(next(fib))  # 0
print(next(fib))  # 1
print(next(fib))  # 1
print(next(fib))  # 2
  1. 使用collections模块中的Counter类来统计元素出现的次数。它可以接受一个可迭代对象,并返回一个字典,其中键是元素,值是元素出现的次数:
from collections import Counterfruits = ['apple', 'banana', 'orange', 'apple', 'banana', 'apple']
fruit_counts = Counter(fruits)
print(fruit_counts)# 输出:
# Counter({'apple': 3, 'banana': 2, 'orange': 1})
  1. 使用itertools模块中的函数来进行迭代操作。它提供了一些有用的函数,如排列组合、无限迭代器等:
import itertools# 排列组合
letters = ['a', 'b', 'c']
perms = itertools.permutations(letters, 2)
print(list(perms))  # [('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]# 无限迭代器
count = itertools.count(start=1, step=2)
print(next(count))  # 1
print(next(count))  # 3
print(next(count))  # 5
  1. 使用logging模块来进行日志记录。它可以帮助你在程序中添加日志信息,以便调试和错误追踪:
import logginglogging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
  1. 通过 * 创建列表

通过使用乘法运算符 * 来复制列表中的元素来实现的。下面是一个示例,展示了如何使用 [None] * 3 创建一个包含3个 None 元素的列表:

my_list = [None] * 3
print(my_list)

输出:

[None, None, None]
  1. 对于数字,python3.9版本,可以用 3000表示为 3,000 格式更加规范

  2. 使用__name__ == "main"检查是否在主程序中运行。这可以让你的代码既可以作为模块导入,也可以直接运行:

def main():print("Running as main program")if __name__ == "__main__":main()
  1. 使用__import__()函数来动态导入模块。这比使用import语句更灵活:
module_name = input("Enter module name: ")
module = __import__(module_name)
  1. 使用locals()和globals()函数获取局部变量和全局变量。这对调试很有用:
x = 50  print(locals()) 
# {'x': 50}print(globals())
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x7f9c4c4c4e80>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'x': 50}
  1. 使用sys.setrecursionlimit()函数来增加递归限制。默认是1000:
import syssys.setrecursionlimit(2000)
  1. 使用__import__(‘os’).name来获取操作系统名称。这比import os更简单:
import os
print(os.name)# 等同于print(__import__('os').name)
  1. 使用__import__(‘random’).randint(1, 100)来生成1-100的随机整数。

  2. 使用__import__(‘time’).sleep(1)来让程序暂停1秒。

  3. 使用__import__(‘json’).dumps()和__import__(‘json’).loads()来序列化和反序列化JSON。

  4. 使用__import__(‘pickle’).dump()和__import__(‘pickle’).load()来序列化和反序列化任意Python对象。

  5. 使用__import__(‘sys’).exit()来立即退出程序。

  6. 使用tracebackhide = True隐藏traceback。这对开发工具很有用:

def func():__tracebackhide__ = True raise Exception("hidden")func()  # No traceback 
  1. 使用__debug__检查是否在调试模式下运行。这对条件编译很有用:
if __debug__:print("Running in debug mode")
  1. 使用metaclass定义元类。这允许自定义类的创建:
class Meta(type):passclass MyClass(object):__metaclass__ = Meta
  1. 使用__del__定义析构函数。这在对象被垃圾回收时调用:
class Point:def __del__(self):print("Point destroyed")
  1. 使用__getattr__和__setattr__自定义属性访问。这允许隐藏属性:
class Point:def __getattr__(self, attr):...def __setattr__(self, attr, value): ...
  1. 使用__iter__和__next__定义可迭代对象。这让你的类可以使用for循环:
class Point:def __iter__(self):... def __next__(self):...
  1. 使用__enter__和__exit__定义上下文管理器。这让你的类可以使用with语句:
class Point:def __enter__(self):...def __exit__(self, exc_type, exc_value, traceback):...
  1. 使用逗号来分隔print语句打印多条语句。
print(1,2,3)
# 1 2 3
  1. 通过设置宽度和填充字符格式化print输出。
print("{:10}".format(123)) 
# "       123"
print("{:^10}".format(123))  
# "   123    " 
print("{:*>10}".format(123))
# "*****123"
  1. 使用.startswith().endswith() 来检查字符串。
" Hello".startswith("H") 
# True
"Hello".endswith("o")
# True
  1. 使用dict.get() 来获取字典值,避免KeyError。
d = {"name": "John"}
d.get("name")    # John
d.get("age")     # None
  1. 在循环中用else来代替flag变量。
for n in range(2, 10):for x in range(2, n):if n % x == 0:breakelse:print(n)

这些小技巧可以让代码更简洁高效,多加利用!

在这里插入图片描述

						  🤞到这里,如果还有什么疑问🤞🎩欢迎私信博主问题哦,博主会尽自己能力为你解答疑惑的!🎩🥳如果对你有帮助,你的赞是对博主最大的支持!!🥳

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

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

相关文章

突破传统监测模式:业务状态监控HM的新思路 | 京东云技术团队

一、传统监控系统的盲区&#xff0c;如何打造业务状态监控。 在系统架构设计中非常重要的一环是要做数据监控和数据最终一致性&#xff0c;关于一致性的补偿&#xff0c;已经由算法部的大佬总结过就不再赘述。这里主要讲如何去补偿&#xff1f;补偿的方案哪些&#xff1f;这就…

Vue + ElementUI 实现可编辑表格及校验

效果 完整代码见文末 实现思路 使用两个表单分别用于实现修改和新增处理。 通过一个editIndex变量判断是否是编辑状态来决定是否展示输入框&#xff0c;当点击指定行的修改后进行设置即可&#xff1a; <el-table-columnv-for"(column, index) in columns":key&qu…

Android 开发代码规范

一. AndroidStudio开发工具规范 使用最新的稳定版本.统一文件的编码格式为utf-8. 清除每个类里面的无效的import导包.代码样式统一,比如&#xff0c;tab缩进4个空格&#xff0c;或者 tab size等如果没有特殊情况使用默认的配置即可。每行字数每行字符数不得超过 160 字符&…

SpringMVC -- REST风格开发,RESTful快速开发、RESTful注解开发

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaweb 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 REST 一、REST简介1.1REST风格简介 二、RESTful入门案例2.…

MySQL日期常见的函数

-- 获取当天日期 -- 2023-06-20 select curdate();-- 获取当天年月日时分秒 select now();-- 日期运算 -- 2024-06-20 17:04:17 select date_add(now(),interval 1 year);-- 日期比较 -- 0 select datediff(now(),now());-- 日期MySQL对于日期类型数据如何查询 -- 获取指定日期…

IDEA SpringBoot Maven profiles 配置

IDEA SpringBoot Maven profiles 配置 IDEA版本&#xff1a; IntelliJ IDEA 2022.2.3 注意&#xff1a;切换环境之后务必点击一下刷新&#xff0c;推荐点击耗时更短。 application.yaml spring:profiles:active: env多环境文件名&#xff1a; application-dev.yaml、 applicat…

2023年 Java 面试八股文(20w字)

目录 第一章-Java基础篇 1、你是怎样理解OOP面向对象 难度系数&#xff1a;⭐ 2、重载与重写区别 难度系数&#xff1a;⭐ 3、接口与抽象类的区别 难度系数&#xff1a;⭐ 4、深拷贝与浅拷贝的理解 难度系数&#xff1a;⭐ 5、sleep和wait区别 难度系数&a…

CI/CD—Docker初入门学习

1 docker 了解 1 Docker 简介 Docker 是基于 Go 语言的开源应用容器虚拟化技术。Docker的主要目标是build、ship and run any app&#xff0c;anywhere&#xff0c;即通过对应用组件的封装、分发、部署、运行等生命周期的管理&#xff0c;达到应用组件级别的一次封装、到处运…

MySQL索引3——Explain关键字和索引使用规则(SQL提示、索引失效、最左前缀法则)

目录 Explain关键字 索引性能分析 Id ——select的查询序列号 Select_type——select查询的类型 Table——表名称 Type——select的连接类型 Possible_key ——显示可能应用在这张表的索引 Key——实际用到的索引 Key_len——实际索引使用到的字节数 Ref ——索引命…

vs导出和导入动态库和静态库

1. 动态库和导出和导入 1.1 动态库的导出 1. 创建新项目 新建新项目&#xff0c;选择动态链接库&#xff08;DLL&#xff09;。 填写项目名称&#xff0c;并选择项目保存的路径&#xff0c;然后点击创建。 创建完成后&#xff0c;会自动生成如下所示文件&#xff0c;可以根据…

PostgreSQL-数据库命令

PostgreSQL-数据库命令 介绍 一个数据库是一个或多个模式的集合&#xff0c;而模式包含表、函数等。因此&#xff0c;完整的逻辑组织结构层次是服务器实例&#xff08;PostgreSQL Server&#xff09;、数据库&#xff08;Database&#xff09;、模式&#xff08;Schema&#…

jmeter 5.1彻底解决中文上传乱码

1.修改源码,然后重新打jar包,就是所有上传文件名重新获取文件名 参考链接:多种Jmeter中文乱码问题处理方法 - 51Testing软件测试网 2.修改Advanced,必须选java

API接口统一管理

API接口统一管理 在开发项目的时候,接口可能很多需要统一管理。在src目录下去创建api文件夹去统一管理项目的接口&#xff1b;这样便于后期维护和团队开发。 axios二次封装 对于axios不熟悉的话&#xff0c;建议先学习这篇文章:Axios的基本使用 在开发项目的时候避免不了与后…

App Cleaner Uninstaller for Mac 苹果电脑软件卸载工具

App Cleaner & Uninstaller 是一款非常有用的 Mac 应用程序清理和卸载工具。它可以彻底地清理系统中的应用程序、扩展和残留文件&#xff0c;以释放磁盘空间并优化系统性能。 此外&#xff0c;它还提供了磁盘空间监控和智能清理建议等功能&#xff0c;使用户可以轻松地管理…

STM32基础入门学习笔记:面包板 配件包扩展模块与编程

文章目录&#xff1a; 一&#xff1a;阵列键盘 1.阵列键盘测试程序 KEYPAD4x4.h KEYPAD4x4.c main.c 2.键盘中断测试程序 NVIC.h NVIC.c main.c 二&#xff1a;舵机控制 1.延时函数驱动舵机程序 SG90.h SG90.c main.c 2.PWM(脉冲宽度调制 脉宽调制/占空比)驱动…

Leetcode周赛 | 2023-8-6

2023-8-6 题1体会我的代码 题2我的超时代码题目体会我的代码 题3体会我的代码 题1 体会 这道题完全就是唬人&#xff0c;只要想明白了&#xff0c;只要有两个连续的数的和&#xff0c;大于target&#xff0c;那么一定可以&#xff0c;两边一次切一个就好了。 我的代码 题2 我…

应急响应-勒索病毒的处理思路

0x00 关于勒索病毒的描述 勒索病毒入侵方式&#xff1a;服务弱口令&#xff0c;未授权&#xff0c;邮件钓鱼&#xff0c;程序木马植入&#xff0c;系统漏洞等 勒索病毒的危害&#xff1a;主机文件被加密&#xff0c;且几乎难以解密&#xff0c;对主机上的文件信息以及重要资产…

NAT协议(网络地址转换协议)详解

NAT协议&#xff08;网络地址转换协议&#xff09;详解 为什么需要NATNAT的实现方式静态NAT动态NATNAPT NAT技术的优缺点优点缺点 NAT协议是将IP数据报头中的IP地址转换为另外一个IP地址的过程&#xff0c;主要用于实现私有网络访问公有网络的功能。这种通过使用少量的IP地址代…

【源码分析】Nacos自动注册源码分析

文章目录 服务注册&#xff08;AP协议&#xff09;服务发现&#xff08;CP协议&#xff09;Nacos是如何整合到SpringCloudAlibaba的&#xff1f; 服务注册&#xff08;AP协议&#xff09; Nacos提供了NamingService的registerInstance方法来提供服务注册的功能。 因此只要我们…

vue v-slot指令

目录 定义语法使用场景场景一场景二场景三tips只有一个默认插槽时 定义 在Vue中&#xff0c; v-slot 指令用于定义插槽的模板内容。它用于在父组件中传递内容到子组件中的插槽。 v-slot 指令可以用于 标签或组件标签上&#xff0c;以便在子组件中使用插槽。 语法 使用 v-slo…