当前位置:首页 > 科技  > 软件

十个 Python 秘诀将颠覆你的编码方式

来源: 责编: 时间:2024-06-28 17:09:33 212观看
导读通过一些实用技巧和方法,充分发挥Python的强大功能对于大多数人来说,学习Python编程最初都有一定困难。它看似晦涩难懂,以至于有人甚至怀疑自己是否还需要继续使用Excel这种传统数据分析工具。然而,只要持之以恒、循序渐

通过一些实用技巧和方法,充分发挥Python的强大功能Tvd28资讯网——每日最新资讯28at.com

对于大多数人来说,学习Python编程最初都有一定困难。它看似晦涩难懂,以至于有人甚至怀疑自己是否还需要继续使用Excel这种传统数据分析工具。Tvd28资讯网——每日最新资讯28at.com

然而,只要持之以恒、循序渐进地学习,Python的门径终将为你打开。我就是靠着坚持不懈,不断吸收新知识,最终获得了第一份编程工作。从那时起,我在每一份工作中都能"取之不尽、用之不竭",汲取到各种实用技巧和窍门。今天,就让我分享其中一些精华,希望能为你的Python编程之路提供启迪。Tvd28资讯网——每日最新资讯28at.com

秘诀 1:zip函数

zip函数堪称Python中的利器。它能将多个可迭代对象并行合并为一个可迭代的元组序列,大大简化了对多个序列的遍历操作。这一技巧让我彻底告别了那些冗长、嵌套的循环,代码变得更加简洁可读。Tvd28资讯网——每日最新资讯28at.com

示例

我记得我需要将两个列表中的姓名和年龄配对起来。在使用 zip 之前,我的代码充满了索引变量,难以理解。Tvd28资讯网——每日最新资讯28at.com

names = ["Alice", "Bob", "Charlie"]ages = [25, 30, 35]for i in range(len(names)):    print(f"{names[i]} is {ages[i]} years old")

下面是 zip 的简化过程:Tvd28资讯网——每日最新资讯28at.com

names = ["Alice", "Bob", "Charlie"]ages = [25, 30, 35]# 使用 zip 并行遍历两个列表for name, age in zip(names, ages):    print(f"{name} is {age} years old")

这让我的代码更简洁,也更容易阅读。无论何时您需要同时处理多个序列,zip 都是您的好朋友。在你的项目中试试吧,看看你的代码会变得多么简单!Tvd28资讯网——每日最新资讯28at.com

秘诀 2:华勒斯运算符 (:=)

华勒斯运算符(:=)为我拓展了全新的编码视野。它允许在表达式中完成变量赋值,使得求值和赋值合二为一,使代码更加紧凑简练。Tvd28资讯网——每日最新资讯28at.com

示例

我以前编写的代码是在一个循环中读取用户输入,直到他们输入一个有效值。以前的方法是重复性的:Tvd28资讯网——每日最新资讯28at.com

while True:    user_input = input("Enter a number: ")    if user_input.isdigit():        number = int(user_input)        break

有了海象操作器,代码变得更加简洁:Tvd28资讯网——每日最新资讯28at.com

while (user_input := input("Enter a number: ")).isdigit() == False:    print("Invalid input, please enter a number.")number = int(user_input)

这个小技巧让我的循环变得更简单、更容易掌握。在类似情况下,请尝试使用华勒斯运算符(:=)来简化代码!Tvd28资讯网——每日最新资讯28at.com

秘诀 3:集合操作

集合这一数据结构给我留下了深刻印象。作为独特的无序集合,它支持数学运算如并集、交集和差集等操作。集合可高效处理唯一元素,简化复杂的集合论问题。Tvd28资讯网——每日最新资讯28at.com

示例

我记得在一个项目中,我需要找到两个列表中共同的项目和每个列表中唯一的项目。Tvd28资讯网——每日最新资讯28at.com

