发外链网首页|会员中心|保存桌面|手机浏览

一碗蔡文姬

大数据,人工智能

站内搜索
 
  • 暂无链接
博客文章

学习编程几点经验分享

发布时间:2021-03-19        浏览次数:25        返回列表

1、形参与实参

函数的参数分为形式参数和实际参数,简称形参和实参。

形参即在定义函数时,括号内声明的参数。形参本质就是一个变量,用来接收外部传来的值

实参即在调用函数时,括号内传入的值,值可以是常量,变量,表达式或三者的组合

具体使用时又分为位置参数,关键字参数和默认参数

上述示例中,调用函数时以key=value形式的就是关键字参数,定义函数时name,age为位置参数,sex为默认参数。

注意:

调用函数时,实参可以是按位置或关键字的混合使用,但必须保证关键字参数在位置参数后面,且不可以对一个形参重复赋值

默认参数的值通常应设为不可变类型

2、可变长度参数*args和**kwargs

参数的长度可变指的是调用函数时,实参的个数可以不固定,而在调用阶段,实参无非是按照位置或者按关键字两种形式,因此就出现了两种解决方案来处理。

2.1 可变长度的位置参数

如果在最后一个形参名前加*号,那么在调用函数时,溢出的位置实参都会被接受,以元组的形式保存下来赋值给该形参。

2.2 可变长度的关键字参数

如果在最后一个形参名前加**号,那么在调用函数时,溢出的关键字参数,会以字典的形式保存下来赋值给形参。

2.3 组合使用

可变参数*args与关键字参数kwargs通常是组合在一起使用的,如果一个函数的形参为上述两种类型,那么代表该函数可以接收任何形式,任意长度的参数。在该函数内部还可以把接受到的实参传给另一个函数,这在后面推导装饰器时大有用处。

分析:

此处在给wrapper传参时,其遵循的事函数func的参数规则,第一步,位置参数1被接受,以元组形式保存下来赋值给args,即args=(1,),关键字参数y=2,z=3被**以字典形式接收赋值给kwargs,即kwargs={'y':2,'z':3};第二步,执行func(args,kwargs),即func((1,),{'y':2,'z':3}),等同于func(1,y=2,z=3)。

3、函数对象和闭包

函数对象指的是函数可以被当做"数据"来处理,具体可以分为四个方面的使用

3.1 函数可以被引用

总结:郑州看不孕不育医院哪家好https://jbk.39.net/yiyuanzaixian/zztjyy/

闭包函数提供了一种新的为函数体传参的方式,为了给f2传值,在他的同级作用域给了他一个值,f2在整体缩进,外层再给他嵌套一个函数f1包起来。此时f1从原来的全局变成了局部,为了使我们在全局依然可以调用它,通过return函数对象再返回到全局。

三、什么是装饰器

上边讲了这么多,可能大家有点疑惑怎么还不介绍装饰器。不用急,这也是我们在学习中常犯的错误,急于求成反而不利于对知识的吸收好消化理解。其实在潜移默化中,我们已经把大部分构成装饰器的基本知识提到了,只是还未进行归纳整理。下面我们又将重新一步一步推导它的由来。

定义:定义一个函数(类),该函数专门用来为其他函数(对象)添加额外的功能。

装饰器本质上是一个python函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/类对象。它经常用于有切面需求的场景,比如:插入日志,性能测试,事务处理,缓存,权限校验等场景。

四、为什么用装饰器

我们在为一个对象添加新功能时,往往秉持着开放封闭原则。

开放:指的是对拓展功能是开放的

封闭:指的是修改源代码是封闭的

即在不修改被装饰对象源代码和调用方式的情况下为被装饰对象新增功能。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码到装饰器中并继续重用。

0条  相关评论