1.函数的表示:用关键字def来定义一个函数
def test(x): #此处tesx括号里的x是形式参数,可写可不写,一般来说只有在代码块里把所有的东西都写好了不用传参数进去的时候才不用写x #这行空着的的是函数描述,告诉接手的人这个函数是拿来干嘛的 x = x+1 #代码块,很多行 return x #函数的返回值
2.函数的形参与实参
形参 只有在被调用时才分配内存单元,调用结束后会立刻释放。因此形参只有才函数内部有效,函数结束返回主调函数后就不能再用这个形参了实参是调用时传给函数的参数,可以是常量、变量等等
3.参数形式
a.位置参数和关键字参数:
比如这里我们有一个函数def test(x,y,z),当我们调用此函数:test(1,2,3)时,解释器会默认按顺序x=1,y=2,z=3,这时我们把这种按位置赋值的方式叫位置参数;另外关键字参数是:test(x = 1,z = 3,y = 20),我们就不用考虑位置顺序而是通过关键字来传参数,这称为关键字参数
b.默认参数:
就是函数默认会赋予某个参数一个值,我们调用参数的时候可以再赋一个值去覆盖它原来的默认值。 比如:def test2(x,y = None) 我们调用这个函数的时候可以不去给Y赋值,y有一个默认的值none,但是我们一旦给y赋值了,这个值就会覆盖y的默认值
c.参数组:
例如 def test3(x,*args,**kwargs):
在这里,这个*args和**kwargs,它们两个是特殊的,调用函数的时候哪怕不给它们值也不会报错;这两个形参,前面的*args可以读除了字典的所有元素,后面的**kwargs可以读字典,也就是说,有了这两个形参在,这个函数什么类型的实参都可以读取这里的*args,会将你按照位置参数输入的实参以一个整体读取(当你在传实参而且不想让*args按整体读取的时候,你可以在你的实参前面加上一个*,这个*的作用是让*args遍历你传的实参,并且一个一个加进去),并且用元组的方式将其输出
比如:
def test (x,*args,**kwargs): print(x) print(args) print(kwargs) test(1,{'acv':456},[5,6,8,1,3],(4,8,6,),2,3,5,8,1,5,4,{33:'acr'},y=2,z=3) #test(1,*(2,3,4,8,9,6,2))
===>1 ({'acv': 456}, [5, 6, 8, 1, 3], (4, 8, 6), 2, 3, 5, 8, 1, 5, 4, {33: 'acr'}) #输出了一个元组 {'y': 2, 'z': 3} #y和z最后都变成了字典
3.函数的调用:直接写函数名即可
test(2)return的值是作为函数的一个结果,没有return的函数称为'过程'
return值:
=0 时,返回none
=1 时,返回object
>1 时,返回tuple
4.函数可以减少重复的代码,也就是减少工作量
5.补充
然后函数最好写得精简,不要写得太长