目录
函数
在开发过程中,如果需要反复实现某一个功能的代码段就是函数,比如每次打印的时候都会调用print()函数。等等...
定义函数的格式如下
def 函数名([参数列表]):
'函数文档字符介绍'
函数体
return 语句(返回值)
#调用函数
函数名([传入参数])
还是之前的比喻,老师罚我抄英文单词100遍,然后第二天又被老师罚了50遍,那么之前的代码是不是需要两次for in循环,现在有了函数就直接可以开发这一项的罚写的功能。代码如下:
#方法一
def write1(number,string):
#开发一个罚写的功能,这样老师罚我我就直接调用这个功能哦
print(string*number)
#返回值可有可无,看自己的需求
#方法二
def write2(number,string):
#开发一个罚写的功能,这样老师罚我我就直接调用这个功能哦
return print(string*number) #返回这段代码
#方法三
def write3(number,string):
#开发一个罚写的功能,这样老师罚我我就直接调用这个功能哦
a = string*number
return a #返回这段代码
#调用方法一的函数
write1(10,'linux')
#调用方法二的函数
write2(10,'linux')
#调用方法三的函数
a = write3(10,'linux')
print(a)
以上的三种的结果是一致的
这里面需要强调函数的传递,这里面有两个名称一个叫形式参数,另一个叫实际参数,而把形式参数传递给实际参数的过程就是函数的传递。
形式参数:就是定义函数的过程中命名的参数名称,这个函数名称不具备任何数据的就好比数学里面的f(x)的 ‘x’,这个x是没有具体值的。可以为1也可以为100;
实际参数:就是形式函数要传参的来源是实际参数,就好比数学里面的f(x) = sinx,求f(0.5)中的0.5就是实际参数,如果要赋值,求出结果就是函数的传递。
函数的传递
位置参数的传递:如我写的write1-3这三个函数代码里面的参数"string"和"number"这两个参数,如果调用函数的时候这样写如:write('python',10)的时候,代码会运行错误,因为在定义形式参数的过程当中,number是int类型,而string是str类型,看实现的代码是string*number,string可以是int和string,而number只能是int的格式。传入实际参数的过程的时候不能传反哦。
关键字传参:这个可以不随位置改变而改变参数的位置,见下面代码:
#这个可以不随位置改变而改变参数的位置,需要把形式参数实际化
write1(string = "linux",number = 20)
默认参数的传递:在函数传递的过程当中可以指定默认值,当用户没有输入数据时候,函数会调用定义的函数的默认数据,见下面代码:
#number赋予一个默认值10,只要数据部传入其他数据就用这个数据
def write1(string,number=10):
#开发一个罚写的功能,这样老师罚我我就直接调用这个功能哦
print(string*number)
#返回值可有可无,看自己的需求
write1('windows')
这个需要强调的是默认值只能写在最后,不能放在最前。
参数的打包和解包
当我们传入数据不知道有多少个参数,这个时候不能向上面那样一个一个创建形式参数,因为你不知道传入的参数有多少,这个时候需要将参数打包传入,看代码:
#定义一个形参*args
def tt(*args):
print(args)
#传入tt当中
tt(1,2,3,4,5,6,7,8) #可以传入任意多个参数
// 输出1,2,3,4,5,6,7,8
#定义一个**kwargs
def tt(**kwargs):
print(kwargs)
tt(a =11,b = 12, c = 33)
// 输出{"a":11,"b":12,"c":33}
解包就是将传入的打包的传入的数据解开传入,解开的结果和本次函数输出的结果一致。
混合传递:可以将上方几种传参的方式混合传参,但是要注意形式参数的位置。看代码:
def te (a,b,c = 33,*args,**kwargs): #这个形式参数的位置一定是这样的
print(a,b,c,args,kwargs)
本周笔记完毕,下周继续。