【python基础知识】Day26 函数

发布于:2025-05-16 ⋅ 阅读:(10) ⋅ 点赞:(0)

一、函数的定义

        函数是一段具有特定功能的、可重用的语句组,用函数名来表示。在需要使用函数时,通过函数名进行调用。函数也可以看作一段具有名字的子程序,可以在需要使用它的地方进行调用执行,不需要在每个执行的地方重复编写这些语句。

        每次使用函数时,可以提供不同的参数作为输入,以实现对不同的数据处理;函数执行后,可以反馈相应的处理结果。

        函数能够完成特定的功能,与黑盒类似,对函数的使用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。严格地说,函数是一种功能的抽象。

        有些函数是python自带的,如print()

        有些函数是库中含有的,如pandas库中pd.read()函数,scikit-learn库中各种机器学习模型

        使用函数的目的:

        1.降低编程难度:使用函数只用关注函数输入输出,能够解决的问题。在项目中遇到大问题,可以将大问题分解成小问题后,使用函数解决小问题

        2.代码复用:函数可以在一个程序中多个位置使用

        python使用def 保留字定义一个函数,语法形式如下:

def 函数名(参数列表):
    函数体
    return 返回值列表

        函数调用的形式如下:

函数名(参数列表)

二、函数的参数传递

1.可选参数与可变参数

(1)可选参数:在调用函数时,部分参数可以不用输入。

        原因:在定义函数时,为这些参数指定了默认值

        位置:可选参数必须定义在必选参数后面(这是因为函数调用时,需要按顺序输入参数)

(2)可变数量参数(可变参数):在参数前增加*号实现

        位置:可变参数必须在参数列表最后

2.参数的位置和名称传递

      (1)函数调用时,默认是按位置顺序传递给函数,dup("knock",4)中第一个实参赋值给形参str,第二个实参赋值给times。这种按照位置传递参数的方法固然好,但当参数多时,这种调用参数的方式可读性差

# 定义函数
def dup(str,times = 2):
    print(str*times)
# 调用函数
dup("knock",4)

        为了解决上述问题,python可以在调用时指定形参名,参数间的顺序可以任意调整

3.函数返回值

        return用来退出函数,并将程序返回到函数被调用的位置继续执行。return语句可以同时将0个、1个或多个值返回

        函数可以没有return,此时函数不返回值

4.全局变量和局部变量

        一个程序中变量有两类:全局变量和局部变量

        全局变量:函数之外定义的变量,在程序执行全过程中有效

        局部变量:函数内部使用的变量,仅在函数内部有效,函数退出后,变量将不存在

        python对变量的作用遵守以下规则:

        (1)简单数据类型变量,无论是否与全局变量重名,仅在函数内部创建和使用。函数退出后,变量被释放,

n = 1    # n是全局变量
def func(a, b):
    c = a*b     # c是局部变量,a、b作为函数参数也是局部变量
    return c
s = func("knock",2)
print(s)

如有全局同名变量,其值不变

n = 1    # n是全局变量
def func(a, b):
    n = b       # n是在函数内存中新生成的局部变量,不是全局变量
    return a*b
s = func("knock",2)
print(s,n)  #测试n值是否改变

 上述代码输出结果

knockknock   1

        (2)简单数据类型变量,在用global保留字声明后,作为全局变量使用。函数退出后,该变量保留且值被函数改变

n = 1    # n是全局变量
def func(a, b):
    global n
    n = b      # 将局部变量b 赋值给 全局变量n
    return a*b
s = func("knock",2)
print(s,n)  #测试n值是否改变

  上述代码输出结果

knockknock   2

        (3)组合数据类型变量的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可以直接使用并修改全局变量的值

ls = []             #创建一个列表
def func(a, b):
    ls.append(b)
    return a*b
s = func("knock",2)
print(s,ls)  #测试ls列表是否改变

  上述代码输出结果

knockknock   [2]

        (4)如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量操作,函数退出后局部变量被释放,全局变量值不变

ls = []             #ls是全局列表变量
def func(a, b):
    ls = []         #创建了名称为ls的局部列表变量
    ls.append(b)    # 将局部变量b增加到局部列表变量ls中
    return a*b
s = func("knock",2)
print(s,ls)         #测试ls列表是否改变

  上述代码输出结果

knockknock   [ ]

参考目录

[1] python语言程序设计基础(第2版) 嵩天 礼欣 黄天羽


网站公告

今日签到

点亮在社区的每一天
去签到