函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户自定义函数。
目录
1. 函数介绍
1.1 函数定义
函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。
定义函数的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号 : 起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
def function_name(parameters):
"""函数文档字符串"""
function_body
return [expression]
示例:
def greet(name):
"""这是一个问候函数"""
print(f"Hello, {name}!")
1.2 函数调用
定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
greet("Alice") # 输出: Hello, Alice!
1.3 形参和实参
-
形参:函数定义时括号内的参数
-
实参:函数调用时传入的参数
def add(a, b): # a, b是形参
return a + b
result = add(3, 5) # 3, 5是实参
print(result) # 输出: 8
1.4 函数返回值
使用return
语句返回结果,没有return或return后无表达式则返回None。
def max_num(a, b):
if a > b:
return a
else:
return b
print(max_num(10, 20)) # 输出: 20
2. 函数传递
2.1 可变类型
列表、字典等可变对象作为参数时,函数内修改会影响原对象。
def modify_list(lst):
lst.append(4)
my_list = [1, 2, 3]
modify_list(my_list)
print(my_list) # 输出: [1, 2, 3, 4]
2.2 不可变类型
数字、字符串、元组等不可变对象作为参数时,函数内修改不会影响原对象。
def modify_num(n):
n += 10
num = 5
modify_num(num)
print(num) # 输出: 5 (不变)
3. 参数类型
3.1 必需参数
调用时必须按照正确顺序传入的参数。
def power(base, exponent):
return base ** exponent
print(power(2, 3)) # 输出: 8
# print(power(2)) # 错误,缺少必需参数
3.2 位置参数
按参数位置顺序传递。
def info(name, age):
print(f"{name} is {age} years old")
info("Alice", 25) # Alice对应name,25对应age
3.3 默认参数
定义时给参数指定默认值,调用时可省略。
def greet(name, msg="Good morning!"):
print(f"Hello {name}, {msg}")
greet("Bob") # 使用默认msg
greet("Alice", "How are you?") # 覆盖默认msg
3.4 不定长参数
使用*args
接收任意数量的位置参数,作为元组处理。
def sum_all(*numbers):
total = 0
for num in numbers:
total += num
return total
print(sum_all(1, 2, 3)) # 输出: 6
print(sum_all(1, 2, 3, 4, 5)) # 输出: 15
3.5 关键字参数
使用**kwargs
接收任意数量的关键字参数,作为字典处理。
def person_info(**info):
for key, value in info.items():
print(f"{key}: {value}")
person_info(name="Alice", age=25, city="New York")
3.6 命名关键字参数
限制调用者可以传入的参数名,使用*
分隔。
def person_info(name, *, age, city):
print(f"{name} is {age} years old, lives in {city}")
person_info("Alice", age=25, city="New York") # 正确
# person_info("Bob", 30, "London") # 错误,age和city必须用关键字传递
4. 匿名函数(lambda)
lambda函数是一种小型匿名函数,只能包含一个表达式。
lambda arguments: expression
示例:
# 普通函数
def square(x):
return x ** 2
# lambda等价形式
square = lambda x: x ** 2
print(square(5)) # 输出: 25
# 直接使用
nums = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, nums))
print(squares) # 输出: [1, 4, 9, 16]
# 多参数lambda
add = lambda a, b: a + b
print(add(3, 5)) # 输出: 8
lambda常用于需要函数对象的地方,如排序:
students = [("Alice", 22), ("Bob", 19), ("Charlie", 20)]
students.sort(key=lambda student: student[1]) # 按年龄排序
print(students) # 输出: [('Bob', 19), ('Charlie', 20), ('Alice', 22)]