
入门 Python 语言:Python函数
目录
✨前言✨
本系列文章目的在于将 Python 的基础内容完全夯实,最终目的是为后期的深度学习在算法上有一定的铺垫,前期在学习数学的过程中也会有很大的帮助,相对于 C++ 来说 Python 有自身的优势,文末会有 Python 的优势对比于 C++ 的维度点说明,我已经先写过 C++的基础使用 了,两种语言各自有各自的优势,我们要根据具体的需求来分析使用哪种语言更为方便,其它的语言暂时不在考虑范畴之内,我们的目标是AI深度学习。
前置环境与代码结构文章:
📚本篇目标
- 让初学者理解 Python 函数的基本概念和作用。
- 掌握函数的定义和调用方法。
- 熟悉不同类型的函数参数,包括位置参数、关键字参数、默认参数和可变参数的使用。
- 理解函数返回值的意义,以及局部变量和全局变量的区别与使用。
🔥重难点说明
重点
- 函数的定义和调用流程,确保能够正确封装和使用代码块。
- 不同类型参数的特点和传递方式,以便在函数调用时能灵活运用。
- 函数返回值的处理,以及局部变量和全局变量作用域的区分。
难点
- 可变参数的使用,理解其在函数内部的处理逻辑。
- 局部变量和全局变量的作用域问题,避免在编程中出现变量使用混乱的情况。
📖学习正文
函数定义与调用
在 Python 中,使用 def 关键字来定义函数,格式为 def 函数名(参数列表):。函数定义后,可通过函数名加括号的方式调用。
def greet():
print("Hello!")
# 调用函数
greet()
执行效果:
Hello!
函数参数
位置参数
位置参数是最常见的参数类型,调用函数时,按照参数定义的顺序依次传递值。
def add(a, b):
return a + b
result = add(3, 5)
print(result)
执行效果:
8
关键字参数
关键字参数允许在调用函数时通过参数名指定传递的值,不依赖参数的位置。
def person_info(name, age):
print(f"Name: {name}, Age: {age}")
person_info(age=25, name="Alice")
执行效果:
Name: Alice, Age: 25
默认参数
默认参数在定义函数时为参数指定一个默认值,调用函数时如果没有传递该参数,则使用默认值。
def power(x, n=2):
return x ** n
print(power(3))
print(power(3, 3))
执行效果:
9
27
可变参数
可变参数允许函数接受不定数量的参数,使用 * 来定义。在函数内部,可变参数被当作元组处理。
def sum_numbers(*numbers):
total = 0
for num in numbers:
total += num
return total
print(sum_numbers(1, 2, 3))
执行效果:
6
函数返回值
函数可以使用 return 语句返回一个值,调用函数时可以接收这个返回值进行后续处理。
def multiply(a, b):
return a * b
product = multiply(4, 6)
print(product)
执行效果:
24
局部变量与全局变量
局部变量是在函数内部定义的变量,只能在函数内部使用;全局变量是在函数外部定义的变量,可以在整个程序中访问。
# 全局变量
global_var = 10
def test():
# 局部变量
local_var = 20
print(f"Local variable: {local_var}")
print(f"Global variable: {global_var}")
test()
# 尝试访问局部变量会报错
# print(local_var)
执行效果:
Local variable: 20
Global variable: 10
💻练习题
单选题-5
-
Python 中定义函数使用的关键字是?
A. function
B. def
C. define
D. fn -
对于函数
def func(a, b=2):,以下调用方式正确的是?
A. func ()
B. func (1)
C. func (b=1)
D. func (a=1, b) -
以下关于函数返回值的说法,正确的是?
A. 函数只能返回一个值
B. 函数可以没有返回值
C. 函数返回值只能是整数
D. 函数必须有返回值 -
可变参数在函数内部以什么形式存在?
A. 列表
B. 元组
C. 字典
D. 集合 -
以下代码的输出结果是?
x = 5 def change_x(): x = 10 print(x) change_x() print(x)A. 10 10
B. 5 10
C. 10 5
D. 5 5
多选题-3
-
以下属于函数参数类型的有?
A. 位置参数
B. 关键字参数
C. 默认参数
D. 可变参数 -
关于局部变量和全局变量,以下说法正确的是?
A. 局部变量只能在函数内部使用
B. 全局变量可以在函数内部和外部使用
C. 在函数内部可以修改全局变量的值
D. 局部变量和全局变量可以同名 -
函数调用时,以下哪些情况是合理的?
A. 传递的参数数量与函数定义的参数数量一致
B. 使用关键字参数传递部分参数
C. 省略默认参数的传递
D. 传递可变数量的参数
判断题-2
- 函数定义中的参数顺序可以随意调整,不影响函数的调用。( )
- 在函数内部如果没有使用 global 关键字,不能直接修改全局变量的值。( )
代码题-1
编写一个函数,接受可变数量的整数参数,返回这些整数的平均值。
📝答案解析
单选题
- 答案:B
- 在 Python 中,使用
def关键字来定义函数,所以选 B。
- 在 Python 中,使用
- 答案:B
- 函数
func有一个位置参数a和一个默认参数b。选项 A 没有传递必需的位置参数a,错误;选项 B 传递了位置参数a,使用默认值b = 2,正确;选项 C 没有传递位置参数a,错误;选项 D 语法错误,关键字参数b后面不能没有值。所以选 B。
- 函数
- 答案:B
- 函数可以没有返回值,不使用
return语句或者return后面不跟值都表示没有返回值;函数可以返回多个值(以元组形式);返回值可以是任意数据类型。所以选 B。
- 函数可以没有返回值,不使用
- 答案:B
- 可变参数在函数内部以元组形式存在,所以选 B。
- 答案:C
- 在
change_x函数内部定义了一个局部变量x,其值为 10,所以函数内部打印的是 10;而函数外部的全局变量x的值没有被修改,仍然是 5,所以最后打印的是 5。因此选 C。
- 在
多选题
- 答案:ABCD
- 位置参数、关键字参数、默认参数和可变参数都是 Python 函数中常见的参数类型,所以选 ABCD。
- 答案:ABD
- 局部变量只能在函数内部使用,全局变量可以在函数内部和外部使用;在函数内部如果要修改全局变量的值,需要使用
global关键字声明;局部变量和全局变量可以同名,在函数内部使用时优先使用局部变量。所以选 ABD。
- 局部变量只能在函数内部使用,全局变量可以在函数内部和外部使用;在函数内部如果要修改全局变量的值,需要使用
- 答案:ABCD
- 传递的参数数量与函数定义的参数数量一致是基本要求;可以使用关键字参数传递部分参数;默认参数在调用时可以省略;函数定义了可变参数时,可以传递可变数量的参数。所以选 ABCD。
判断题
- 答案:错误
- 位置参数的顺序不能随意调整,否则会导致参数传递错误,影响函数的调用结果。所以该说法错误。
- 答案:正确
- 在函数内部如果没有使用
global关键字,对与全局变量同名的变量赋值会创建一个局部变量,而不会修改全局变量的值。所以该说法正确。
- 在函数内部如果没有使用
代码题
def average(*numbers):
if len(numbers) == 0:
return 0
total = sum(numbers)
return total / len(numbers)
print(average(1, 2, 3, 4, 5))
函数 average 接受可变数量的整数参数,首先判断参数数量是否为 0,如果为 0 则返回 0;否则计算所有参数的总和并除以参数的数量,得到平均值并返回。
总结
本文全面介绍了 Python 函数的相关知识,包括函数的定义与调用、不同类型的参数(位置参数、关键字参数、默认参数、可变参数)、函数返回值以及局部变量和全局变量。通过示例代码展示了函数的使用方法和执行效果,并通过练习题加深了对这些知识点的理解和运用。掌握函数的使用能让我们更高效地组织和复用代码,为编写更复杂的 Python 程序奠定基础。
Python的优势对比于 C++ 的维度点说明
| 对比维度 | Python 优势 | C++ 情况 |
|---|---|---|
| 性能效率 | 1. 开发效率高:代码简洁,语法灵活,能够用较少的代码实现相同的功能,缩短开发周期。 2. 有高性能库支持:对于计算密集型任务,可以使用如 NumPy、Pandas 等高性能库,它们底层使用 C 或 Fortran 实现,能在一定程度上弥补 Python 执行速度慢的问题。 | 1. 开发效率低:代码相对冗长,需要编写更多的代码来实现相同功能,开发周期较长。 2. 开发难度大:需要手动管理内存,容易出现内存泄漏等问题,对开发者要求较高。 |
| 底层控制能力 | 1. 代码编写简单快速:无需关注底层硬件细节,能让开发者更专注于业务逻辑的实现,快速搭建应用原型。 2. 适合快速迭代开发:在应用开发过程中,能够快速对代码进行修改和调整,适应不断变化的需求。 | 1. 代码编写复杂:需要对底层硬件有深入了解,编写代码时要处理很多底层细节,开发难度大。 2. 开发周期长:由于需要关注底层,代码的修改和调整相对困难,不适合快速迭代开发。 |
| 语言特性 | 1. 语法简洁易懂:代码可读性高,易于学习和上手,降低了编程门槛,适合初学者。 2. 动态类型灵活:在编写代码时无需提前声明变量类型,能够根据需要灵活赋值,提高了代码的编写效率。 | 1. 语法复杂:学习成本较高,对于初学者来说有一定难度。 2. 静态类型不够灵活:在编写代码时需要提前声明变量类型,不够灵活,修改代码时可能需要对类型进行调整。 |
| 可移植性 | 1. 跨平台部署方便:只要安装了相应的 Python 解释器,代码可以在不同操作系统上轻松运行,无需重新编译。 2. 云服务支持好:很多云服务平台都提供了 Python 运行环境,方便将 Python 应用部署到云端。 | 1. 跨平台编译麻烦:不同操作系统的编译器和运行时环境可能存在差异,需要针对不同平台进行编译和调试。 2. 云服务集成复杂:将 C++ 应用部署到云服务平台时,需要处理更多的底层配置和依赖问题。 |
| 生态系统和工具链 | 1. 库丰富且易用:拥有大量的开源库和框架,涵盖了数据分析、机器学习、Web 开发等多个领域,能够快速实现各种功能。 2. 社区活跃:有庞大的开发者社区,遇到问题可以很容易找到解决方案和技术支持。 | 1. 库学习成本高:虽然有很多专业级库,但部分库的学习曲线较陡,使用起来有一定难度。 2. 社区相对较小:相比 Python 社区,C++ 社区规模相对较小,获取技术支持和解决方案的渠道相对较少。 |
| 安全性和稳定性 | 1. 内置安全机制:有一些内置的安全机制,如异常处理机制,能够在程序出现错误时进行捕获和处理,避免程序崩溃。 2. 代码审查相对容易:简洁的语法和动态类型使得代码结构相对简单,在代码审查时更容易发现问题。 | 1. 手动管理易出错:手动管理内存和资源容易出现错误,如内存泄漏、悬空指针等,影响程序的稳定性和安全性。 2. 代码审查复杂:由于语法复杂,代码结构可能比较复杂,在代码审查时需要花费更多的时间和精力。 |

被折叠的 条评论
为什么被折叠?



