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

新手必看:优雅地避过Python常见错误,编写高效代码

来源: 责编: 时间:2024-04-25 17:38:31 121观看
导读美女曾说:“如果你坚持错误的编码习惯而不改变,你将永远找不到幸福。” 好吧,她并没有真的这么说,但一定是……如果她是一名Python开发者的话。停止错误做法的更好方法是练习正确的做法,但不要过度使用它们。有一些好的做

美女曾说:“如果你坚持错误的编码习惯而不改变,你将永远找不到幸福。” 好吧,她并没有真的这么说,但一定是……如果她是一名Python开发者的话。x6728资讯网——每日最新资讯28at.com

x6728资讯网——每日最新资讯28at.com

停止错误做法的更好方法是练习正确的做法,但不要过度使用它们。有一些好的做法我喜欢使用,但只在可读性不受影响时使用它们。x6728资讯网——每日最新资讯28at.com

Python以其简洁和可读性而受到开发者的青睐。然而,即使是经验丰富的程序员也可能陷入导致代码效率低下、可读性差和更容易出错的习惯。在这里,我们将探讨Python编程中的常见陷阱以及避免它们的重要性。x6728资讯网——每日最新资讯28at.com

if-else语句

Python中的if-else语句是一个基本的控制流程工具,它允许你根据某些条件执行不同的代码块。以下是如何在Python中使用if-else和elif(else if)语句:x6728资讯网——每日最新资讯28at.com

基本的if语句

如果指定的条件为真,则执行代码块。x6728资讯网——每日最新资讯28at.com

# 停止这样做:x = 10if x > 5: print("x is greater than 5")# 改为这样做:x = 10if x > 5: print(f"{x} is greater than 5")

这将在x确实大于5时输出:“x is greater than 5”。x6728资讯网——每日最新资讯28at.com

if-else语句

如果条件为真,则执行一个代码块,如果条件为假,则执行另一个代码块。x6728资讯网——每日最新资讯28at.com

# 停止这样做:x = 6def funcx(x):    if x > 5:        print(f"{x} is greater than 5")    else:        print(f"{x} is not greater than 5")funcx(x)# 改为这样做:x = 6def funcx(x):    # 首先呈现最频繁的情况,避免不必要的测试。    if x > 5: return f"{x} is greater than 5"    return f"{x} is not greater than 5"print(funcx(x))# 或者x = 6print(f"{x} is greater than 5" if x > 5 else f"{x} is not greater than 5")

显然,方法取决于上下文……x6728资讯网——每日最新资讯28at.com

这将输出:x is not greater than 5,因为x是3,它不大于5。x6728资讯网——每日最新资讯28at.com

if-elif-else链

用于检查多个条件。如果第一个条件为假,它将检查下一个条件(elif),依此类推。如果所有条件都不为真,它将执行else块中的代码。x6728资讯网——每日最新资讯28at.com

# 停止这样做:x = 5if x > 10:    print("x is greater than 10")elif x > 7:    print("x is greater than 7")elif x > 5:    print("x is greater than 5")else:    print("x is 5 or less")# 改为这样做:def test(x, value):    return f"{x} is greater than {value}" if x > value else f"x is {x}, less than or equal to {value}"print(test(5, 10))print(test(5, 7))print(test(5, 5))

利用函数防止重复。输出:x is 5 or less。x6728资讯网——每日最新资讯28at.com

这些结构是Python编程中的基础,并且用于控制基于不同条件的执行流程而不重复。x6728资讯网——每日最新资讯28at.com

在Python中,没有像C++或Java等其他编程语言中内置的switch或case语句。然而,你可以使用字典将案例映射到函数或值来实现类似的功能。这种方法通常更符合Python风格,可以更可读和高效。x6728资讯网——每日最新资讯28at.com

因此,停止这样做:

if case == 1:    return "This is case 1"elif case == 2:    return "This is case 2"elif case == 3:    return "This is case 3"else:    return "This is the default case"

这是如何使用字典实现类似switch结构的基本示例:x6728资讯网——每日最新资讯28at.com

