函数是什么呢?函数就是一个方法或则说一个功能的展现。
一、函数定义
1 def functionName(arguments):2 body....3 return value
第一部分:可以看见python函数是以一个def关键字开始的,后面跟着的就是函数名字functionName,紧接着小括号里面跟着的是这个函数的参数arguments。
第二部分:是函数的功能展示,需要实现什么功能在这里展示出来。第三部分:最后一部分是返回值。二、参数
函数的参数按照概念 分为实参和形参。
2.1形参
形参就是实参的傀儡,形参只是在功能展示的时候,用来替代实参的一个名字。就像玩游戏的时候你进入游戏的一个角色,你在游戏之外你是你自己,你进入游戏了你就是鲁班,你就是貂蝉。这英雄就是形参。
2.1.1静态形参
其实只要一个静态参数就可以满足90%的函数需求了,那为什么还有动态参数这个东西,我认为还是因为---懒。因为静态参数有一个不好的地方就是当需要输入的参数很多的时候,一个一个定义形参太麻烦了,这个时候动态参数就营运而生了。
1 def sum(*args):2 sum = 03 for i in args:4 sum += i5 return sum6 print sum(1,2,3,4,99)7 输出:8 >>109
我们讲回静态参数,静态参数就是你玩《英雄联盟》时候选择的英雄技能,q的功能就是禁锢,e就是防御,英雄技能否是固定好的,不会因为不玩莫甘娜,她的技能就变了。而动态参数就是召唤师技能,可以是闪现,也可以是治疗。
静态参数又可以细分为位置参数、关键字参数、默认参数。
位置参数:一个萝卜一个坑,有坑就必须就萝卜。
1 def mymax(x,y):2 return x if x > y else y3 print mymax(10,20)4 输出:5 >>20
关键字参数:这个时候的萝卜都是有编号的,对应哪个坑心里明白就行。
1 def mymax(x,y):2 return x if x > y else y3 print mymax(y = 10,x = 20)4 print mymax(x = 20,y = 10)5 输出:6 >>207 >>20
默认参数:坑里面已经有一个萝卜了,你需要用这个坑你就鸠占鹊巢,你不需要的时候呢,它就是那个被你欺负的萝卜。
1 def mymax(x,y,z=10):2 return max(x,y,z)3 print mymax(5,6)4 print mymax(5,6,7)5 输出:6 >>107 >>7
2.1.2动态形参
上面已经说了,形参是实参的傀儡,动态形参对应的实参可能不止一个对象。为什么要这么设置,刚刚说了,因为懒嘛。看看下面就知道了
*args-->tuple
一个*加一个名字 的参数对应实际输入为一个元组类型的参数
1 def sum(*args):2 sum = 03 for i in args:4 sum += i5 return sum6 print sum(1,2,3,4,99)7 输出:8 >>109
**args-->dict
两个*加一个名字 的参数对应实际输入为一个字典类型的参数1 def studensInfo(**kwargs):2 return kwargs.keys(),kwargs.values()3 print studensInfo(name = 'alex',sex = 'male')4 输出:5 >>(['name', 'sex'], ['alex', 'male'])
1 def func(a,b,c):2 print a,b,c3 dict1 = { 'a':1,'b':2,'c':3}4 func(**dict1) # 得到value5 func(*dict1) # 得到key,*dict1这的输入为一个元祖,元祖会根据参数的hash值排序(我好想记得网上有人说是根据hash值,具体得咱不去深究),所以输出为acb,而不是想象中的abc6 输出:7 >>1 2 38 >>a c b
总结:星元组星星字典
2.2实参
实参就是实际调用函数时候 传入的值
1 def sum(*args):2 sum = 03 for i in args:4 sum += i5 return sum6 print sum(1,2,3,4,99)
这里的“1,2,3,4,99”就是元组类型的实参。
1 def studensInfo(**kwargs):2 return kwargs.keys(),kwargs.values()3 print studensInfo(name = 'alex',sex = 'male')
这里的“name = 'alex',sex = 'male'”就是字典类型的实参。
对于这些乱七八糟的参数可以使用下图概括,原图来自网络,侵删。三、返回值
返回值就是函数功能实现完了之后,需要返回的一个参数。可以不需要,但是得记住,优秀程序员都喜欢返回值。
关键字:returnreturn后面的参数就是返回值需要知道的:1:一个函数要么没有返回值,要么只有一个返回值,不可能有多个返回值2:函数执行到return后,整个函数就结束了,哪怕后面有金子银子也不去捡了3:即使你程序中没有写返回值,程序结束后也会自动返回一个None,相当于C语言中的NULL1 def myMax(a,b):2 if a>b:3 return a4 else:5 return b6 print myMax(12,34)7 输出:8 >>34
1 #coding=utf-82 def myprint(a):3 print a4 myprint("脚让一让")#这个函数就是脱了裤子打屁,根本没有任何意义。5 输出:6 >>脚让一让