Python函数:def参数详解、返回值、局部变量,代码复用从我开始
·
Python函数:def参数详解、返回值、局部变量,代码复用从我开始
前面几天我们写的代码都是一条一条往下执行的。但如果你发现"同样的逻辑出现了好几次",怎么办?复制粘贴吗?那太蠢了。函数就是用来解决这个问题的——把重复使用的代码封装成一个"工具",想用的时候调一下就行。
一句话概括
这篇文章解决一个问题:学会定义和调用函数,理解参数、返回值、局部变量的概念。
什么是函数
函数就是一段可以重复使用的代码。你定义一次,可以调用无数次。
Python自带很多内置函数,比如 print()、len()、range()。我们也可以自己定义函数。
定义函数:def
def say_hello():
"""打印问候语"""
print("Hello!")
print("Welcome to Python!")
# 调用函数
say_hello()
注意:
def后面跟函数名,函数名后面要加括号- 函数体要缩进
"""文档字符串"""用来描述函数的作用(可选,但建议写)
函数参数
无参数函数
def greet():
print("Good morning!")
greet() # 调用
有参数函数
def greet(name):
"""向指定名字的人打招呼"""
print(f"Hello, {name}!")
greet("小明") # Hello, 小明!
greet("小红") # Hello, 小红!
默认参数
参数可以有默认值,调用时不传就会用默认值:
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
greet("小明") # Hello, 小明!
greet("小明", "Hi") # Hi, 小明!
注意:默认参数要放在非默认参数后面:
# 正确
def func(a, b, c=10):
pass
# 错误
def func(a, b=10, c): # SyntaxError
pass
返回值:return
函数可以有返回值,用 return 语句:
def add(a, b):
"""返回两个数的和"""
return a + b
result = add(10, 20)
print(result) # 30
# 没有return的函数返回None
def say_hi():
print("Hi!")
x = say_hi() # 打印Hi!,但x是None
print(x) # None
多个返回值
def get_stats(numbers):
"""返回最小值、最大值、平均值"""
return min(numbers), max(numbers), sum(numbers) / len(numbers)
stats = get_stats([1, 2, 3, 4, 5])
print(stats) # (1, 5, 3.0)
# 元组拆包
min_val, max_val, avg_val = get_stats([1, 2, 3, 4, 5])
print(f"最小{min_val},最大{max_val},平均{avg_val}")
变量的作用域
变量有"生效范围",这就是作用域。
局部变量 vs 全局变量
x = "全局变量" # 在函数外面,是全局变量
def test():
y = "局部变量" # 在函数里面,是局部变量
print(x) # 能访问全局变量
print(y) # 能访问局部变量
test()
print(x) # 能访问
print(y) # 报错!y是局部变量,函数外访问不到
global:函数内修改全局变量
counter = 0
def increment():
global counter # 声明要使用全局变量
counter += 1
return counter
print(increment()) # 1
print(increment()) # 2
print(increment()) # 3
注意:尽量少用 global,数据多了会乱。
实战练习:计算器函数
def add(a, b):
"""加法"""
return a + b
def subtract(a, b):
"""减法"""
return a - b
def multiply(a, b):
"""乘法"""
return a * b
def divide(a, b):
"""除法"""
if b == 0:
return "错误:除数不能为0"
return a / b
def power(a, b):
"""幂运算"""
return a ** b
def calculator(a, operator, b):
"""计算器主函数"""
operations = {
"+": add,
"-": subtract,
"*": multiply,
"/": divide,
"**": power,
}
if operator not in operations:
return "错误:不支持的运算符"
return operations[operator](a, b)
# 测试
tests = [
(10, "+", 5),
(10, "-", 5),
(10, "*", 5),
(10, "/", 5),
(10, "/", 0),
(2, "**", 10),
]
for a, op, b in tests:
result = calculator(a, op, b)
print(f"{a} {op} {b} = {result}")
函数的文档字符串
好的函数应该配上文档字符串,解释函数是干什么的:
def calculate_area(width, height):
"""
计算矩形面积。
参数:
width (float): 宽度
height (float): 高度
返回:
float: 矩形面积
"""
return width * height
查看函数的文档:
print(calculate_area.__doc__)
help(calculate_area)
常见问题FAQ
Q1:参数和返回值什么时候用?
- 参数:函数需要外部数据才能工作
- 返回值:调用者需要函数计算的结果
简单判断:函数处理数据需要什么就传什么,处理完需要什么就返回什么。
Q2:return 和 print 有什么区别?
return:把值返回给调用者,函数外部可以拿到这个值print:把值显示出来,但函数外拿不到这个值
# 用print
def add_print(a, b):
print(a + b)
result = add_print(10, 20) # 打印30,但result是None
# 用return
def add_return(a, b):
return a + b
result = add_return(10, 20) # result是30
print(result) # 30
Q3:函数可以嵌套定义吗?
可以,但一般不推荐:
def outer():
x = 10
def inner():
print(x) # 可以访问外层变量
y = 5
return y
return inner()
print(outer()) # 5
写在最后
这篇文章讲了:
- 函数的定义和调用
- 参数:普通参数、默认参数
- 返回值:return 语句
- 作用域:局部变量和全局变量
下一篇文章:函数进阶,*args、**kwargs、lambda匿名函数。
参考资料:
更多推荐


所有评论(0)