我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么重构冗长的Python代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么重构冗长的Python代码

1.将for循环转换为list/dictionary/set 表达式

我们在时经常遇到的一个情况是,创建一个值的集合。

举个例子,我们可以创建一个立方数字列表,通过迭代方式将其填充。大多数语言的标准方法如下:

cubes = []
for i in range(20):
    cubes.append(i ** 3)

在Python中,我们可以使用列表表达式,生成需要的数据。可以把这段代码压缩成一行,避免定义列表以及繁琐的填充操作。

cubes = [i ** 3 for i in range(20)]

看,我们已经将三行代码转换成一行,这无疑是不错的选择——你的眼睛不用上下左右的检查代码。

压缩代码到一行会增加阅读的困难度,但对于推导表达式来说,这种情况不适用。一旦您熟悉了语法,所有您所需的元素都呈现得非常清晰,这使其比for循环版本更易于阅读。

另一点是赋值现在更像是一个原子操作——我们声明什么是cubes,而不是给出如何构建它的指令。通过这样做,代码更易于阅读,因为我们关注的是变量cubes的含义而不是它的构造方式。

最后,表达式通常比在循环中构建集合更快,如果考虑性能,这也是重要因素。

2.用增量赋值替换赋值

增量赋值是一种快速而简单的Python语法。

只要有这样的代码:

count = count + other_value

都可以替换成下面的代码:

count += other_value

代码是简短和清晰的-我们不需要考虑计数变量两次。还有一些可用的运算符,包括减等于(-=)、按位与等于(&=)、除等于(/=)和乘等于(*=)。

你需要小心一点,因为你分配给的类型必须定义适当的运算符。例如,numpy数组不支持/=操作。

3.只使用一次的内联变量

我们在人们的代码中经常看到的一种情况是将结果赋给临时变量,然后立即返回它。

def state_attributes(self):
    """Return the state attributes."""
    state_attr = {
        ATTR_CODE_FORMAT: self.code_format,
        ATTR_CHANGED_BY: self.changed_by,
    }
    return state_attr

其实更好的方法是直接返回结果,而不是再用一个临时变量存放结果

def state_attributes(self):
    """Return the state attributes."""
    return {
        ATTR_CODE_FORMAT: self.code_format,
        ATTR_CHANGED_BY: self.changed_by,
    }

这样可以缩短代码并删除不必要的变量,从而减少阅读代码的脑力消耗。

当临时变量被用作参数或条件时,它们可能会有用处,并且名称可以反映出其内容。在上述示例中,返回的仅为state属性,且state_attr未提供任何额外信息。因此不必将结果赋给临时变量。

4.用if表达式替换if语句

经常会遇到的一种情况是,您经常希望将一个变量设置为两个不同值中的一个。

if condition:
    x = 1
else:
    x = 2

这可以使用Python的条件表达式语法(python的三元运算符版本)在一行上编写:

x = 1 if condition else 2

这肯定更简洁,但它是一个更有争议的重构(就像列表表达式)。有些程序员不喜欢这种表达方式,因为觉得与在if语句中完整写出条件相比,它们更难理解。

如果条件表达式比较简短且可以合并,那么这种改进可以提高效率,这是我们的观点。与列表表达式的示例类似,当我们阅读代码时,通常不需要知道x是如何分配的,只需看到它被赋值,然后继续向前。

5.用生成器代替不需要的表达式

转化为简单的句子:可以使用像any、all和sum这样的函数将生成器作为参数,而不是集合。这意味着,与其这样做:

hat_found = any([is_hat(item) for item in wardrobe])

可以将代码改成:

hat_found = any(is_hat(item) for item in wardrobe)

这将删除一对括号,使代码稍微清晰一些。如果any函数找到结果,会立即返回,而不必构建整个列表。这可以导致性能提升。

请注意,我们实际上是将生成器传递到any()中,严格地说,代码应该如下所示:

hat_found = any(is_hat(item) for item in wardrobe)

但是Python允许您省略这对括号。下面是接受generator的标准库函数:

'all', 'any', 'enumerate', 'frozenset', 'list', 'max', 'min', 'set', 'sum', 'tuple'

6.将条件简化为return语句

最后介绍的重构技巧是,函数需要返回结果是True或False的情况。一种常见的方法是:

def function():
    if isinstance(a, b) or issubclass(b, a):
        return True
    return False

但是,直接返回结果会更简洁,如下所示:

def function():
    return isinstance(a, b) or issubclass(b, a)

只有当表达式的计算结果为布尔值时,才能这样操作。例如

