Python学习第六天——函数和模块的使用

函数的作用
编码大师Martin Fowler先生说过:“代码有很多坏味道,重复是最坏的一个!”可以将计算的功能封装到一个称为“函数”的功能模块中,在需要计算的地方,只需要调用这个函数就行。
定义函数
在python中可以使用def关键字来定义函数,和变量一样,每个函数也有自己响亮的名字,而且命名规则跟变量的命名规则是一致的。可以将函数与数学中的函数类比,程序中函数的参数就相当于数学上说的函数的自变量,而函数执行完成后我们可以通过return关键字来返回一个值,相当于数学上说的因变量。
在了解如何定义函数之后,我们就可以对上面的代码进行重构,所谓重构就是在不影响代码执行结果的前提下对代码的结构进行调整。事实上,python中有很多模块其实是包含很多函数的,可以直接使用现成的函数而不用自己定义。实际开发中不建议把它们重新实现一遍,做这种低级的重复性的工作。
函数的参数
函数是大多数编程语言都支持的一个代码的“构建块”,但是python中的函数与其他语言中的函数还是有很多不太同的地方,一个显著的区别就是python对函数参数的处理。在python中,函数的参数可以由默认值,也支持使用可变参数,所以python并不需要其他语言一样支持函数的重载,因为我们在定义一个函数的时候,可以让它有多种不同的使用方式。
上面两个函数的参数都设定了默认值,也就意味着如果在调用函数的时候没有传入对应参数的值时将使用该参数的默认值,所以在上面的代码中可以用各种不同的方式去调用add函数,这跟其他很多语言中函数重载的效果是一致的。
其实,可以有更好的实现方案,可能对0个或多个参数进行加法运算,而具体有多少个参数是由调用者来决定,作为函数的设计者的我们对这一点是一无所知的,因此在不确定参数个数的时候,可以使用可变参数*安然公司,例如
def add(*args):
用模块管理函数
对于任何一种编程语言,起名字都是一个让人头疼的问题,可能会遇到命名冲突的尴尬的情况,最简单的场景是在同一个.py文件中定义两个同名函数,由于python没有函数重载的概念,后面的函数的定义会覆盖之前的定义,也就意味着两个函数同名函数实际上只有一个是存在的。
python中每个文件就代表了一个模块(module),在不同的模块中可以有同名的函数,在使用函数的时候我们通过import关键字导入指定的模块就可以区分到底要使用的是哪个模块中的函数。需要说明,如果我们导入的模块除了定义函数之外还有可以执行代码,那么python解释器在导入这个模块时就会执行这些代码,事实上我们并不希望如此,因此如果我们在模块中编写了执行代码,最好是将这些执行代码放入如下所示的条件中,这样的话除非直接运行该模块,if条件下的这些代码不会执行的,因为只有直接执行的模块的名字才是“main”。
python查找一个变量时会按照“局部作用域”、“嵌套作用域”、“全局作用域”和“内置作用域”的顺序进行搜索,所谓“内置作用域”就是python内置的那些隐含标识符min/len等都属于内置作用域。可以使用关键字global来指示函数中的变量来自于全局作用域。
实际开发中,应该尽量减少对全局变量的使用,因为全局变量的作用域和影响过于广泛,可能会发生意料之外的修改和使用,除此之外全局变量比局部变量拥有更长的生命周期,可能导致对象占用的内存长时间无法被垃圾回收。事实上,减少对全局变量的使用,也是降低代码之间耦合度的一个重要举措,同事也是对迪米特法则的践行。减少全局变量的使用就意味着我们应该尽量让变量的作用域在函数的内部,但是如果我们希望将一个局部变量的生命周期延长,使其在函数调用结束后依然可以访问,这时候就需要使用闭包,这个我们在后续的内容中进行讲解。
说了那么多,其实结论很简单,以后将代码的格式按照下面的格式来进行书写

def main():
#Todo:Add your code here
	pass

if __name__ == '__main__':
	main()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值