list1 = [1, 2, 3, 4, 5]list2 = [4, 5, 6, 7, 8]# 查找共同元素common_elements = []for item in list1:    if item in list2:        common_elements.append(item)print(f"common elements: {common_elements}")# 在 list1 中查找唯一元素unique_to_list1 = []for item in list1:    if item not in list2:        unique_to_list1.append(item)print(f "Unique to list1: {unique_to_list1}")# 查找所有唯一元素all_unique_elements = list1.copy()for item in list2:    if item not in all_unique_elements:        all_unique_elements.append(item)print(f"All unique elements: {all_unique_elements}")

使用成套工具使这项工作变得更加容易:Tvd28资讯网——每日最新资讯28at.com

list1 = [1, 2, 3, 4, 5]list2 = [4, 5, 6, 7, 8]# 将列表转换为集合set1 = set(list1)set2 = set(list2)# 找出交集(共同元素)common_elements = set1 & set2print(f "common elements: {common_elements}")# 找出差异(set1 中的唯一元素)unique_too_set1 = set1 - set2print(f "Unique to set1: {unique_too_set1}")# 找出联合(所有唯一元素)all_unique_elements = set1 | set2print(f"All unique elements: {all_unique_elements}")

使用集合可以让代码更高效、更易懂。无论何时需要处理唯一元素或执行集合操作,都可以试试 Python 集合!Tvd28资讯网——每日最新资讯28at.com

秘诀 4:使用 * 解包

解包操作 * 无疑是提高编码效率的秘诀之一。它能将可迭代对象解包为函数的单个参数或变量赋值目标,赋予代码更强的灵活性和可读性。Tvd28资讯网——每日最新资讯28at.com

示例

我曾为需要多个参数的函数而苦恼。Tvd28资讯网——每日最新资讯28at.com

# 定义一个接收多个参数的函数def greet(first, second, third):    print(f "Hello {first}, {second}, and {third}!")# 列出名字names = ["Alice", "Bob", "Charlie"] # 从列表中手动传递参数# 从列表中手动传递参数greet(names[0], names[1], names[2])

手动管理这些参数非常麻烦。后来我发现了解包:Tvd28资讯网——每日最新资讯28at.com

# 定义一个接收多个参数的函数def greet(first, second, third):    print(f "Hello {first}, {second}, and {third}!")# 列出名字names = ["Alice", "Bob", "Charlie"] # 将列表解压缩为函数参数# 将列表解压缩为函数参数greet(*names)

使用 * 进行解包后,我的函数调用和赋值变得更加简单和干净。这一小小的改变对代码的可读性有很大的影响。Tvd28资讯网——每日最新资讯28at.com

秘诀 5:dataclasses模块

dataclasses模块为我带来了全新的类编程体验。它能自动创建类实例,无需手动编写__init__方法,极大简化了类的定义和维护。Tvd28资讯网——每日最新资讯28at.com

示例

我以前写过很多重复的代码来初始化类的属性。这既乏味又容易出错。后来我发现了 dataclasses:Tvd28资讯网——每日最新资讯28at.com

from dataclasses import dataclass# 定义一个简单的数据类@dataclassclass Person:    name: str    age: int    city: str# 创建该类的实例person = Person(name="Alice", age=30, city="New York")print(person)

在使用 dataclasses 之前,我的代码中充斥着大量的模板:Tvd28资讯网——每日最新资讯28at.com

class Person:    def __init__(self, name, age, city):        self.name = name        self.age = age        self.city = cityperson = Person(name="Alice", age=30, city="New York")print(person)

使用 dataclasses 使我的代码更简洁、更易于维护。如果您需要处理大量的类定义,不妨试试 dataclasses。它将为你节省时间,并保持代码库的整洁!Tvd28资讯网——每日最新资讯28at.com

秘诀 6:functools.lru_cache装饰器

functools.lru_cache装饰器可谓是破解性能瓶颈的法宝。它为函数添加了缓存功能,存储计算耗费的函数调用结果,提高了具有相同输入的重复调用效率。Tvd28资讯网——每日最新资讯28at.com

示例

