这一章节我们来讨论一下函数的设计的一些习惯:
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.避免参与改变其他模块的变量
解决方案:可以使用一个中间模块来存储过程变量,或者直接使用数据库作为存储
总结:这一章节我们讨论了函数设计的一些习惯,希望大家能够养成,我们的目的就是函数跟外部的依赖越小越好,这样便于以后的复用
这一章节就说到这里,谢谢大家
------------------------------------------------------------------
版权声明:本文为博主原创文章,未经博主允许不得转载。