1:为什么要用函数?
代码冗余
可读性差
函数的定义:
定义:def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个":"。
def 是固定的,不能变,必须是连续的def三个字母,不能分开。。。它们要相亲相爱的在一起。
空格 为了将def关键字和函数名分开,必须空(四声),当然你可以空2格、3格或者你想空多少都行,但正常人还是空1格。
函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能
括号:是必须加的,先别问为啥要有括号,总之加上括号就对了!
注释:每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。
调用:就是 函数名() 要记得加上括号,好么好么好么。
函数的返回值用return返回的。
def name(): n=o for i in range(5): n+=1 return(n) my_name=name print(my_name)
返回值会有很多种情况为NONE
你return的数值不对等等。
2.参数
分为:位置参数,默认参数,和动态参数。
位置参数:是指前面的形参,是按照下面的实参来变化的参数,下面的位置变化,会直接影响上面的变化例如:
def my_info(name,age) print(name,age) my_info('panyu','18') 答案:是panyu,18 def my_info(name,age) print(name,age) my_info(18,'panyu') 答案:18 panyu
默认参数:是指实参后面直接定义一个a=10或者别的b=20的参数,直接上面形参可以直接调用
1.def my_name(name,age): 2. print(name,age) 3.my_name(name=20,age=10)
4.i=my_name 答案:20 10
如果上面形参也定义了,name=10,还是会以实参为主,这里会涉及到一个程序运行的先后问题,
程序首先运行到def 函数时候会直接跳到实参那一行,调用实参的数据后,再从def函数开始运行,运行完成后会有一个值得返回,
这个值才是最终结果。参照:首先程序运行到1时,会直接跳过2,直接拿3中的数据,再返回1运行,再经过2,把值调出来,后面赋予i.
3,动态参数。
分为1,*args,2**kwargs.
1,*args 函数能把实参的数据,多余的会在最后添加一个元组,把剩余的全部添加进去。
def my_name(a,b,*args): print(a,b,args) my_name(2,35,6,7,8) 答案:2 35 (6,7,8)
这个显示出来的就是用元组集合在一起。
2,**kwargs,是为了默认函数而创建的,当实参a=1 或者b=2时,就可以用**kwargs。
def my_name(a,b,**kwargs): print(a,b,kwargs) my_name(2,35,c=1,d=2,e=3) 答案:2,35{'c':1,'d':2,'e':3}
可以看出用**kwargs的时候,就会形成一个字典,把默认参数的数据发送进去。
3,这里有一个先后的问题,如果一个程序里,既有默认函数,位置函数,还有动态函数('args,**kwargs),那他们的先后顺序是怎么样的。
def my_name(a,b,*args,**kwargs) print(a,b,args,kwargs) myname(1,2,3,4,5,6,7,8,c=1,d=2,e=3) 答案:1 2 (3,4,5,6,7,8,) {'c':1,'d':2,'e':3}
他们的先后顺序是位置参数,*args,,默认参数,最后才是**kwargs...