`
李灵晖-raylee
  • 浏览: 128561 次
博客专栏
Group-logo
从头认识java
浏览量:0
文章分类
社区版块
存档分类
最新评论

零基础学python-18.1 函数的设计

 
阅读更多

这一章节我们来讨论一下函数的设计的一些习惯:

1.耦合性:输入使用参数,输出使用return

推荐方式:

>>> def test(x):
	print(x)
	return x+1

>>> a=1
>>> test(a)
1
2
>>> 

反面教程:

>>> a=1
>>> def test():
	global a
	a=a+2

	
>>> test()
>>> a
3
>>> 


2.耦合性:如非必要,不使用全局变量,这是因为减少函数与参数间的依赖关系

反面教材:

>>> a=1
>>> def test():
	global a
	a=a+2

	
>>> test()
>>> a
3
>>> 

上面的代码显示一种非常不好的编程习惯,使用全局变量作为通信的手段

推荐方式:

>>> a=1
>>> def test(x):
	return x+2

>>> a=test(a)
>>> a
3
>>> 


3.不要改变可变类型里面的对象,除非调用者想这么干

反面教材:

>>> a=[1,2,3]
>>> def test(x):
	x[2]=5

	
>>> test(a)
>>> a
[1, 2, 5]
>>> 

推荐方式:

>>> a=[1,2,3]
>>> def test(x):
	tmp=x[:]
	tmp[2]=5
	print(tmp)

	
>>> test(a)
[1, 2, 5]
>>> a
[1, 2, 3]
>>> 

上面的代码使用了a这个列表,但是由于函数里面已经复制了一遍,所以不会修改a,而输出只是修改之后的另一个对象

当然,如果本身a就想改变,反面教材里面的例子倒是正确的


4.聚合:尽量使方法功能单一集中

反面例子:

>>> def test(a,b):
	return (a+b),(a*b)

>>> test(1,3)
(4, 3)
>>> 
上面的例子我们在一个方法里面做了乘法与加法

推荐方式:

>>> def plus(a,b):
	return a+b

>>> def muti(a,b):
	return a*b

>>> def test(a,b):
	return plus(a,b),muti(a,b)

>>> test(4,3)
(7, 12)
>>> 

我们应该把方法分开了,这样如果以后需要单独的乘法,我们就可以重复使用muti或者plus方法

>>> muti(4,3)
12
>>> plus(4,3)
7
>>> 

5.避免参与改变其他模块的变量

解决方案:可以使用一个中间模块来存储过程变量,或者直接使用数据库作为存储


总结:这一章节我们讨论了函数设计的一些习惯,希望大家能够养成,我们的目的就是函数跟外部的依赖越小越好,这样便于以后的复用


这一章节就说到这里,谢谢大家

------------------------------------------------------------------

点击跳转零基础学python-目录





版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    Python 核心编程 第二版

    第1部分占据了大约三分之二的篇幅,阐释这门语言的“核心”内容,包括基本的概念和语句、语法和风格、 Python对象、数字类型、序列类型、映射和集合类型、条件和循环、文件和输入/输出、错误和异常、函数和函数式...

    廖雪峰Pyhton教程3.x版[完整版]

    3 Python基础 17 3.1 数据类型和变量 18 3.2 字符串和编码 25 3.3 使用list和tuple 34 3.4 条件判断 39 3.5 循环 43 3.6 使用dict和set 45 4 函数 50 4.1 调用函数 52 4.2 定义函数 54 4.3 函数的参数 58 4.4 递归...

    Python核心编程第二版

     第3章 Python基础   3.1 语句和语法   3.1.1 注释(#)   3.1.2 继续(\)   3.1.3 多个语句构成代码组(:)   3.1.4 代码组由不同的缩进分隔   3.1.5 同一行书写多个语句(;)   3.1.6 ...

    Python编程入门经典

    18.1 Python语言中的数值 347 18.1.1 整数 348 18.1.2 长整数 348 18.1.3 浮点数 349 18.1.4 格式化数值 350 18.1.5 作为数值的字符 352 18.2 数学 353 18.2.1 算术运算 354 18.2.2 内置数学函数 355 18.3 复数 357 ...

    python3.x Opencv Toturial

    6 OpenCV 中的绘图函数 6.1 画线 6.2 画矩形 6.3 画圆 6.4 画椭圆 6.5 画多边形 6.6 在图片上添加文字 7 把鼠标当画笔 7.1 简单演示 7.2 高级一点的示例 8 用滑动条做调色板 8.1 代码示例 III 核心操作 9 ...

    像计算机科学家一样思考Python(第2版).pdf

    这是一本实用的学习指南,适合没有Python编程经验的程序员阅读,也适合高中或大学的学生、Python爱好者及需要了解编程基础的人阅读。对于首次接触程序设计的人来说,是一本不可多得的佳作。 作者简介 · · · · ...

    Python核心编程第二版(ok)

     第3章 Python基础   3.1 语句和语法   3.1.1 注释(#)   3.1.2 继续()   3.1.3 多个语句构成代码组()   3.1.4 代码组由不同的缩进分隔   3.1.5 同一行书写多个语句(;)   3.1.6 模块...

    Python Cookbook

    17.8 从Python可调用的C函数中返回None 611 17.9 用gdb调试动态载入的C扩展 613 17.10 调试内存问题 614 第18章 算法 616 引言 616 18.1 消除序列中的重复 619 18.2 在保留序列顺序的前提下消除其中的重复 ...

    dive into python

    18.1. 概览 18.2. 使用 timeit 模块 18.3. 优化正则表达式 18.4. 优化字典查找 18.5. 优化列表操作 18.6. 优化字符串操作 18.7. 小结 A. 进一步阅读 B. 五分钟回顾 C. 技巧和窍门 D. 示例清单 E. 修订...

    Python 科学计算

    1.1 Python 简介......................................1 1.2 安装软件包......................................2 1.2.1 Python(x,y)..................................... 2 1.2.2 Enthought Python ...

    《Python编程金典》读书笔记

    18.1. 知识点 18.2. 良好的编程习惯 18.3. 移植性提示 19. 多线程处理 19.1. 知识点 19.2. 性能提示 19.3. 常见编程错误 19.4. 测试和调试提示 19.5. 性能提示 20. 联网 20.1. 知识点 20.2. 常见编程...

    Dive Into Python 中文版

    第 1 章 安装 Python........................................................................................................................................7 1.1. 哪一种 Python 适合您? ..................

    C++数据抽象和问题求解(第6版).[美]Frank M. Carrano(带详细书签).pdf

    这本经典、畅销的数据结构教材详细介绍了数据抽象的基础知识,强调作为面向对象方法基础原理的规范和实施之间的区别。书中使用的软件工程原则和概念以及UML图便于增强学生的理解。 ◆ 详细介绍了数据抽象,强调规范...

    MySQL 5.1官方简体中文参考手册

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 ...

    Java Bug模式详解

    2.2.2 Python 2.2.3 ML 2.2.4 Pascal 2.3 规范的好处 2.4 实现方案与规范的差异 2.5 利用素材建立经济有效的规范 2.5.1 通过测试来排除 规范错误 2.5.2 单元测试的缺陷 2.6 小结 第3章 调试和开发过程 ...

    代码之美(中文完整版).pdf

    第18章 Python的字典类:如何打造全能战士 18.1. 字典类的内部实现 18.2. 特殊调校 18.3. 冲突处理 18.4. 调整大小 18.5. 迭代和动态变化 18.6. 结论 18.7. 致谢 第19章 NumPy中的多维迭代器 19.1 N维数组操作中的...

    MySQL 5.1参考手册

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 ...

    算法心得:高效算法的奥秘(原书第2版).[美]Henry S.Warren,Jr(带详细书签).pdf

    第2章 基础知识 11 2.1 操作最右边的位元 11 2.1.1 德摩根定律的推论 12 2.1.2 从右至左的可计算性测试 13 2.1.3 位操作的新式用法 14 2.2 结合逻辑操作的加减运算 16 2.3 逻辑与算术表达式中的不等式 17 2.4...

    MySQL5.1参考手册官方简体中文版

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 ...

Global site tag (gtag.js) - Google Analytics