# 改为这样做:def case1(): return "This is case 1"def case2(): return "This is case 2"def case3(): return "This is case 3"def default_case(): return "This is the default case"switch = {1: case1, 2: case2, 3: case3}def switch_case(case):    return switch.get(case, default_case)()# 示例用法print(switch_case(1))  # 输出:This is case 1print(switch_case(4))  # 输出:This is the default case

在这个示例中:x6728资讯网——每日最新资讯28at.com

  • 我们定义了一组函数(case1、case2、case3和default_case),它们对应于每个案例。
  • 我们创建了一个名为switch的字典,将案例键(如1、2、3)映射到相应的函数。
  • switch_case函数接受一个案例参数,使用get从switch字典中检索相应的函数,并调用它。如果找不到案例,它默认为default_case。

这种方法灵活,并且可以适应各种用例。你可以将案例映射到函数(如上所示),或者如果每个案例不需要复杂的逻辑,也可以直接映射到值。x6728资讯网——每日最新资讯28at.com

列表推导式是什么?

列表推导式是Python最受欢迎和独特的特性之一,它提供了一种简洁而富有表现力的方式来创建列表。这个强大的工具以一种可读和高效的方式转换和过滤数据。理解和有效使用列表推导式可以大大提升Python编程中的代码质量。x6728资讯网——每日最新资讯28at.com

列表推导式提供了一种简洁的方法,从其他列表或可迭代对象创建列表。它们在方括号内编写,就像常规列表一样,但包括一个表达式,后跟一个for子句,并且可选地,如果有子句。表达式可以是任何有效的Python表达式,它在for子句中的元素上操作。x6728资讯网——每日最新资讯28at.com

语法

列表推导式的基本语法是:x6728资讯网——每日最新资讯28at.com

[expression for item in iterable if condition]
  • expression:应用于可迭代对象中每个项目的Python表达式。
  • item:可迭代对象中的对象或值。
  • iterable:一个序列、集合或迭代器对象。
  • condition:一个可选的if语句,用于从可迭代对象中过滤项目。

示例

  • 基本列表推导式:
squares = [x ** 2 for x in range(10)]

这创建了一个从0到9的数字平方的列表。x6728资讯网——每日最新资讯28at.com

  • 带有条件逻辑的列表推导式:
even_squares = [x ** 2 for x in range(10) if x % 2 == 0]

这创建了一个从0到9的偶数平方的列表。x6728资讯网——每日最新资讯28at.com

  • 嵌套列表推导式:
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]flattened = [num for row in matrix for num in row]

这将一个矩阵展平为一个单一的列表。x6728资讯网——每日最新资讯28at.com

列表推导式的优点

  1. 简洁性和可读性:它们允许通过在序列中的每个项目上应用表达式,以一种清晰和简洁的行创建新列表。
  2. 性能:它们通常比传统的循环和map()调用更快,因为它们被优化为Python解释器在循环期间发现可预测的模式。
  3. 多功能性:它们可以用于广泛的任务,包括过滤元素、应用函数和转换数据。

最佳实践和限制

  • 避免过度复杂:对于非常复杂的表达式或操作,列表推导式的可读性优势可能会丧失,使得传统的for循环成为更好的选择。
  • 内存使用:由于列表推导式在内存中创建列表,它们可能不适用于大型数据集。在这种情况下,考虑使用生成器表达式。

停止这样做:

data = []for idx, value in enumerate(range(10)):    data.append({"key": value, "idx": idx})print(data)  # 输出:[{'key': 0, 'idx': 0}, {'key': 1, 'idx': 1}, ...]

改为这样做:

print([{"key": value, "idx": idx} for idx, value in enumerate(range(10))])

停止错误用法

不要过度使用列表推导式

列表推导式是Python中的一个强大特性,但过度使用它们会使你的代码难以阅读,特别是对于复杂操作。它们最适合用于简单的转换。对于更复杂的任务,考虑使用循环或生成器表达式,这些表达式更易于阅读。x6728资讯网——每日最新资讯28at.com

不要忽视Pythonic惯例

