Python重构 - 第2部分

基于小波分解和多策略修复的彩色纺织品图像修复系统 本文提出了一种基于小波分解和多策略修复的彩色纺织品图像修复系统。该系统利用小波变换将图像分解为低频和高频子带,针对不同子带特性采用差异化修复策略:低频子带采用Criminisi算法或部分卷积网络处理整体结构,高频子带使用门控卷积网络修复纹理细节。系统实现了完整的小波分解与重构流程,支持RGB三通道独立处理,提供了传统算法和深度学习两种修复模式。实验表明,该方法能有效保持纺织品图像的周期性纹理和色彩一致性,优于单一修复策略。系统代码开源,包含详细的质量评估模块,为纺织品图像修复提供了实用解决方案。 关键词:小 阅读详情

编写干净的 Python 代码就是要使其尽可能易于理解且简洁。后期便于维护,代码约简洁越好维护,bug就越好排查。

'with’打开文件时使用以确保关闭

在 Python 中打开和使用文件的常用方法是:

file = open("welcome.txt")
data = file.read()
print(data)
file.close() # 这里一定要close

但是,如果在打开和关闭文件之间抛出异常,则最终可能会跳过对 file.close() 的调用。解决此问题的一种方法是使用这样的代码。这里的try…finally结构确保文件将被关闭。

file = open("welcome.txt")
try:
    data = file.read()
    print(data)
finally:
    file.close()

很显然,这种方式很繁琐,虽然这已经解决了文件关闭问题,但它非常冗长。这就是 Python 的with上下文管理器可以派上用场的地方。在幕后,这与try…finally示例的行为方式相同- 一旦退出错,文件就会为您关闭,即使抛出异常也是如此。

with open("welcome.txt") as file:
    data = file.read()
    print(data)

这段代码更短且更易于阅读 - 让您专注于重要的逻辑而不是文件关闭的细节。

使用默认获取简化字典访问

如果键存在,我们经常想从字典中挑选一些东西,如果不存在,则使用默认值。一种方法是使用这样的条件语句:

def pick_hat(available_hats: Dict[Label, Hat]):
    if self.favourite_hat in available_hats:
        hat_to_wear = available_hats[self.favourite_hat]
    else:
        hat_to_wear = NO_HAT
    return hat_to_wear

一个有用的快捷方式是 Python 词典有一个get()方法,可以让您使用第二个参数设置默认值。因此,我们可以将上面的代码缩短为:

def pick_hat(available_hats: Dict[Label, Hat]):
    hat_to_wear = available_hats.get(self.favourite_hat, NO_HAT)
    return hat_to_wear

这减少了代码并删除了一些重复。需要注意的一点是,如果您不传入默认值,它将使用None.

简化负面清单访问

在 Python 中,您可以使用负索引访问列表的末尾。所以my_list[-1]得到最后一个元素,my_list[-2]得到倒数第二个,依此类推。
这意味着你可以把这个:

a = [1, 2, 3]
last_element = a[len(a) - 1]

进入更简单的:

a = [1, 2, 3]
last_element = a[-1]
在保护条件之后删除不必要的 else

一个常见的代码模式是在函数的开始处有一些保护子句,以检查某些条件是否已满足并提前返回或在未满足时引发异常。

def f(a=None):
    if a is None:
        return 42
    else:
        # some long calculations
        var = (i ** 2 for i in range(a))
        return sum(var)

虽然这是完全有效的代码,但它可能会遇到嵌套过多的问题,尤其是在函数的其余部分相当长的情况下。
在这里,我们可以利用这样一个事实,即我们不需要elseif 主体if 以returnor结尾中断控制流raise。重写此处所示的函数在逻辑上是等效的。

def f(a=None):
    if a is None:
        return 42

    # some long calculations
    var = (i ** 2 for i in range(a))
    return sum(var)

以这种方式使用保护条件或多个保护条件现在不会导致函数的其余部分缩进。一般来说,我们处理缩进的次数越少,代码就越容易理解。

将 for 循环转换为对 sum() 的调用

大部分编程都是关于将事物列表相加,Python 有内置sum()函数来帮助解决这个问题。
您可以for以这种方式重写对列表求和的循环:
前:

total = 0
for hat in hats:
    total += hat.price

后:

total = sum(hat.price for hat in hats)

这要短得多,这是一个明确的奖励。代码现在还明确地告诉您它要做什么 - 对所有帽子的价格求和。

将返回提升到 if

这是稍微简化代码的快速方法。在 if 的每个分支上设置一个值然后立即返回,而不是直接从每个分支返回它。
这意味着像这样的代码:

def f():
    if condition:
        val = 42
    else:
        val = 0
    return val

转换为:

def f():
    if condition:
        return 42
    else:
        return 0

这消除了我们必须在心理上跟踪的不必要的中间变量。

innovus: 如何让两个generate clock balance skew group? 如题,在sdc约束中两个generate clock被设置到同一个clock group中,工具虽然会生成对应的两个skew group,但是阅读ccoot_spec发现工具并没有让两个skew group进行balance,这时就需要手动设置balance skew group。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 阅读详情

相关推荐

重构 Python 代码系列之一

前言 对自己写的冗长代码,想重构但又无思路?这里整理了系列介绍python代码重构优化的方法,助你一臂之力。这是 Python 重构系列的第一部分,系列文章会陆续推出。 真诚邀请您关注「数学与程序」,您的关注是我不断创作的源泉! 文章目录前言1.将for循环转换为list/dictionary/set 表达式2.用增量赋值替换赋值3.只使用一次的内联变量4.用if表达式替换if语句5.用生成器代替不需要的表达式6.将条件简化为return语句 1.将for循环转换为list/dictionary/se

rome的数学和编程空间 719

【两方演化博弈代码复现】:双方演化博弈的原理、概率博弈仿真、相位图、单个参数灵敏度演化

演化博弈论是研究个体在特定环境中如何通过策略选择与其他个体进行互动的学科。这一理论在生物学、经济学和社会科学等多个领域都有广泛应用。本文将深入探讨双方演化博弈的原理及其过程,并解读一段 MATLAB 代码,展示如何模拟这一过程。

当回首往事的时候,不会因虚度年华而悔恨,也不会因碌碌无为而羞愧。 6199

Python Sprint 报告

为了便于参考,这里是关于本次 sprint[1] 的 wiki 页面和 py3k 的wiki页面。Python 3000 Sprint 的成果我将从本次 sprint 的 Py3k 部分的成果开始,因为我是最直接地参与了。热身在本次 sprint 的前几周,我已经对解释器做了几处深层次的修改,比如将 classic class[2]完全去掉,并且去掉了绝大多数的 has_key()

Guido van Rossum 博客中文版 1万+

UE5热更新(通过Pak包加载关卡资源,并添加到流关卡)

请先阅读我上一篇文章)**

xialuhui的博客 6456

Isaac Sim 使用经验(配置要求,云服务器)

Google Colab及AutoDL都是在docker内运行,其中google colab并不支持docker指令,而依照AutoDL的相关文档,AutoDL并不直接提供docker指令。2. Google Colab/AutoDL 不支持图形化界面,图形渲染等任务,所以没有办法使用Omniverse Streaming进行直播,从而更好的对结果进行展示。对于第一点,或许存在直接手动复现镜像的可能,但是考虑到Isaac Sim/Isaac Lab由于比较新,可能不够稳定,因此还是按照官方文档进行部署。

weixin_44211433的博客 4589

【亲测免费】 推荐:PyUVM——Python实现的通用验证方法论库

推荐:PyUVM——Python实现的通用验证方法论库 1. 项目介绍 PyUVM 是一个基于Python实现的Universal Verification Methodology(UVM),它利用了Cocotb来与仿真器交互和调度模拟事件。不同于传统采用SystemVerilog的UVM,PyUVM巧妙地利用了Python动态类型和不需参数化类的优势,对UVM的部分组件进行了重构,使其更简洁易用...

gitblog_00067的博客 1248

Palantir解密:说人话,到底什么是“本体”?

笔者2018年在云计算公司开展政企数字化专项时,便意识到全面数字化进程背后存在大量未知领域,尤其是未来数字世界的底层架构如何构建这一关键问题。可惜因为种种原因,连那几个小专项最终都未能落地,也就无从深入了。近期看了很多有关Palantir的材料,倒觉得这像是新硅谷(区别于比尔盖茨、扎克伯格等主导的硅谷时代)交出的一份关于“数字世界底层架构”的答案,至于这个答案是否成立、有没有更优解、我们本土对标的版本是什么,可能都还待看。《Palantir解密》系列尝试通过解析Palantir,来系统回答这一问题。

SZSDQJC的博客 2158

gma 2.0.9 (2024.05.12) | GmaGIS alpha-2 更新日志

