python学习笔记(7)——函数的基本使用(1)

(59) 2024-04-07 21:01:01

目录

一、函数的定义与调用

1.1. 函数的定义:

1.2. 函数的调用

1.3.函数的嵌套定义

二、函数参数的传递

2.1 位置参数的传递

2.2 关键字参数的传递:

 2.3 默认参数的传递

2.4 参数的打包与解包

2.5 混合传递


        函数是一段具有特定功能的、可重复的语句组,用函数名来表示并通过函数名来进行功能调用。函数是一段具有名字的子程序,可以在需要的地方调用执行,不需要再每个执行的地方重复编写这些语句。每次使用函数可以提供不同的参数作为输入,以实现对不同数据的处理。 

一、函数的定义与调用

1.1. 函数的定义:

python中通常使用def关键字来定义函数,其语法格式如下:

def 函数名 ([参数列表]):

        ["""文档字符串"""]

        函数体

[returm语句]

def关键字:函数开始的标志。

函数名:函数的位移标识,且遵循标识符的命名规则。

参数列表:负责接受传入函数中的数据,可以包括一个或多个参数,也可以为空。

冒号:函数体开始的标志。

文档字符串:由一对三引号包裹而成,用于说明函数功能的字符串,可以省略。

函数体:实现函数功能的具体代码

return语句:返回函数的处理结果给调用方,是函数的结束标志。若函数没有返回值return可以省略。

如下,我们定义一个加法的函数:

def add_modify(a,b):
    result = a+b
    print(result)

1.2. 函数的调用

        函数再定义完成后不会立即执行,直到被程序调用时才能执行。调用函数的语法各色如下:

函数名([参数列表])

我们调用上述代码如下:

def add_modify(a,b):
    result = a+b
    print(result)
add_modify(1,2)

可以得到以下结果:

python学习笔记(7)——函数的基本使用(1) (https://mushiming.com/)  第1张

 综上,在程序执行”add_modify(1,2)“时经历了以下四个步骤

(1)程序在调用函数的位置停止运行

(2)将数据1、2传递给函数参数

(3)执行函数体中的语句

(4)程序回到暂停处并继续执行

1.3.函数的嵌套定义

        函数在定义时可以在其内部嵌套定义另外一个函数,此时嵌套函数称之为外层函数,骨嵌套的函数称为内层函数。

示例代码:

def add_modify(a,b):
    result = a+b
    print(result)
    def test():           #在函数中定义函数:test()
        print("内层函数")
    test()                #在函数中调用函数:test()
add_modify(1,2)

        注意:函数外部无法直接调用内层函数,只能在外层函数中调用内层函数从而执行2个函数的打印语句。

二、函数参数的传递

        一般来说,将定义函数时设置的参数称为形式参数(形参),将调用时传入的参数称之为实际参数(实参)。函数的参数传递时指将实际参数传递给形式参数的过程。函数参数的传递可以分为位置参数的传递。关键字参数的传递、默认参数的传递、参数的打包与解包以及混合参数的传递。

2.1 位置参数的传递

        函数在调用时将参照相应的位置以此传递给形参,即将第一个实参传递给第一个形参,将第二个实参传递给第二个形参。

例如获取两个数之间最大的函数get_max(),并调用get_max()函数。

def get_max(a,b):
    if a>b:
        print(a,"是最大值")
    else:
        print(a,"是最大值")
get_max(6,5)

运行结果:

python学习笔记(7)——函数的基本使用(1) (https://mushiming.com/)  第2张

         以上函数执行后将第一个实参6传递给第一个形参a,第2个实参5传递给第二个实参b。

2.2 关键字参数的传递:

        若函数参数数量较多,开发者很难记住参数作用,再按照位置传参是难以实现的。一般则会通过关键字传参即”形参=实参“的格式将实参与形参相关联,将实参按照相应的关键字传递给形参。

示例代码:

f connect(name,age):
    print(f"名字是{name}:年龄{age}")
connect(name="lili",age=20)

运行结果:

python学习笔记(7)——函数的基本使用(1) (https://mushiming.com/)  第3张

 2.3 默认参数的传递

        函数在定义时可以指定形参的默认值,故在被调用时可以选择时否给带有默认值的形参传值。若没有给默认的形参传值,则直接使用该形参的默认值

def connect(ip,port=9600):
    print(f"设备{ip}:{port}连接")
connect(ip="123.0.0.1")
connect(ip="123.0.0.1",port=4800)

运行结果: 

         第一次调用connect()函数时,”123.0.0.1“会传递给关联的形参给ip,而形惨port默认为9600,第二次调用connect()函数时”123.0.0.1“会传递给关联的形参ip。4800会传递给形参port。

2.4 参数的打包与解包

1.打包:

        如果函数在定义时无法确定需要接受多少个数据,那么可以在定义函数时为形参添加”*“或”**“,如果在形参的前面添加”*“,那么它可以接受以元组形式打包的多个值,如果形参前面加上”**“,那么它可以接受以字典形式打包的多个值。

        虽然函数中添加”*“或”**“的形惨可以是符合命名规范的任意名称,但一般建议使用*aers和**kwargs、若函数没有接受到任何数据,参数*args和**kwargs为空。即他们为空元组或空字典。

2.解包

        如果函数在调用时接受的实际参数时元组类型的数据,那么可以使用”*“将元组拆分成多个值,并将每个值按照位置参数传递的方式赋值给形参,如果函数在调用时接收的实参是字典类型诗句,那么可以使用”**“将字典拆分为多个键值对,并将每个值按照关键字参数传递的方式赋值给与键名对应的形参。

def test(a,b,c,d,e):
    print(a,b,c,d,e)
nums=(67,89,78,87,65)
test(*nums)

2.5 混合传递

        参数传递方式遵循以下从高到低的优先级:按位置参数传递、按关键字参数传递、按默认参数传递、按打包传递。

        在定义函数时,带有默认值的参数必须位于普查参数之后带有”*“标识的参数必须位于带有默认值的参数之后,带有”**“表示的参数必须位于带有”*“参数之后

示例代码:

def test(a,b,c=33,*arge,**kwargs):
    print(a,b,c,arge,kwargs)
test(1,2)
test(1,2,3)
test(1,2,3,4)
test(1,2,3,4,e=5)

运行结果:

      (1)第一次调用test()函数时,该函数接收到实参1和实参2,这2个实参被普通参数a和b接受,剩余3个形参c、*args、**kwargs没有接受到实参,均使用的时默认值。

        (2)第二次调用test()函数时,该函数接受到实参1到实参3,前三个实参被普通参数ab以及待默认值的参数c接受,剩余两个*args、**kwargs没有接受到实参,使用默认值。

        (3)第三次调用test()函数时,该函数接受到实参1到实参4,前四个实参被普通参数ab以及待默认值的参数c、*args接收。**kwargs没有接受到实参,使用默认值。

        (4)第四次调用test()函数时,该函数接受到实参1到实参4和形参e关联的实参5均被形参接收。

THE END

发表回复