def any_hats():
    hats = [item for item in wardrobe if is_hat(item)]
    if hats or self.wearing_hat():
        return True
    return False

这个示例,可以通过bool()将hat和self.wearing_hat()合成bool列表,就可以消除if条件,达到简化程序的目的。

def any_hats():
    hats = [item for item in wardrobe if is_hat(item)]
    return bool(hats or self.wearing_hat())

以上就是怎么重构冗长的Python代码的详细内容,更多请关注编程网其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么重构冗长的Python代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

浅谈如何重构冗长的Python代码

这篇文章主要介绍了浅谈如何重构冗长的Python代码,编写干净的 Pythonic 代码就是尽可能使其易于理解,但又简洁,过长的代码如何做到简洁高效,需要的朋友可以参考下
2023-05-15

怎么更好地重构PHP代码

这篇文章主要介绍“怎么更好地重构PHP代码”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么更好地重构PHP代码”文章能帮助大家解决问题。#1 - 表现力这可能只是一个简单的技巧,但编写富有表现力的
2023-07-05

java代码重构的方法是什么

Java代码重构的方法有以下几种:1. 提取方法(Extract Method):将代码中的一部分抽取出来,封装成一个独立的方法,以提高代码的可读性和复用性。2. 提取变量(Extract Variable):将复杂的表达式或者重复的代码提
2023-10-11

Python删除重复行代码怎么写

在Python中,可以使用以下方法删除重复行代码:1. 使用set()函数:将代码行放入一个set集合中,因为set集合中只包含唯一的元素,所以重复的行会自动被删除。然后再将集合转化为列表返回。```pythondef remove_dup
2023-09-13

IDEA中重构代码的快捷键是什么

在IntelliJ IDEA中,您可以使用以下步骤来重构代码:选中要重构的代码块或者光标放置在要重构的位置。使用快捷键 Ctrl + Alt + Shift + T,或者右键单击选中的代码块,在上下文菜单中选择 “Refactor”(重构
IDEA中重构代码的快捷键是什么
2024-04-03

Python运算符重载的实例代码怎么编写

Python运算符重载的实例代码怎么编写,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。什么是运算符重载让自定义的类生成的对象(实例)能够使用运算符进行操作作用:让自定义的实例像
2023-06-26

Python源代码构架的三大主要结构是什么

这篇文章主要介绍“Python源代码构架的三大主要结构是什么”,在日常操作中,相信很多人在Python源代码构架的三大主要结构是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python源代码构架的三大主
2023-06-17

怎么写好的Python代码

本篇内容介绍了“怎么写好的Python代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!所谓 pythonic,我觉得包含两方面:一是代码的
2023-06-02

怎样用Python代码构建最小的区块链

怎样用Python代码构建最小的区块链,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。尽管一些人认为区块链是一个等待问题的解决方案,但毫无疑问,这种新技术是计算机的奇迹。但是,区
2023-06-17

python复制的代码怎么用

在 python 中使用复制的代码的步骤如下:将代码复制并粘贴到文本编辑器中。创建一个 python 文件。在命令行中运行代码。理解代码的用途和工作原理。根据需要修改代码并重新运行它。如何使用复制的 Python 代码在 Python 中
python复制的代码怎么用
2024-04-20

python怎么用别人的代码

如何使用他人的 python 代码?查找代码库:在 pypi 和 github 等平台上查找所需代码。安装代码:使用 pip 或克隆 github 仓库进行安装。导入模块:在脚本中使用 import 语句导入已安装的模块。使用代码:访问模块
python怎么用别人的代码
2024-05-05

大前端代码重构之事件拦截iOS Flutter Vue怎么实现

这篇“大前端代码重构之事件拦截iOS Flutter Vue怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“大前端代码
2023-07-05

Java/Python怎么找出无重复字符的最长子串

这篇文章主要讲解了“Java/Python怎么找出无重复字符的最长子串”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java/Python怎么找出无重复字符的最长子串”吧!题目:给定一个字符
2023-06-02

C++ 函数性能优化中的代码重构技巧是什么?

代码重构是提高 c++++ 函数性能的关键步骤,涉及改变代码结构和组织方式,无需改变功能。具体技巧包括:1. 内联函数以消除函数调用开销;2. 消除虚函数调用以消除虚表查找开销;3. 循环展开以减少分支预测开销;4. 指针消除以减少间接内存
C++ 函数性能优化中的代码重构技巧是什么?
2024-04-18

Java实现树形结构的代码怎么写

本篇内容介绍了“Java实现树形结构的代码怎么写”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!数据库表结构实现思路1、拿到有父子节点的集合数
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录