函数的定义和调用

69 阅读4分钟

一、函数的定义

函数定义的核心是:指定函数名、参数、功能逻辑和返回值,语法结构如下:

基本语法

python

运行

def 函数名(参数列表):
    """函数文档字符串(可选,用于说明功能)"""
    函数体(实现功能的代码)
    return 返回值(可选)

关键说明

  1. def:定义函数的关键字(Python 专属,Java 用public static 返回类型 函数名,JavaScript 用function 函数名);
  2. 函数名:遵循标识符规则(小写 + 下划线,如calc_sum),见名知意;
  3. 参数列表:可选,分为形参(定义时的参数,如a, b)和实参(调用时传入的具体值);
  4. 函数体:缩进的代码块,实现核心功能;
  5. return:可选,返回结果给调用者,无return则默认返回None
  6. 文档字符串:""" """包裹的注释,用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)

三、核心注意事项

  1. 作用域:函数内定义的变量是局部变量,外部无法访问;若需使用全局变量,需用global声明(不推荐);

  2. 返回值return可返回任意类型(数字、列表、函数等),且执行return后函数立即结束;

  3. 参数传递

    • 不可变类型(数字、字符串、元组):传值(函数内修改不影响外部);
    • 可变类型(列表、字典):传引用(函数内修改会影响外部);
  4. 函数嵌套:函数内可定义另一个函数(内部函数可访问外部函数的变量,需用nonlocal声明);

  5. 递归函数:函数调用自身,需有终止条件(如阶乘、斐波那契数列)。

四、其他语言示例(对比)

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 更灵活)。