前言:函数是编程中的基础概念,它们允许我们封装一段代码,以便在需要时反复调用。通过使用函数,我们不仅可以提高代码的可读性和可维护性,还可以减少重复代码的出现。
目录
一、函数到底是个啥玩意儿?
二、为啥要用函数?
三、写第一个函数试试水
四、几何计算:从圆面积开始
圆面积计算
矩形面积计算
三角形面积计算
五、数学问题:挑战一下自己
斐波那契数列
阶乘计算
素数检查
六、列表操作:算算平均值
七、看看这些函数到底行不行
八、别怕犯错,多试试!
总结
函数这玩意儿,我感觉就像是个“小黑盒”,你把一些东西放进去(参数),它在里面捣鼓捣鼓,然后吐出一个结果(返回值)。刚开始学的时候,我老是搞不明白这个“小黑盒”到底是怎么运作的,后来多写多练,才慢慢理解。
比如说,我们要算一个数的平方,就可以写个函数,把数放进去,出来就是平方后的结果。这个“小黑盒”里面装的就是计算平方的那几行代码。
刚开始编程的时候,我老是觉得函数这东西有点多余。后来才发现,这玩意儿可真是太实用了!
少写重复代码:要是你有个计算平方的功能要重复用好多次,每次都写一遍公式多麻烦啊,直接调用函数就完事儿了。
代码看着清爽:把代码分块成一个个函数,就像把杂物分门别类放好,别人(或者未来的你自己)再看代码的时候不会晕。
方便改代码:以后要是想换算法,只改函数里面的内容就行,调用的地方不用动。
别光听我在这儿说,咱们直接上手写个最简单的函数。给它一个数,它就返回这个数加 1 的结果。听起来是不是很简单?代码长这样:
def add_one(number):
"""给一个数加 1
Args:
number (int): 要加 1 的数
Returns:
int: 加 1 后的结果
"""
result = number + 1
return result
是不是感觉还挺直观的?def
就是告诉 Python 我要定义一个函数,后面跟着函数名(我叫它 add_one
),然后括号里是参数(这里就是 number
)。冒号一写,下面缩进的代码块就是函数里面要干的事儿啦。最后用 return
把结果吐出去。
试试用这个函数:
num = 5
print(add_one(num)) # 输出: 6
要是运行结果对了,别提多有成就感了!
觉得刚才那个太简单了?那我们来点稍复杂的,算几何图形的面积。先从圆面积开始吧。
圆的面积公式是 πr²(圆周率乘以半径的平方)。我们把这个公式放进函数里:
def calculate_circle_area(radius):
"""计算圆的面积
Args:
radius (float): 圆的半径
Returns:
float: 圆的面积
"""
return 3.14159 * radius ** 2
试试看:
radius = 5
print(calculate_circle_area(radius)) # 结果: 78.53975
矩形面积就更简单了,长乘宽嘛:
def calculate_rectangle_area(length, width):
"""计算矩形的面积
Args:
length (float): 矩形的长
width (float): 矩形的宽
Returns:
float: 矩形的面积
"""
return length * width
用一下:
length, width = 10, 6
print(calculate_rectangle_area(length, width)) # 输出 60
三角形的面积公式是底乘高除以二:
def calculate_triangle_area(base, height):
"""计算三角形的面积
Args:
base (float): 三角形的底
height (float): 三角形的高
Returns:
float: 三角形的面积
"""
return 0.5 * base * height
测试一下:
base, height = 7, 4
print(calculate_triangle_area(base, height)) # 输出 14.0
函数不仅能干几何计算,还能帮你解决很多数学问题呢!我刚开始觉得这些数学问题很难,后来慢慢拆解,发现其实也不过如此。
斐波那契数列很有名啦,前两项是 0 和 1,后面每个数都是前两个数之和。我们写个函数来算第 n 项:
def fibonacci(n):
"""计算斐波那契数列的第n项
Args:
n (int): 项数
Returns:
int: 斐波那契数列的第n项
"""
if n <= 0:
return 0
elif n == 1:
return 1
else:
a, b = 0, 1
for _ in range(n - 1):
a, b = b, a + b
return b
试试看:
n = 10
print(fibonacci(n)) # 输出 55
阶乘就是把从 1 到那个数的所有整数乘起来。比如说,5 的阶乘就是 1×2×3×4×5 = 120。函数长这样:
def factorial(n):
"""计算n的阶乘
Args:
n (int): 非负整数
Returns:
int: n的阶乘
"""
if n < 0:
return None
elif n == 0 or n == 1:
return 1
else:
result = 1
for i in range(2, n + 1):
result *= i
return result
用一下:
num = 5
print(factorial(num)) # 输出 120
素数就是只能被 1 和它自己整除的大于 1 的自然数。我们写个函数来检查一个数是不是素数:
def is_prime(num):
"""检查一个数是否为素数
Args:
num (int): 需要检查的整数
Returns:
bool: 如果是素数返回True,否则返回False
"""
if num <= 1:
return False
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
return True
测测看:
num = 17
print(is_prime(num)) # 输出 True
列表在 Python 里超常用!我们写个函数来算列表里数字的平均值:
def calculate_average(numbers):
"""计算列表中数字的平均值
Args:
numbers (list): 包含数字的列表
Returns:
float: 列表的平均值
"""
if not numbers:
return None
return sum(numbers) / len(numbers)
用用看:
numbers = [1, 2, 3, 4, 5]
print(calculate_average(numbers)) # 输出 3.0
为了看看这些函数到底行不行,我写了点测试代码,把结果都打印出来。看着自己写的函数能跑出正确的答案,那种感觉,就像自己做了一顿饭,味道还不错,挺有成就感的!
if __name__ == "__main__":
# 计算圆面积
radius = 5
print(f"半径为 {radius} 的圆面积: {calculate_circle_area(radius)}")
# 计算矩形面积
length, width = 10, 6
print(f"长 {length} 宽 {width} 的矩形面积: {calculate_rectangle_area(length, width)}")
# 计算三角形面积
base, height = 7, 4
print(f"底 {base} 高 {height} 的三角形面积: {calculate_triangle_area(base, height)}")
# 计算斐波那契数列
n = 10
print(f"斐波那契数列第 {n} 项: {fibonacci(n)}")
# 计算阶乘
num = 5
print(f"{num} 的阶乘: {factorial(num)}")
# 检查素数
num = 17
print(f"{num} 是否为素数: {is_prime(num)}")
# 计算平均值
numbers = [1, 2, 3, 4, 5]
print(f"列表 {numbers} 的平均值: {calculate_average(numbers)}")
输出会是这样:
半径为 5 的圆面积: 78.53975
长 10 宽 6 的矩形面积: 60
底 7 高 4 的三角形面积: 14.0
斐波那契数列第 10 项: 55
5 的阶乘: 120
17 是否为素数: True
列表 [1, 2, 3, 4, 5] 的平均值: 3.0
刚开始学函数的时候,我写出来的代码老出问题了。有时候参数传错了,有时候逻辑写反了。但是别怕!每次出错都是一次学习的机会。
比如我刚开始写 is_prime
函数的时候,忘记考虑负数的情况,结果一传负数进去,函数根本没法正常工作。后来我加了个判断,把负数的情况也考虑进去,问题就解决了。
还有一次,我写 factorial
函数的时候,忘记处理 0 的情况了。后来想起来,0 的阶乘其实是定义为 1 的,于是我把这种情况也加进去,函数就更完善了。
所以呢,别怕写错代码,犯错是学习过程中很重要的一部分。每次调试,都是对函数理解得更深的一次机会。
函数就像是代码里的小帮手,能帮你把重复的工作自动化,还能让代码变得更有条理。刚开始学的时候可能有点难,但只要多写多练,慢慢就能上手了。
刚开始可以从简单的函数入手,比如上面那个加 1 的函数。然后再慢慢尝试写一些稍微复杂一点的,比如几何计算、数学问题求解之类的。
要是你在学习的过程中碰到了什么问题,比如函数的参数搞不清楚,或者返回值不是想要的结果,别急着放弃。先仔细检查一下代码,看看是不是哪里写错了。要是还是搞不定,就去网上搜搜看,或者问问别人。编程路上,大家都是这么一步一步走过来的。
对了,上面那些函数也别光看,自己动手敲一遍,改改参数,看看输出是不是符合预期。要是能自己再写几个类似的函数,那感觉就更棒啦!