文章目录
- 前言
- 一、函数的参数
- 1、形参和实参
- 2、必传参数(也叫:必须参数)
- 3、关键字传参
- 4.、默认参数
- 5、不定长参数
- 6、传参的顺序
- 二、匿名函数(lambda函数)
- 1. 定义及特点语法格式
- 2. lambda函数的特点
- 三、函数返回值return
- 四、局部变量与全局变量
- 1. 局部变量
- 2. 全局变量
- 3. 当全局变量遇到局部变量
- 4. 用global在函数内部修改全局变量
前言
对于函数参数,这个地方,刚开始的时候,我根本没有理解到。我也是理解了很久,后面理解了,但是在使用过程中,其实也在出错。所以在这里就专门的总结一下。
一、函数的参数
1、形参和实参
形参:在我们定义函数的时候,括号里的参数就叫形参
实参:在我们调用函数的时候,传入的参数就是实参
可以理解为:形参就是一个形式的参数,摆在那个位置作为一个形式的参数
其中,numb1和numb2就是形参;3和4就是实参。
形参是我们定义函数的时候有的,而实参是我们调用函数传入的。
2、必传参数(也叫:必须参数)
python函数参数大致可以分为4种,即必传参数,关键字参数,默认参数和不定长参数。先来说说必传参数,必传参数是在函数调用时必须要传入的参数,而且传入的实参要和定义时的形参位置要一一对应,不然会报错或者结果不符合预期。如下:
传入的实参和形参位置不对,结果不同。因此,对于必传参数来说,传入的实参个数和形参个数一定要相同,而且位置也要一一对应。
当然上面的例子是看不出来的,那么下面的这个例子就可以体现出来位置对应的重要性。
3、关键字传参
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时实参顺序与形参顺序不一致,因为 Python 解释器能够用参数名匹配参数值。如下:
这种传参的方式是最推荐的,原因是:
(1)可以很明确的知道,这个函数里面的形参的名字是什么。
(2)无论参数的位置在哪里,都可以传对参数。
4、默认参数
在调用函数时,如果形参有默认值,而在传实参的时候没有对应的参数,则会取形参的默认值。如果传了,就以为实参的值为准。
使用默认参数是要特别注意**默认参数一定要放在命名参数(形参)后面,不然会报错。**如下:
这个是解释器自动就捕捉到了错误。
5、不定长参数
当我们不确定要传入的参数个数时,可以使用不定长参数,不定长参数有两种格式,与上面两种参数略有不同,如下:
(1)*args:加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
(2)**kargs: 加了两个星号 ** 的参数会以字典的形式导入,即key=value的形式
注意:这个地方的产品,创始人,合伙人其实是个字典的key,可以理解为一个变量。这个变量是不能加引号的,如果加了就会报错。
6、传参的顺序
必传参数 > 默认参数 > *args > **kwargs
注意:为什么要把默认参数放在第二个的位置呢?如果放在了最后的位置,那么默认参数永远都不会被修改,放到最后相当于是没有意义的。
二、匿名函数(lambda函数)
1. 定义及特点语法格式
所谓匿名函数,就是没有函数名,也就不需要用def关键字来定义,它只是一个表达式,比起def函数要简单的多,一般也只用于处理一些简单的逻辑。语法格式如下:
lambda 参数1,参数2,... 参数n: 表达式
#定义一个lambda函数,实现两个数的加法运算
sum_data = lambda a, b: a + b
print(sum_data(12, 3))
print(sum_data(4, -3))
2. lambda函数的特点
lambda函数以下几个特点:
(1)lambda 只是一个表达式,函数体比 def 简单很多
(2)lambda函数的主体是一个表达式,而不是代码块;也仅仅只能在lambda表达式中封装有限的逻辑
(3)lambda函数有自己的命名空间,不能访问表达式之外的参数
(4)在处理一些简单逻辑但又不想用def定义函数时,就可以使用lambda函数,如果处理的逻辑比较复杂代码比较多时,还是使用def较好。
三、函数返回值return
在编程规范里,函数都是有返回值的!上面说了函数是实现某一特定功能的代码块,既然是做一件事,那么就得有反馈结果,成功或者失败,亦或其他;就像 y=ax + b一样,只要你给一个x就会有一个对应的y返回。上面的反馈结果即就是函数的返回值。
不带return的函数,返回值为空
带return的函数
返回多个值
return可以同时返回多个值,下面函数有两个return语句,那么会返回两个值吗?
答案是:不会。
return语句的特点
(1)返回函数的结果值
(2)当函数执行return语句后就表示该函数已经执行完毕,不在执行后面的代码
(3)一个函数只能执行一次return
那么要返回两个值,怎么做呢?
那就需要把结果写在一个return里面
注意:return 是以元组的形式返回值的
四、局部变量与全局变量
1. 局部变量
什么是局部变量呢?顾名思义,局部变量只能该函数内(局部)使用。有如下几个特点
(1)局部变量,是在函数内部定义的变量
(2)局部变量使用的范围是本函数内部,其他函数以及外部访问一律无效
(3)当函数被调用是,局部变量被创建,函数调用结束时,局部变量又被释放
如下:
def number():
#定义局部变量a, b
a = 1
b = 2
print(a, b)
#调用时局部变量生效
number()
#不调用时,进行外部访问无效
print(a, b)
2. 全局变量
那什么又是全局变量呢?全局变量与局部变量相反,即既能够在函数内部调用,也能在外部其他地方调用。如下
a = 1
b = 2
def number():
#定义局部变量c,d
c = 1
d = 2
#函数内部调用a,b
su = a + c
st = b + d
print("su:", su)
print("st:", st)
#调用函数
number()
#打印全局变量a,b
print("a b:", a, b)
3. 当全局变量遇到局部变量
先说结论,当局部变量和全局变量的变量名字一样时,局部变量的作用域以为局部变量值为准,此时改变局部变量的值不会影响全局变量的值,如下
4. 用global在函数内部修改全局变量
如果想在函数内部修改全局变量,怎么办?用global。**如果你在函数内部对某个变量使用了global,那么它就成为了全局变量,你在函数内部对它的任何修改都会作用于全局。**如下
部分内容转自优秀的博主:
python之函数_搬砖,攒路费的博客-CSDN博客
总结
以上就是平时使用中,容易混淆的地方。这次在这里专门总结出来,目的就是加深记忆。