python函数能否增强代码可读性_总结的几个Python函数方法设计原则
在任何编程语言中,函数的应用主要出于以下两种情况:
1.代码块重复,这时候必须考虑用到函数,降低程序的冗余度
2.代码块复杂,这时候可以考虑用到函数,增强程序的可读性
当流程足够繁杂时,就要考虑函数,及如何将函数组合在一起。在Python中做函数设计,主要考虑到函数大小、聚合性、耦合性三个方面,这三者应该归结于规划与设计的范畴。高内聚、低耦合则是任何语言函数设计的总体原则。
1.如何将任务分解成更有针对性的函数从而导致了聚合性
2.如何设计函数间的通信则又涉及到耦合性
3.如何设计函数的大小用以加强其聚合性及降低其耦合性
【聚合】
每个函数只做一件事
完美的程序设计,每个函数应该而且只需做一件事。
比如说:把大象放进冰箱分三步:把门打开、把大象放进去、把门关上。
这样就应该写三个函数而不是一个函数拿所有的事全做了。这样结构清晰,层次分明,也好理解!
【大小】
保持简单、保持简短
Python即是面向过程的语言,也是面向对象的语言,但更多的是充当脚本语言的角色。
同样的功能,使用Python来实现其代码长度也许是C/C++/Java等语言的1/3. 几百行代码就能实现不小的功能!
如果项目中设计的一个函数需要翻页才能看完的话,就要考虑将函数拆分了。
在Python自带的200多个模块中,很少看到某个函数有两、三页的。
Python代码以简单明了著称,一个过长或者有着深层嵌套的函数往往成为设计缺陷的征兆。
【耦合】
输入使用参数、输出使用return语句
这样做可以让函数独立于它外部的东西。参数和return语句就是隔离外部依赖的最好的办法。
慎用全局变量
第一重考虑: 全局变量通常是一种蹩脚的函数间的进行通信的方式。
它会引发依赖关系和计时的问题,从而会导致程序调试和修改的困难。
第二重考虑: 从代码及性能优化来考虑,本地变量远比全局变量快。
根据Python对变量的搜索的先后顺序: 本地函数变量==》上层函数变量==》全局变量==》内置变量
从上面可以看出,本地变量优先被搜索,一旦找到,就此停下。下面专门对其做了测试,测试结果如下: import profile
A = 5
def param_test():
B = 5
res = 0
for i in range(100000000):
res = B + i
return res
if __name__=='__main__':
profile.run('param_test()')
>>> ===================================== RESTART =====================================
>>>
5 function calls in 37.012 seconds #全局变量测试结果:37 秒
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 19.586 19.586 19.586 19.586 :0(range)
1 1.358 1.358 1.358 1.358 :0(setprofile)
1 0.004 0.004 35.448 35.448 :1()
1 15.857 15.857 35.443 35.443 Learn.py:5(param_test)
1 0.206 0.206 37.012 37.012 profile:0(param_test())
0 0.000 0.000 profile:0(profiler)
>>> ===================================== RESTART =====================================
>>>
5 function calls in 11.504 seconds #局部变量测试结果: 11 秒
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
1 3.135 3.135 3.135 3.135 :0(range)
1 0.006 0.006 0.006 0.006 :0(setprofile)
1 0.000 0.000 11.497 11.497 :1()
1 8.362 8.362 11.497 11.497 Learn.py:5(param_test)
1 0.000 0.000 11.504 11.504 profile:0(param_test())
0 0.000 0.000 profile:0(profiler)
避免改变可变类型参数
Python数据类型比如说列表、字典属于可变对象。在作为参数传递给函数时,有时会像全局变量一样被修改。
这样做的坏处是:增强了函数之间的耦合性,从而导致函数过于特殊和不友好。维护起来也困难。
这个时候就要考虑使用切片S[:]和copy模块中的copy()函数和deepcopy()函数来做个拷贝,避免修改可变对象
具体参考这篇文章: Python中的深浅拷贝详解
避免直接改变另一个模块中的变量
比如说在b.py文件中导入a模块,a中有变量PI = 3.14, 但b.py想将其修改为:PI = 3.14159, 在这里你就搞不清楚变量PI原先的值到底是多少。碰到这种情况,可以考虑用易懂的函数名来实现: #模块a.py
PI = 3.14
def setPi(new):
PI = new
return PI
这样既有自己想要的PI的值,又没有改变a模块中PI的值 import a
PI = a.setPi(3.14159)
print PI;a.PI
python函数能否增强代码可读性_总结的几个Python函数方法设计原则相关推荐
- python函数增强代码可读性_如何提高代码的可读性 学习笔记
本文整理自 taowen 师傅在滴滴内部的分享. 1.Why 对一线开发人员来说,每天工作内容大多是在已有项目的基础上继续堆代码.当项目实在堆不动时就需要寻找收益来重构代码.既然我们的大多数时间都花在 ...
- python函数增强代码可读性_写Python必须知道的这几个代码技巧!你会吗?
Day09 函数的初始 函数:函数是以功能为导向,一个函数封装一个功能.登录,注册,文件的改的操作... 函数减少代码的重复性,增强了代码的可读性: 获取任意一个字符串的元素的个数 s1 = &quo ...
- python函数能否增强代码可读性_python——初识函数
一.初识函数定义与调用 #函数定义 defmylen():"""计算s1的长度"""s1= "hello world"l ...
- python海龟漂亮图案代码大全_带有海龟图案的Python花
我在高中的编程课上和海龟图形一起工作,这个项目是按照老师演示的一些指导原则和功能制作一朵花.我在一个小时内就完成了,现在我正试图用更多的海龟一次画出多朵花,但我不能让海龟们使用新定义的函数,老师也没有 ...
- 使用数组方式代替switch增强代码可读性
使用数组方式代替switch增强代码可读性 在进行前端学习+开发的过程中,个人提供一种一些特殊例子可以使用数组的arr.indexOf()来替代switch的代码. 举个例子,js的new Date( ...
- 编写计算正方体、圆柱体、球体的表面积和体积的类。要求: (1)这三个类有一个公共的基类; (2)这三个类计算正方体、圆柱体、球体的表面积和体积的成员函数名字相同; (3)按照运行时的多态性方法设计一个
本文为博主原创文章,未经博主允许不得转载. 版权为陈博超所有,第一次于2020年11月24日发表于BLOG上 本BLOG上原创文章未经本人许可,不得用于商业用途.转载请经允许后注明出处,否则保留追究法 ...
- python 代码换行_你一定不知道的Python小技巧,提升你Python代码的可读性
Python的初学者,开发者都应该知道的代码可读性提高技巧,本篇主要介绍了如下内容: PEP 8是什么以及它存在的原因 为什么你应该编写符合PEP 8标准的代码 如何编写符合PEP 8的代码 为什么我 ...
- 代码可读性_超越了源代码的可读性和理解
代码可读性 The "Beyond the Source Code" series of posts will explore source code beyond its use ...
- python中home定义是什么_第48p,什么是函数?,Python中函数的定义
原标题:第48p,什么是函数?,Python中函数的定义 大家好,我是 杨数 Tos ,这是<从 零 基础到大神>系列课程的第 48 篇文章 ,第三阶段的课程 : Python进阶知识:详 ...
最新文章
- nginx 启动 + uwsgi + django
- 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》...
- java 队列 array_Java源码解析阻塞队列ArrayBlockingQueue常用方法
- 前端学习(1162):箭头函数面试题
- oracle scn隐藏参数,Oracle隐含参数scn不一致启动
- 华为薪资等级结构表_华为21级程序员月薪曝光:月薪27w,什么概念!程序员中的战斗机...
- Node.js 爬虫初探
- Android 对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
- 思维导向树6级节点_树形图或思维导图类似的数据结构中如何删除特定节点?
- oracle磁盘满了怎么办,ORACLE磁盘空间占满解决
- Mysql 启动命令详解
- tensorflow2.3实现街景语义分割(二)
- 计算机设备名称在哪里找,如何查看电脑驱动
- Storm Control 风暴控制
- OFDMA正交频分技术
- 遥感专业学习神经网络与深度学习过程中的想法
- Java基础break语句
- maplesim matlab,MapleSim 2020
- 微信小程序之手机号快速注册
- 概率分布详解 Bernoulli、Binomial、Beta
热门文章
- 这里天刚黑,而家里都已经后半夜了
- 神经网络训练集的图片到底是如何相互作用的?
- 用神经网络分类无理数2**0.5和3**0.5
- 到底应该用3*3的卷积核还是5*5的卷积核
- 用于计算机视觉领域的python第三方库是什么_大量Python开源第三方库资源分类整理,含菜鸟教程章节级别链接...
- 【PC工具】windows图片文字识别软件,天若OCR文字识别软件
- Flask的闪现(message) 请求扩展 中间件 蓝图
- 写给MongoDB开发者的50条建议Tip6
- 第四届中国国际大数据大会务实推进应用落地
- RabbitMQ(二):mandatory标志的作用