自学python记录_(3)函数
函数是什么呢?函数就是一个方法或则说一个功能的展现。
一、函数定义
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 = 0 3 for i in args: 4 sum += i 5 return sum 6 print sum(1,2,3,4,99) 7 输出: 8 >>109
我们讲回静态参数,静态参数就是你玩《英雄联盟》时候选择的英雄技能,q的功能就是禁锢,e就是防御,英雄技能否是固定好的,不会因为不玩莫甘娜,她的技能就变了。而动态参数就是召唤师技能,可以是闪现,也可以是治疗。
静态参数又可以细分为位置参数、关键字参数、默认参数。
位置参数:一个萝卜一个坑,有坑就必须就萝卜。
1 def mymax(x,y): 2 return x if x > y else y 3 print mymax(10,20) 4 输出: 5 >>20
关键字参数:这个时候的萝卜都是有编号的,对应哪个坑心里明白就行。
1 def mymax(x,y): 2 return x if x > y else y 3 print mymax(y = 10,x = 20) 4 print mymax(x = 20,y = 10) 5 输出: 6 >>20 7 >>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 >>10 7 >>7
2.1.2动态形参
上面已经说了,形参是实参的傀儡,动态形参对应的实参可能不止一个对象。为什么要这么设置,刚刚说了,因为懒嘛。看看下面就知道了
*args-->tuple
一个*加一个名字 的参数对应实际输入为一个元组类型的参数
1 def sum(*args): 2 sum = 0 3 for i in args: 4 sum += i 5 return sum 6 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,c 3 dict1 = {'a':1,'b':2,'c':3} 4 func(**dict1) # 得到value 5 func(*dict1) # 得到key,*dict1这的输入为一个元祖,元祖会根据参数的hash值排序(我好想记得网上有人说是根据hash值,具体得咱不去深究),所以输出为acb,而不是想象中的abc 6 输出: 7 >>1 2 3 8 >>a c b
总结:星元组星星字典
2.2实参
实参就是实际调用函数时候 传入的值
1 def sum(*args): 2 sum = 0 3 for i in args: 4 sum += i 5 return sum 6 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'”就是字典类型的实参。
对于这些乱七八糟的参数可以使用下图概括,原图来自网络,侵删。
三、返回值
返回值就是函数功能实现完了之后,需要返回的一个参数。可以不需要,但是得记住,优秀程序员都喜欢返回值。
关键字:return
return后面的参数就是返回值
需要知道的:
1:一个函数要么没有返回值,要么只有一个返回值,不可能有多个返回值
2:函数执行到return后,整个函数就结束了,哪怕后面有金子银子也不去捡了
3:即使你程序中没有写返回值,程序结束后也会自动返回一个None,相当于C语言中的NULL
1 def myMax(a,b): 2 if a>b: 3 return a 4 else: 5 return b 6 print myMax(12,34) 7 输出: 8 >>34
1 #coding=utf-8 2 def myprint(a): 3 print a 4 myprint("脚让一让")#这个函数就是脱了裤子打屁,根本没有任何意义。 5 输出: 6 >>脚让一让