Python函数优点:
函数是用户自己编写好的,因为在很多的情况下一个程序的运行需要重复很多的同一种工作,这个时候可以把重复工作的代码封装成一个函数,每次使用的时候只需要调用这个函数就可以了,就算实在修改代码的时候,我们也只是修改自定一的函数块的代码就可以了,不用修改很多的代码,这样带给我门的开发效率提高了很多。
如何定义一个函数:
- 自定义的函数必须是def开头
- 需要使用到的参数必须放在小括号内,每个参数之间使用逗号隔开
- 在括号后面需要使用冒号(:)来说明下一行代码是函数体,并且函数体的代码需要缩进
- 函数结束时如果需要返回值需要return返回,return后可以跟列表、自变量、字典、元组等等。。
定于函数的语法:在直接输入实际参数的情况下,参数的对应关系是根据参数的位置来定义的
1 def 函数名(参数1,参数2): 2 """这里是函数体的代码""" 3 """实现相应的功能""" 4 pass
接下来咱们看一个例子:写一个打印的函数来打印参数1和参数2的值:
1 def print_func(x,y): 2 print('x==',x,'y==',y)
函数是定义好了,那么如何来使用自定义函数:
使用函数也是灰常的简单:直接:函数名(),如果函数有参数,在括号内写上参数如果没有就不用写了
1 def print_func(x,y): 2 print('x==',x,'y==',y) 3 #执行函数 4 print_func(1,2)
x== 1 y== 2
好了,函数的创建和使用说完了,那么接下来到了重点了:
在实现一些功能的时候,有时我们自己也不知道需要传入多少个参数,有的可能只需要传入1个,有的时候需要传入2个,这个时候就不能使用以上这种函数的定义方式了,因为参数是可变长的,我们只能使用*args或者是**kwagrs,
说了这么多,这两个参数到底是什么意思呢?
*args | 如果实际参数中传入了很多值,打印args的时候他是打印了一个包含这些值的一个元组 |
**kwargs | 这个大家看名字不知道能不能看出来,k代表key,w代表word,这样就明白了,打印kwargs是打印的一个字典 |
接下来,我们就看下代码是如何编写的,这么牛逼的功能我们多少应该试试是吧:
1 def test1(*args): 2 print(args) 3 4 #执行函数 5 test1(1,2,3,4,5)
看,这里我的自定义函数就只有一个参数,而下面调用参数的时候我传入了很多的参数,那么打印效果是什么呢?看下面
他是将我输入的参数当作了元组来输出的。我们使用的时候只需要将元素在元组中提取出来就可以了,还是很方便的,不用写那么多的参数了
接下来看下**kwargs如何使用:
1 def test2(**kwargs): 2 print(kwargs) 3 4 #执行函数 5 test2(name="爱啃萝卜的兔子",age = '22',gerden = '女')
这个和上面的一样也是值有一个形式参数,打印下,看效果
看这个打印出来是字典的形式吧,这个时候就可以使用字典名[‘key’]来进行值的提取
好了,上面的介绍完了,下面说下函数参数的匹配规则:在其他的语言中,定义一个函数或者是一个方法,在调用的时候,每个实际参数对应一个形式参数,这个是不能修改的,但是在强大Python中似乎打破了这一个规则,呃呃呃呃,不能说似乎,而是就是打破了这一个规则,看代码来了解下Python中的参数如何匹配:
先来介绍第一种匹配规则,这个是常见的一种,根据参数的位置来匹配参数:
def test5(x,y,z): print('x-->',x,'y-->',y,'z-->',z) test5(1,2,3)
x--> 1 y--> 2 z--> 3
这种就是常见的1对应形参的x,2对应y,3对应z
问:那么还有一种匹配规则是什么呢?
答:通过参数的名字来匹配
def test5(x,y,z): print('x-->',x,'y-->',y,'z-->',z) test5(z=1,x=2,y=3)
x--> 2 y--> 3 z--> 1
还是上面的代码,这次我在实际参数传入的过程中发生了改变,我把传入参数的位置打乱了,并没有按照x,y,z的顺序来传入,而是通过参数的名字来指定了值来打印的,在下面打印的结果,还是按照正确的值打印的,x传入2,z传入1,y传入3,这个也是一种参数的匹配规则。
上面刚刚介绍了*args和**kwargs,如果这两个参数和一些普通参数同时使用,这时是如何匹配的呢?
1 def test5(x,*args): 2 print('x-->',x) 3 print('agrs-->',args) 4 5 test5(1,2,3)
x--> 1
agrs--> (2, 3)
看到代码和打印的结果大家应该也知道了,一个实际参数对应的是x,后面的两个参数对应的是args,注:这种方式就不能使用上面所说的通过参数名来指定参数的方法了
接下里看下**kwargs和普通参数在一块是如何匹配的:
1 def test5(x,**kwargs): 2 print('x-->',x) 3 print('agrs-->',kwargs) 4 5 test5(2,name = '爱啃萝卜的兔子',age = '22')
x--> 2 agrs--> {'name': '爱啃萝卜的兔子', 'age': '22'}
这种匹配的方式是:把带有key,word的参数放到kwargs,里面其他的参数根据位置来匹配,但这这个**kwargs和普通参数的参数匹配还可以写成另外一种方式,就是上面说过的通过参数名来指定参数的方式:
1 test5(name = '爱啃萝卜的兔子',age = '22',x=2)
x--> 2 agrs--> {'name': '爱啃萝卜的兔子', 'age': '22'}
看这样也可以正常的输出。。。
函数这里就介绍到这里。看完了给点个推荐呗。。。。。嘻嘻