我记得在做一个需要大量计算的项目时,重复计算拖慢了一切。发现了 lru_cache 后,我就像捡到了救命稻草:Tvd28资讯网——每日最新资讯28at.com

from functools import lru_cache# 定义一个计算量很大的函数@lru_cache(maxsize=100)def expensive_function(n):    print(f"Computing {n}...")    return n * n# 多次调用函数print(expensive_function(4))print(expensive_function(4))  # This call is cached

在使用 lru_cache 之前,我的函数调用既低效又缓慢。有了缓存,重复调用几乎可以瞬间完成,节省了宝贵的计算时间。Tvd28资讯网——每日最新资讯28at.com

对于数据处理中需要多次执行相同计算的函数,这个技巧尤其有用。它让我的代码变得更快、更高效。请尝试在你的项目中使用 lru_cache,看看性能提升的效果!Tvd28资讯网——每日最新资讯28at.com

秘诀 7:生成器和 yield

发现生成器和 yield 关键字对我来说是一个转折点。生成器是一种特殊函数,通过一次生成一个元素的方式返回可迭代序列,节省内存并支持延迟计算。Tvd28资讯网——每日最新资讯28at.com

示例

我曾经处理过无法同时放入内存的大型数据集。在我发现生成器之前,高效地迭代这些数据集是一项挑战:Tvd28资讯网——每日最新资讯28at.com

def generate_squares(n):    for i in range(n):        yield i * i# Use the generatorfor square in generate_squares(5):    print(square)

在使用生成器之前,我会创建大量列表,占用大量内存:Tvd28资讯网——每日最新资讯28at.com

def generate_squares(n):    result = []    for i in range(n):        result.append(i * i)    return resultfor square in generate_squares(5):    print(square)

生成器确实是处理大型数据集的强大工具,它们可以有效地减少内存消耗并提高性能。通过逐步生成数据,而不是一次性读取整个数据集,生成器可以在处理大文件和数据流时节省大量资源。Tvd28资讯网——每日最新资讯28at.com

使用yield语句可以将函数转变成生成器,这意味着它可以暂停和继续执行,使得代码更加灵活和高效。此外,生成器还可以与循环结合使用,用于处理大型数据集,或者实现惰性计算,以及其他各种应用场景。Tvd28资讯网——每日最新资讯28at.com

秘诀 8:itertools模块

在我很多项目中,都会经常用到itertools 模块。它提供了高效的数据遍历工具函数,如排列、组合和笛卡尔积等,极大提升了迭代处理的性能。Tvd28资讯网——每日最新资讯28at.com

示例

我经常需要从一个项目列表中生成所有可能的配对或组合。在使用 itertools 之前,我的代码既笨重又低效。下面是 itertools 如何简化它的:Tvd28资讯网——每日最新资讯28at.com

import itertools# 生成两个项目的所有可能组合items = ['A', 'B', 'C']combinations = itertools.combinations(items, 2)for combo in combinations:    print(combo)

在使用 itertools 之前,生成组合需要嵌套循环,而且容易出错:Tvd28资讯网——每日最新资讯28at.com

items = ['A', 'B', 'C']combinations = []for i in range(len(items)):    for j in range(i + 1, len(items)):        combinations.append((items[i], items[j]))for combo in combinations:    print(combo)

itertools 使我的代码更高效、更易读。它对涉及复杂迭代的任务特别有用,比如生成用于算法测试的排列组合或创建用于数据分析的笛卡尔积。将 itertools 纳入您的项目,性能和简洁性将得到显著提高!Tvd28资讯网——每日最新资讯28at.com

秘诀 9:types.MappingProxyType映射代理类型

有次我遇到了防止字典意外修改的需求,types.MappingProxyType为我提供了绝佳解决方案。它能创建字典的只读映射视图,确保底层字典的内容永保不变。Tvd28资讯网——每日最新资讯28at.com

示例

我正在做一个项目,其中的配置设置必须在整个执行过程中保持不变。下面是 MappingProxyType 的功能:Tvd28资讯网——每日最新资讯28at.com