Python有一套称为“Pythonic”的惯用法惯例。这些包括在循环中使用enumerate() 、理解真理值测试和适当使用列表推导式。忽视这些惯例会使你的代码效率低下,其他Python开发者也难以理解。x6728资讯网——每日最新资讯28at.com

不要误用底层数据结构

理解和使用适合任务的正确数据结构至关重要。例如,使用列表进行需要频繁查找元素的操作可能会导致效率低下;集合或字典通常是更好的选择。始终考虑不同数据结构上操作的复杂性。x6728资讯网——每日最新资讯28at.com

不要避免使用标准库

Python的标准库功能丰富且多才多艺。不利用这些库可能导致重复造轮子,结果就是额外的工作和潜在的错误。像itertools、collections和functools这样的模块可以显著简化你的代码。x6728资讯网——每日最新资讯28at.com

不要编写长函数

长函数更难以维护和理解。Python鼓励编写小型、可重用的函数,每个函数做好一件事情。这不仅提高了可读性,也使调试更加容易。x6728资讯网——每日最新资讯28at.com

不要忽视错误处理

Python的错误处理机制,使用try-except块,经常被低估。有效的错误处理对于构建稳健的应用程序至关重要。重要的是捕获特定的异常并适当地处理它们,而不是使用一个广泛的except: pass语句。x6728资讯网——每日最新资讯28at.com

不要避免Pythonic循环

在Python中使用传统的C风格循环是一个常见的错误。Python提供了更有效、更易读的循环方式,例如使用for item in iterable:结构或列表推导式。x6728资讯网——每日最新资讯28at.com

不要忽视代码风格指南

Python的PEP 8为编写Python代码提供了一个风格指南。一致的编码风格提高了可读性和可维护性。像flake8或black这样的工具可以自动遵守这些风格。x6728资讯网——每日最新资讯28at.com

结论

通过避免这些常见错误,Python开发者可以编写更高效、更可读、更易于维护的代码。拥抱Pythonic实践不仅使你的代码优雅,而且也符合Python的哲学,使编程更加愉快和高效。x6728资讯网——每日最新资讯28at.com

记住,可读性是首要考虑的!x6728资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-85536-0.html新手必看:优雅地避过Python常见错误,编写高效代码

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

上一篇: Sentinel如何持久化数据到Nacos?

下一篇: 使用Stegsolve解答图片隐写

标签:
  • 热门焦点
  • Mate60手机壳曝光 致敬自己的经典设计

    Mate60手机壳曝光 致敬自己的经典设计

    8月3日消息,今天下午博主数码闲聊站带来了华为Mate60的第三方手机壳图,可以让我们在真机发布之前看看这款华为全新旗舰的大致轮廓。从曝光的图片看,Mate 60背后摄像头面积依然
  • 6月安卓手机好评榜:魅族20 Pro蝉联冠军

    6月安卓手机好评榜:魅族20 Pro蝉联冠军

    性能榜和性价比榜之后,我们来看最后的安卓手机好评榜,数据来源安兔兔评测,收集时间2023年6月1日至6月30日,仅限国内市场。第一名:魅族20 Pro好评率:95%5月份的时候魅族20 Pro就是
  • 从零到英雄:高并发与性能优化的神奇之旅

    从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 零售大模型“干中学”,攀爬数字化珠峰

    零售大模型“干中学”,攀爬数字化珠峰

    文/侯煜编辑/cc来源/华尔街科技眼对于绝大多数登山爱好者而言,攀爬珠穆朗玛峰可谓终极目标。攀登珠峰的商业路线有两条,一是尼泊尔境内的南坡路线,一是中国境内的北坡路线。相
  • 共享单车的故事讲到哪了?

    共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 年轻人的“职场羞耻感”,无处不在

    年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • 3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    3699元!iQOO Neo8 Pro顶配版今日首销:1TB UFS 4.0同价位唯一

    5月23日,iQOO推出了全新的iQOO Neo8系列,包含iQOO Neo8和iQOO Neo8 Pro两个版本,其中标准版搭载高通骁龙8+,而Pro版更是首发搭载了联发科天玑9200+旗舰
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
Top