• 零基础学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-目录





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

  • 相关阅读:
    英雄会 高校俱乐部 题解(均分01)
    win7下装ubuntu
    UVA10142/PC110108Australian Voting
    解决打不开jar包
    pc110301QWERTYU
    寒假的ACM训练三(PC110107/UVa10196)
    寒假ACM训练(二)
    寒假的ACM训练(一)
    『ORACLE』授予hr用户查看执行计划权限(11g)
    『ORACLE』SPM(下)-baseline实验(11g)
  • 原文地址:https://www.cnblogs.com/raylee2007/p/4896730.html
Copyright © 2020-2023  润新知