from types import MappingProxyType# 原始字典config = {'host': 'localhost', 'port':8080}# 创建只读视图read_only_config = MappingProxyType(config)print(read_only_config['host']) # 输出:localhost# 尝试修改只读字典try:    read_only_config['host'] = '127.0.0.1'except TypeError as e:    print(e)  # Output: 'mappingproxy' object does not support item assignment

在使用 MappingProxyType 之前,我一直担心字典会被更改:Tvd28资讯网——每日最新资讯28at.com

config = {'host': 'localhost', 'port': 8080}# 没有防止意外修改的保护措施config['host'] = '127.0.0.1'

通过使用 types.MappingProxyType 我确保了配置设置的安全,避免了意外更改。在必须保护关键数据结构的情况下,这种技术尤其有用。试一试,就能增强代码的安全性和稳定性!Tvd28资讯网——每日最新资讯28at.com

秘诀 10:pathlib模块

pathlib模块则是现代化的文件路径操作利器。相较于os.path,它采用了面向对象的方式,操作更加易读,也降低了出错风险,成为文件路径处理的不二选择。Tvd28资讯网——每日最新资讯28at.com

示例

我曾经使用 os.path 来处理文件操作,但我的代码往往杂乱无章,难以阅读。下面是 pathlib 如何改进它的:Tvd28资讯网——每日最新资讯28at.com

from pathlib import Path# 创建路径对象path = Path('example_directory/example_file.txt')# 检查路径是否存在if path.exists():    print(f"{path} exists")# 从文件中读取文本content = path.read_text()print(content)# 将文本写入文件path.write_text('Hello, world!')

在使用 pathlib 之前,我的代码中充满了 os.path 函数:Tvd28资讯网——每日最新资讯28at.com

import ospath = 'example_directory/example_file.txt'# 检查路径是否存在if os.path.exists(path):    print(f"{path} exists")# 从文件中读取文本with open(path, 'r') as file:    content = file.read()    print(content)# 将文本写入文件with open(path, 'w') as file:    file.write('Hello, world!')

使用 pathlib 使我的文件操作更简洁、更直观。它对于管理文件路径和简化文件处理任务尤其有用。试试 pathlib,看看它如何简化你的代码!Tvd28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-97277-0.html十个 Python 秘诀将颠覆你的编码方式

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 独角兽与新质生产力,合思入选长城战略咨询中国独角兽企业榜单

下一篇: 聊一聊 C# 弱引用底层是怎么玩的

标签:
  • 热门焦点
  • 鸿蒙OS 4.0公测机型公布:甚至连nova6都支持

    华为全新的HarmonyOS 4.0操作系统将于今天下午正式登场,官方在发布会之前也已经正式给出了可升级的机型产品,这意味着这些机型会率先支持升级享用。这次的HarmonyOS 4.0支持
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 7月安卓手机性价比榜:努比亚+红魔两款新机入榜

    7月登场的新机有努比亚Z50S Pro和红魔8S Pro,除了三星之外目前唯二的两款搭载超频版骁龙8Gen2处理器的产品,而且努比亚和红魔也一贯有着不错的性价比,所以在本次的性价比榜单
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 东方甄选单飞:有些鸟注定是关不住的

    作者:彭宽鸿来源:华尔街科技眼‍‍‍‍‍‍‍‍‍‍东方甄选创始人俞敏洪带队的“7天甘肃行”直播活动已在近日顺利收官。成立后一
  • 8月见!小米MIX Fold 3获得3C认证:支持67W快充

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都得到了不少爆料,而小米新一代折叠屏旗舰——小米MIX Fold 3此前也屡屡被传
  • 世界人工智能大会国际日开幕式活动在世博展览馆开启

    30日上午,世界人工智能大会国际日开幕式活动在世博展览馆开启,聚集国际城市代表、重量级院士专家、国际创新企业代表,共同打造人工智能交流平台。上海市副市
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top