Python一天一颗糖(十三)函数的定义和调用,实参,形参,位置参数,可变参数,关键字参数

发布于:2022-12-20 ⋅ 阅读:(524) ⋅ 点赞:(0)

一. 函数的概念

        如果在开发程序时候,如果需要某块代码多次,但是为了提高编写的效率以及代码的重用,可以把具有独立功能的代码块组织成为一个小模块,这就是函数。

二. 函数的定义和调用

1.定义:def 函数名:

                 函数要执行的内容

调用:

 2.带参数的函数定义:

 # 其中a和b为形式参数,简称形参

调用:

# 其中38和5438为实际参数,简称实参,是输入参数的时候填入的实际值 

3.函数的定义格式:

def        函数名        (形参):

             函数体(具体的功能性代码)

             return        返回值(输出结果)

   函数定义的调用格式:

变量名 = 函数名 (实际参数)——>其中变量获取的是最终的返回值

注:return不止返回参数,同时也结束了程序块的执行,并且回到调用该函数的位置。

4.函数的分类

内置函数,标准库函数,第三方库函数,用户自定义函数

5.函数调用的嵌套

6.练习题:

A. 根据输入的数量,打印对应行数的线:

写一个打印一条横线的函数

写一个函数,可以通过输入参数,打印自定义行数的横线

答案如下:

B.求三个数的平均值

写一个函数求三个数的和

写一个函数求三个数的平均值

答案如下:

三. 函数的深入理解

1.函数的名字以及内存地址:函数创建的内存逻辑同变量类似,也是要在内存中划分区域用作存储函数。地址可以传递。

2.函数的遍历调用:

根据上面的“函数的地址可以传递”,也可以进行如下操作:

3.函数的参数:

A.标准参数:位置参数,默认参数

位置参数:按照位置一一匹配,实参和形参的数量要一致,否则报错。

默认参数:有默认值的参数

# 不入实参的时候会使用默认值

# 因为调用函数的时候如果不指定形参名字,定义函数的时候,有默认值的形参要放置在没有默认值的形参后面写

# 如果关键实参和位置实参混合用,位置实参在前面,否则报错

B.可变个数参数:可变参数,关键字参数

# 在函数定义时,* 和**作用:将多个变量进行“打包”,变为元组和字典

可变参数     *args     arguments

 # 打包成元组 

关键字参数     **kwargs      keyword arguments

# 打包成字典,且入参的时候中文无序引号 

====》在定义函数的时候,形参可以使用*和**来表示要在输出的时候对实参进行打包,那么在调用函数的时候,同样也可以使用* 和 **来给输入的实参先进行解包,如图:

# 这里入参的时候,使用了列表进行入参 ,则输出的时候是将整个列表看作一个元素进行打包,如果我们想要将其打散输出的话,那么在调用的时候就要使用解包*

# 这样先对列表进行了解包,打散,再进行打包

# 入参的时候带有字典类型的实参,也需要先使用**进行解包入参,再输出的时候打包

 

总结:

# 如果想要输出结果为元组(打包成元组),定义函数的时候使用*;如果想要输出结果为字典(打包成字典),定义函数的时候使用**
# 如果函数定义的时候是*可变参数,调用时输入的实参如果是列表/元组的话,就需要在调用是加上*,先将其打散;
# 如果函数定义的时候是**关键字参数,调用时输入的实参如果是字典,就需要在调用是加上**;

扩展:函数调用的时候,参数传递的顺序

位置参数——>关键字参数

args——>*args——>**args

# 关键字参数的后面,不再能使用位置参数,只能接着使用关键字参数

C.命名关键字参数 

# 定义函数的时候,单独在形参位置放置一个*,是指该*后面的参数只能使用关键字参数,必须用命名的方式进行赋值。 

四. 返回值:可以返回全部的数据类型

番外:返回多个返回值

当需要多个返回值的时候, 其实是将其封装在列表,字典,元组容器当中。(set会改变元素顺序)。