Python函数式编程-讲解函数

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'}

看这样也可以正常的输出。。。

函数这里就介绍到这里。看完了给点个推荐呗。。。。。嘻嘻

猜你喜欢

转载自www.cnblogs.com/mCarrYoung/p/9944639.html
今日推荐