Python之函数的参数,匿名函数,zip函数,装饰器概念。

函数的参数:

若函数中的所实现的需求涉及到一些未知项参与运算
【这些未知项需要函数的调用者来决定】,
这时候我们就可以将此未知项设置为参数。


位置参数【又称必选参数】

传递参数的顺序与定义的顺序有关,必须按照定义的顺序来进行传递。
传递参数的个数与参数的个数必须保持一致。


关键字参数:

指函数调用的时候,可以通过"键-值"的形式来加以指定,
可以清除位置关系。

当出现位置参数与关键字参数的时候,需要将位置参数写在关键字参数前面


默认参数

定义函数的时候,我们可以给参数提供默认值,调用函数的时候可以传递此参数
可以不传,当传递此参数的时候,函数则使用传递的参数,若不传递则使用默认值。
优点:方便函数的调用

注意:
1.若默认参数与位置参数同时存在的时候,位置参数要写在默认参数的前面,否则python解释器会报错
2.给定默认参数的时候,默认参数需要指向不可变对象。
3.有多个默认参数的时候,可以按顺序提供默认参数,当不按顺序提供参数的时候需要使用关键字参数进行调用。
例:

def student(name, sex, age = 6, city = '广州'):
	print("name :", name)
	print("sex :",sex)
	print("age :",age)
	print("city :",city)
#函数调用
student('lili', 'boy')
student('lili', 'boy', 7)
student('lili', 'boy', city='Beijing')

如何设置默认参数

当函数有多个参数时,把变化大的参数放在前面,变化小的放在后面,变化小的可以作为默认参数。


不定长参数【可变参数】

不定长参数
定义函数的时候,我们不确定调用的时候到底会传递多少参数进来【可能传递1个也可能多个或者不传递】
此时我们可以使用不定长参数来进行参数传递【不定长参数又包括包裹位置参数与包裹关键字参数】

特点:能处理比声明时候更多的参数【传递多少参数,处理多少参数,不传递不处理】


不定长参数分为两种:

包裹位置参数
格式:* 变量名
一般用* args
功能:可以收集除了必选参数以外剩余的位置参数,按照元组来进行处理。

传进去的所有参数都会被args变量收集,他会根据传进参数的位置合并成一个元组(tupe),args是元组类型,这就是包裹位置传递。

与之前形参不同的是在hoby的变量名之前添加了“* ”
添加了星号( *)的变量名会存放所有未命名的变量参数
如果在函数调用时没有指定参数,它就是一个空的元组


包裹关键字参数:
格式:** 变量名
一般用** kwargs
功能:收集除定义的变量的关键字参数之外,剩余关键字参数。
包裹关键字参数只处理剩余的关键字参数,收集作为字典来进行处理。

注意:当位置参数【必选参数】,默认参数,包裹位置参数,包裹关键字参数同时存在的情况下,一般的顺序为:
位置参数,默认参数,包裹位置参数,包裹关键字参数
在使用**kwargs的时候,传递参数必须使用关键字传参


匿名函数:

定义:指的是一类无须定义标识符【函数名】的函数或者子程序。
在python中定义匿名函数使用lambda来进行定义。

语法

lambda 参数列表: 表达式

特点
1.lambda后面的跟的只是一个表达式,结构体比def的简单
2.参数列表可以有多个参数,参数与参数之间使用逗号隔开
**3.**无须写return,表达式的结果就是该表达式的返回值。
优点
1.结构简单
2.匿名函数没有名字无须担心函数名的冲突。

匿名函数的调用
将lambda表达式赋值给一个变量,通过调用变量来调用我们的匿名函数。
例:

func = lambda a,b: a if a>b else b
print(func)
print(type(func))
print(func(10,20))

拓展
zip函数
zip(iter1,iter2,...)

功能:打包,将可迭代对象中对应位置的元素分成一个个元组进行打包,
长度取决于最短的那个,返回zipobj打包好的对象,以迭代器的方式返回


zip(*zipobj)

解包:将之前打包的元素进行解包处理,以迭代器方式返回。


装饰器

定义:在代码运行的期间动态的增加功能的方式我们称之为装饰器。

def outer(func):
    def inner():
        #增强的功能
        #在内函数中执行func函数
        return func()
    return inner

例:

def outer(func):
    def inner():              注: 参数列表
        print("*********")     注:添加增加的功能
        return func()           注: 参数列表
    return inner
@outer
def now():
    print("2019-6-13")
    return True

在装饰器中,分为外函数与内函数
外函数(outer)
1.将被装饰的函数传递进来 :func
2.将装饰好的函数返回给调用者 :inner

内函数:
1.添加动态增加的功能
2.执行被装饰的函数

内函数中return什么时候可以省略?
注意:当被装饰的函数没有返回值的时候,内函数的return可以省略,
若被装饰的函数中存在返回值,则内函数的return则不能省略。


@装饰器
def func():
    pass

@的功能:将被装饰的函数的函数名作为参数传递给外函数,将外函数返回的
替代版的函数赋值给原本的函数。

说明:比如在公司实际开发的过程中,如果有一个别人写好的函数,你想向其中添加某些功能或者修改某些功能,而人家要求你不能随意修改人家的函数,则这时就可采用装饰器,在不修改别人的源码的同时,还可以增加自己的功能。


def outer(func):
    def inner(参数列表):
        #添加增加的功能
        return func(参数列表)
    return inner

注意:
1.使用内函数来接收被装饰函数的参数
2.调用被装饰的函数的时候,需要将参数传递进去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值