请使用几何自检测方法:io.ReadVector().GeomSelfTest() 替代。链接:https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?链接:https://pan.baidu.com/s/1HCalK2iTF3BEIGyHUK7b_g?:修复一个针对自定义坐标系出现的WKID获取失败而导致坐标系无法预览的bug(但不影响使用)。:新增坐标系查询、创建、保存、读取等功能。:地图制图、气候气象、遥感指数、栅格代数。:内容工具、预览工具。

weixin_42155937的博客 686

Xilinx PCIe IP核示例工程仿真流程与关键任务解析

本文详细解析了Xilinx PCIe IP核示例工程的仿真流程与关键任务。通过搭建仿真环境、解读初始化日志,并深入剖析TSK_TX_MEMORY_WRITE_32等核心任务的TLP报文生成与交互过程,帮助开发者掌握PCIe IP核的仿真调试方法,为实际硬件设计提供可靠的验证基础。

weixin_28314575的博客 507

YOLO模型轻量化实战:剪枝、量化与知识蒸馏三大技术落地详解

这篇文章结合我自己的实战经验,从原理、操作、效果、避坑四个方面,给大家讲清楚了YOLO模型轻量化的三大核心技术:剪枝、量化、知识蒸馏。先明确应用场景,再选择合适的技术组合,不要盲目追求极致压缩,要在“大小、速度、精度”之间找平衡。实战才是最好的学习方式——大家可以先拿自己的数据集试试剪枝和量化,感受一下效果,有问题可以在评论区留言。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 594

淘宝自动登录2(1)

的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

2401_83817418的博客 1053

软考中级-软件设计师 知识点整理(一篇就过了 建议收藏)

软考中级-软件设计师上午题知识点总结

片言可决讼,半纸能缚龙 17万+

Python Web Crawler

Python版本:3.5.2 pycharm URL Parsing¶ https://docs.python.org/3.5/library/urllib.parse.html?highlight=urlparse#urllib.parse.urlparse >>> from urllib.parse import urlparse >&gt...

211

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

如何看待PyTorch 2.0?

为什么是TorchDynamoGraph capture 把用户 Python 写的模型代码变成 graph,是一切编译的根基。而 PyTorch 在试了这么多方案之后似乎已经锁定 TorchDynamo 作为 graph capture 的未来方向了,所以写一点关于 TorchDynamo 的内容,主要是解释到底为什么要做这个东西(离开FB一年了,内容主要凭自己的猜测和理解)。一句...

OneFlow深度学习框架 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

pyuvm: 使用Python编写的UVM资源

pyuvm: 使用Python编写的UVM资源 【下载地址】pyuvm使用Python编写的UVM资源 pyuvm 是一个基于 Python 的通用验证方法库,旨在通过 Python 的灵活性简化 UVM(Universal Verification Methodology)环境搭建。它摒弃了 SystemVerilog...

gitblog_06709的博客 568

python中syntaxerror,Python:SyntaxError

I'm writing a script to parse an email, but there is some SyntaxError on the for loop in the following part:def main():writer = csv.DictWriter(open('features.csv', 'w'), list(EXTRACTS.keys()))for mail...

weixin_42515295的博客 468

ASLAM CV2:开源计算机视觉算法库

ASLAM CV2:开源计算机视觉算法库 ASLAM CV2 是一个开源的计算机视觉算法库,由 ETH Zurich 的 Autonomous Systems Lab (ASL) 开发。该项目致力于提供高质量、可重用的计算机视觉算法。主要使用 C++ 编程语言,同时包含部分 Python 和 CMake 代码。 1. 项目基础介绍 ASLAM CV2 旨在为研究者和开发者提供一个包含多种计算机视觉...

gitblog_00573的博客 490

anaconda里的python怎么实现图像重构_使用递归神经网络的单/多视图图像进行体元重建...

3D-R2N2: 3D Recurrent Reconstruction Neural NetworkThis repository contains the source codes for the paper Choy et al., 3D-R2N2: A Unified Approach for Single and Multi-view 3D Object Reconstruction, ...

weixin_39823299的博客 424

01_关于CAR_HMI2的一些想法

欢迎来到我的博客,希望这篇文章对你有所帮助,如果觉得不错,请点赞搜藏哈。 文章目录关于CAR_HMI2的一些想法1 历史版本2 新版构想3 写在最后的话 关于CAR_HMI2的一些想法 哈哈这篇文章将是我《CAR_HMI2》的第一篇文章。将简单和大家交代一下关于这个新坑的一下想法。 关于这个版本的汽车仪表系统,最近也一直在想到底怎么做,是否要找人重新设计制作一套新的UI出来;在想重新开这个坑的意义在哪里。思来想去,最终还是决定沿用以前的UI资源,换的是新的想法及实现方式。 1 历史版本 上一个版本的汽车.

