在任何编程语言中,函数的应用主要出于以下两种情况:

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函数方法设计原则相关推荐

  1. python函数增强代码可读性_如何提高代码的可读性 学习笔记

    本文整理自 taowen 师傅在滴滴内部的分享. 1.Why 对一线开发人员来说,每天工作内容大多是在已有项目的基础上继续堆代码.当项目实在堆不动时就需要寻找收益来重构代码.既然我们的大多数时间都花在 ...

  2. python函数增强代码可读性_写Python必须知道的这几个代码技巧!你会吗?

    Day09 函数的初始 函数:函数是以功能为导向,一个函数封装一个功能.登录,注册,文件的改的操作... 函数减少代码的重复性,增强了代码的可读性: 获取任意一个字符串的元素的个数 s1 = &quo ...

  3. python函数能否增强代码可读性_python——初识函数

    一.初识函数定义与调用 #函数定义 defmylen():"""计算s1的长度"""s1= "hello world"l ...

  4. python海龟漂亮图案代码大全_带有海龟图案的Python花

    我在高中的编程课上和海龟图形一起工作,这个项目是按照老师演示的一些指导原则和功能制作一朵花.我在一个小时内就完成了,现在我正试图用更多的海龟一次画出多朵花,但我不能让海龟们使用新定义的函数,老师也没有 ...

  5. 使用数组方式代替switch增强代码可读性

    使用数组方式代替switch增强代码可读性 在进行前端学习+开发的过程中,个人提供一种一些特殊例子可以使用数组的arr.indexOf()来替代switch的代码. 举个例子,js的new Date( ...

  6. 编写计算正方体、圆柱体、球体的表面积和体积的类。要求: (1)这三个类有一个公共的基类; (2)这三个类计算正方体、圆柱体、球体的表面积和体积的成员函数名字相同; (3)按照运行时的多态性方法设计一个

    本文为博主原创文章,未经博主允许不得转载. 版权为陈博超所有,第一次于2020年11月24日发表于BLOG上 本BLOG上原创文章未经本人许可,不得用于商业用途.转载请经允许后注明出处,否则保留追究法 ...

  7. python 代码换行_你一定不知道的Python小技巧,提升你Python代码的可读性

    Python的初学者,开发者都应该知道的代码可读性提高技巧,本篇主要介绍了如下内容: PEP 8是什么以及它存在的原因 为什么你应该编写符合PEP 8标准的代码 如何编写符合PEP 8的代码 为什么我 ...

  8. 代码可读性_超越了源代码的可读性和理解

    代码可读性 The "Beyond the Source Code" series of posts will explore source code beyond its use ...

  9. python中home定义是什么_第48p,什么是函数?,Python中函数的定义

    原标题:第48p,什么是函数?,Python中函数的定义 大家好,我是 杨数 Tos ,这是<从 零 基础到大神>系列课程的第 48 篇文章 ,第三阶段的课程 : Python进阶知识:详 ...

最新文章

  1. nginx 启动 + uwsgi + django
  2. 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》...
  3. java 队列 array_Java源码解析阻塞队列ArrayBlockingQueue常用方法
  4. 前端学习(1162):箭头函数面试题
  5. oracle scn隐藏参数,Oracle隐含参数scn不一致启动
  6. 华为薪资等级结构表_华为21级程序员月薪曝光:月薪27w,什么概念!程序员中的战斗机...
  7. Node.js 爬虫初探
  8. Android 对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果
  9. 思维导向树6级节点_树形图或思维导图类似的数据结构中如何删除特定节点?
  10. oracle磁盘满了怎么办,ORACLE磁盘空间占满解决
  11. Mysql 启动命令详解
  12. tensorflow2.3实现街景语义分割(二)
  13. 计算机设备名称在哪里找,如何查看电脑驱动
  14. Storm Control 风暴控制
  15. OFDMA正交频分技术
  16. 遥感专业学习神经网络与深度学习过程中的想法
  17. Java基础break语句
  18. maplesim matlab,MapleSim 2020
  19. 微信小程序之手机号快速注册
  20. 概率分布详解 Bernoulli、Binomial、Beta

热门文章

  1. 这里天刚黑,而家里都已经后半夜了
  2. 神经网络训练集的图片到底是如何相互作用的?
  3. 用神经网络分类无理数2**0.5和3**0.5
  4. 到底应该用3*3的卷积核还是5*5的卷积核
  5. 用于计算机视觉领域的python第三方库是什么_大量Python开源第三方库资源分类整理,含菜鸟教程章节级别链接...
  6. 【PC工具】windows图片文字识别软件,天若OCR文字识别软件
  7. Flask的闪现(message) 请求扩展 中间件 蓝图
  8. 写给MongoDB开发者的50条建议Tip6
  9. 第四届中国国际大数据大会务实推进应用落地
  10. RabbitMQ(二):mandatory标志的作用