【python基础知识】Day26 函数

一、函数的定义

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

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

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

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

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

使用函数的目的:

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

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

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

python 复制代码
def 函数名(参数列表):
    函数体
    return 返回值列表

函数调用的形式如下:

python 复制代码
函数名(参数列表)

二、函数的参数传递

1.可选参数与可变参数

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

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

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

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

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

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

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

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

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

3.函数返回值

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

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

4.全局变量和局部变量

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

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

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

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

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

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

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

python 复制代码
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保留字声明后,作为全局变量使用。函数退出后,该变量保留且值被函数改变

python 复制代码
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)组合数据类型变量的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可以直接使用并修改全局变量的值

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

上述代码输出结果

knockknock [2]

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

python 复制代码
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版) 嵩天 礼欣 黄天羽

相关推荐
qh0526wy6 分钟前
金融接口基方法Python
windows·python·金融
景天科技苑7 分钟前
【Rust闭包】rust语言闭包函数原理用法汇总与应用实战
开发语言·后端·rust·闭包·闭包函数·rust闭包·rust闭包用法
史迪仔011211 分钟前
Python生成器:高效处理大数据的秘密武器
前端·数据库·python
uyeonashi1 小时前
【Boost搜索引擎】构建Boost站内搜索引擎实践
开发语言·c++·搜索引擎
再睡一夏就好1 小时前
从硬件角度理解“Linux下一切皆文件“,详解用户级缓冲区
linux·服务器·c语言·开发语言·学习笔记
TIF星空2 小时前
【使用 C# 获取 USB 设备信息及进行通信】
开发语言·经验分享·笔记·学习·microsoft·c#
Smile丶凉轩4 小时前
Qt 界面优化(绘图)
开发语言·数据库·c++·qt
reasonsummer5 小时前
【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面
开发语言·python
Doker 多克5 小时前
Python-Django系列—日志
python·日志
苏三福6 小时前
ros2 hunmle bag 数据包转为图片数据 python版
开发语言·python·ros2humble