python之函数(参数,匿名函数,局部变量和全局变量)

文章目录

  • 前言
  • 一、函数的参数
    • 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,那么它就成为了全局变量,你在函数内部对它的任何修改都会作用于全局。**如下

如果在函数外部调用函数内部定义的全局变量,需注意:

1、必须先要调用函数(这个动作就相当于激活函数),然后才能够去调用函数内的全局变量。

如果不调用函数,是不能直接调用函数内部的全局变量的。


部分内容转自优秀的博主:

python之函数_搬砖,攒路费的博客-CSDN博客


总结

以上就是平时使用中,容易混淆的地方。这次在这里专门总结出来,目的就是加深记忆。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值