
一、函数的基本概念
函数是一段可重复使用的代码块,用于执行特定任务。为什么要使用函数,一是可读性,二是便于维护,三是可重复使用。如果一段只需要使用一次,不建议你使用函数。
定义函数示例:
python
# 定义1个函数
def greet_user(first_name,last_name):
# print(f"你好,{username},{con}")
full_name = f'{first_name} {last_name}'
return full_name
#调用函数
# greet_user() #不传递参数会报错
print(greet_user('黄','四喜'))
函数定义使用def关键字,后面跟着函数名和括号内的参数列表。函数体缩进,可以包含多行代码。函数可以使用return语句返回一个值,如果不写return,则默认返回None。
二、函数中的参数
1.形参和实参
形参:在上面的示例代码中,first_name 和 last_name是形参,形参可以设置一个初始值,可以避免调用函数时没有实参传递导致程序报错。
实参:在调用函数时传递给函数的信息,实参对应形参的位置
2.位置实参的顺序很重要
当上面的函数将姓和名颠倒输入后,输出的内容就会颠倒
3.关键字实参
如果你要避免位置实参输入错误的情况出现,可以在用关键字实参,即实参前面加上形参,将值和形参名称关联起来,格式:形参=实参
python
# 定义1个函数
def greet_user(first_name,last_name):
# print(f"你好,{username},{con}")
full_name = f'{first_name}{last_name}'
return full_name
#调用函数
# greet_user() #不传递参数会报错
print(greet_user('黄','四喜')) # 输出:黄四喜
print(greet_user('四喜','黄')) # 输出:四喜黄
print(greet_user(last_name='四喜',first_name='黄')) # 输出:黄四喜
4.给形参设置默认值
给形参设置一个默认值,这样在调用函数时即使没有实参传递,也不会报错,而是会直接使用形参的默认值进行计算
python
#定义1个加法
def add(a=0,b=0):
return a + b
print(add()) #输出:0
print(add(1,1)) #输出:2
5.可变参数
即形参的数量不固定,传递参数时可以是任意的,但是要符合函数的使用逻辑。在形参前面加个星号(*),即让python创建一个形参元组,该元组包含函数收到的所有值。两个星(**)表示传递键值对。
python
# *args 接收任意数量的位置参数
def sum_all(*args):
return sum(args)
print(sum_all(1, 2, 3, 4, 5)) # 输出: 15
# **kwargs 接收任意数量的关键字参数
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="Alice", age=30, city="New York")
6.函数作用域
python
global_var = "I'm global"
def test_scope():
local_var = "I'm local"
print(global_var) # 可以访问全局变量
print(local_var) # 可以访问局部变量
# 修改全局变量需要声明
counter = 0
def increment():
global counter # 声明使用全局变量
counter += 1
increment()
print(counter) # 输出: 1
7.参数类型提示
设定形参的时候,可以对函数的类型进行提示。
python
def add(a: int, b: int) -> int:
"""返回两个整数的和"""
return a + b
def process_data(data: list[str]) -> dict:
"""处理字符串列表,返回字典"""
return {item: len(item) for item in data}
8.递归函数
python
def factorial(n):
"""计算阶乘"""
if n == 0 or n == 1:
return 1
else:
return n * factorial(n-1)
print(factorial(5)) # 输出: 120
9.导入模块中的函数
你创建了一个函数full_name(),把它存储在一个名为name.py的python文件中,你需要导入name文件,然后才能调用full_name()函数。
name.py代码:
python
# 定义返回所有名字
def full_name(first_name,last_name):
# print(f"你好,{username},{con}")
full_name = f'{first_name}{last_name}'
return full_name
调动文件代码:
python
# 导入name模块
import name
# 调用name模块中的full_name()函数
full_name = name.full_name('许','三多')
print(full_name) #输出:许三多
三、函数实践建议
-
单一职责:每个函数只做一件事
-
明确命名:使用动词或动词短语命名函数
-
适当长度:函数不宜过长,保持可读性
-
使用文档字符串:为复杂函数添加说明
-
避免副作用:尽量减少函数对外部状态的修改
-
参数数量:避免过多参数(通常不超过5个)