DreamLife&Yaothos 972

[Anne]在Dashboard中展示第二张报表

本篇博客会先添加一张新用户相关的报表,然后提取两次添加报表相同的模块,对代码进行重构,方便之后的报表添加 展示新用户报表 对于一个应用来说新用户也是一个十分重要的观测数据 首先在数据库中新建一张new_user表并添加一些数据 CREATE TABLE new_user( `date` date, `province` varchar(20), `new_user` int, primary key(`date`, `province`) ); INSERT INTO new_user VALUES

charizard90的博客 285

Bob 大叔升级版《代码整洁之道》(第2版)出版

作为程序员,我们的专业主权不再体现在烦琐的敲击代码 操作上,而是回归到架构师、评审者与伦理守护者的角色——通过各项原则与规范为 AI 划定工作 的逻辑红线,用 AI 的效率抵消原则与规范落地的高昂成本。读懂整洁代码的底层逻辑,践行专业严谨的编程准则,善用AI赋能开发、以原则规范技术落地,在人机协作的新时代,跳出低效编码的桎梏,打造高质量、可维护、可扩展的软件系统,真正实现从“会写代码”到“写好代码”,再到“精通软件架构、坚守职业匠心”的蜕变成长。总体而言,介绍了“整洁”在代码层级的定义。

人邮异步社区 1080

Python重构 - 第1部分

有时候回头看自己之前写的代码,觉得真的是不堪入目啊,哈哈哈,各种if嵌套,for循环一层又一层,代码过于冗长,代码看起来既不美观,又没啥可读性,甚至还影响运行速度。 所以对于编写简洁、易于理解、可读性好的程序还是很有必要的,接下来总结一些常见的重构方法,希望借此自己总结一下经验,也顺便给大家分享一下! 一、遇到多个if条件判断 太多的嵌套会使代码难以理解,在Python中尤其如此,因为Python中没有括号来帮助描述不同的嵌套级别。 阅读深层嵌套的代码令人困惑,因为您必须跟踪哪些条件与哪些级别相关。因此,我

托马斯的博客 940

【python】函数重构

通过函数重构,可以改善代码的质量和可维护性,提高开发效率和代码的可读性。检查函数的参数是否过多或过少,是否有不必要的参数,可以考虑重新设计参数,使函数的接口更清晰和简洁。检查函数的参数是否过多或过少,是否有不必要的参数,可以考虑重新设计参数,使函数的接口更清晰和简洁。函数的命名应该准确地描述函数的功能和作用,可以根据函数的具体功能和语义重新命名。函数的命名应该准确地描述函数的功能和作用,可以根据函数的具体功能和语义重新命名。如果函数的逻辑过于复杂,可以将其拆分成多个较小的函数,每个函数只负责一部分逻辑。

翡翠泪滴的博客 1965

python小波分解与重构_小波分解和重构

小波变换能够很好地表征一大类以低频信息为主要成分的信号,小波包变换可以对高频部分提供更精细的分解详见(http://www.cnblogs.com/welen/articles/5667217.html)小波分解函数和重构函数的应用和区别(https://www.baidu.com/link?url=NsLWcGxYPabqB0JEFzkjHzeLmcvGkjDRccPoaD7K0gwo9mrHR...

weixin_39608457的博客 6050

Python编码系列—Python代码重构:提升代码质量

在软件开发的过程中,随着业务需求的不断变化和功能的增加,代码往往会变得越来越复杂。代码重构是提高代码质量、优化代码结构的重要手段。本文将探讨Python代码重构的技巧和实际应用,结合项目案例,为优快云社区的读者们展示如何通过重构提升代码的可读性和可维护性。代码重构是指在不改变软件外部行为的前提下,对代码内部结构进行调整和优化的过程。重构的目的是为了提高代码的可读性、可维护性和性能,同时降低未来修改和扩展代码的难度。代码重构是软件开发中不可或缺的一部分,它不仅可以提升代码质量,还可以提高开发效率。

u013889591的专栏 1353

压缩感知重构算法之OMP算法python实现

压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构算法之OLS算法python实现 压缩感知重构算法之IRLS算法python实现本文主要简单介绍了利用python代码实现压缩感知的过程。压缩感知简介【具体可以参考这篇文章】 假设一维信号x

程序员学编程 的专栏 2万+
上一篇: 通过Flask的request对象获取url
下一篇: Python格式化时间 - locale使用
Thomas_Lean
博客等级 码龄9年 58粉丝 72原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值