一、函数的定义
函数定义的核心是:指定函数名、参数、功能逻辑和返回值,语法结构如下:
基本语法
python
运行
def 函数名(参数列表):
"""函数文档字符串(可选,用于说明功能)"""
函数体(实现功能的代码)
return 返回值(可选)
关键说明
def:定义函数的关键字(Python 专属,Java 用public static 返回类型 函数名,JavaScript 用function 函数名);- 函数名:遵循标识符规则(小写 + 下划线,如
calc_sum),见名知意; - 参数列表:可选,分为形参(定义时的参数,如
a, b)和实参(调用时传入的具体值); - 函数体:缩进的代码块,实现核心功能;
return:可选,返回结果给调用者,无return则默认返回None;- 文档字符串:
""" """包裹的注释,用help(函数名)可查看。
常见函数定义类型
1. 无参数无返回值
python
运行
def print_hello():
"""打印问候语"""
print("Hello, 函数!")
2. 有参数无返回值
python
运行
def print_info(name, age):
"""打印个人信息"""
print(f"姓名:{name},年龄:{age}")
3. 有参数有返回值
python
运行
def calc_sum(a, b):
"""计算两个数的和并返回"""
total = a + b
return total
4. 默认参数(调用时可省略,需放在普通参数后)
python
运行
def print_score(name, subject="数学", score=60):
"""打印成绩,科目和分数有默认值"""
print(f"{name}的{subject}成绩:{score}")
5. 可变参数(处理不确定数量的参数)
*args:接收任意数量的位置参数(元组形式);**kwargs:接收任意数量的关键字参数(字典形式)。
python
运行
def calc_total(*args):
"""计算任意个数的和"""
total = 0
for num in args:
total += num
return total
def print_user(**kwargs):
"""打印用户信息(关键字参数)"""
for key, value in kwargs.items():
print(f"{key}:{value}")
二、函数的调用
定义函数后,需通过函数名(参数)调用才能执行函数体代码,核心是参数匹配。
基本调用方式
1. 无参数调用
python
运行
print_hello() # 输出:Hello, 函数!
2. 位置参数调用(按参数定义顺序传值)
python
运行
print_info("张三", 20) # 输出:姓名:张三,年龄:20
result = calc_sum(3, 5) # result = 8
print(result) # 输出:8
3. 关键字参数调用(按参数名传值,顺序可打乱)
python
运行
print_info(age=22, name="李四") # 输出:姓名:李四,年龄:22
4. 默认参数调用(省略默认参数时用默认值,也可覆盖)
python
运行
print_score("王五") # 输出:王五的数学成绩:60
print_score("赵六", "语文", 90) # 输出:赵六的语文成绩:90
print_score("钱七", score=85) # 输出:钱七的数学成绩:85
5. 可变参数调用
python
运行
# *args调用:直接传多个值,或加*解包列表/元组
total1 = calc_total(1, 2, 3, 4) # total1 = 10
nums = [5, 6, 7]
total2 = calc_total(*nums) # total2 = 18
# **kwargs调用:直接传key=value,或加**解包字典
print_user(name="小明", age=18, gender="男")
user_info = {"name": "小红", "age": 17}
print_user(**user_info)
三、核心注意事项
-
作用域:函数内定义的变量是局部变量,外部无法访问;若需使用全局变量,需用
global声明(不推荐); -
返回值:
return可返回任意类型(数字、列表、函数等),且执行return后函数立即结束; -
参数传递:
- 不可变类型(数字、字符串、元组):传值(函数内修改不影响外部);
- 可变类型(列表、字典):传引用(函数内修改会影响外部);
-
函数嵌套:函数内可定义另一个函数(内部函数可访问外部函数的变量,需用
nonlocal声明); -
递归函数:函数调用自身,需有终止条件(如阶乘、斐波那契数列)。
四、其他语言示例(对比)
JavaScript 函数定义与调用
javascript
运行
// 定义函数
function add(a, b) {
return a + b;
}
// 调用
let result = add(2, 3);
console.log(result); // 5
Java 函数(方法)定义与调用
java
运行
public class FunctionDemo {
// 定义方法(需放在类中)
public static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
// 调用
int result = add(2, 3);
System.out.println(result); // 5
}
}
总结:无论哪种语言,函数的核心逻辑都是「封装功能→传入参数→执行逻辑→返回结果」,差异主要在语法细节(如 Python 无类型声明、Java 需类包裹、JavaScript 更灵活)。