【Python基础:语法第三课】Python 函数详解:定义、参数、返回值与作用域

大家好!欢迎来到 Python 基础语法第三课。今天我们重点攻克函数(Function)——它是 Python 编程的灵魂!学会函数,你就能把重复代码封装起来,让程序更简洁、更易维护、更优雅。

用一个生活比喻:
函数就像你家里的外卖小程序——你输入需求(参数),它帮你处理(函数体),最后送上美食(返回值)。用一次定义,随时随用!

1. 函数的基础:定义与调用

定义函数用关键字 def,后面跟函数名、小括号、冒号:

# 最简单的函数:什么都不干
def say_hello():
    print("Hello, Python世界!")

# 调用函数(使用)
say_hello()                  # 输出:Hello, Python世界!
say_hello()                  # 可以调用无数次!

带参数的函数(传入数据)

def greet(name):             # name 是参数(形参)
    print(f"你好,{name}!欢迎学习Python~")

greet("小明")                # 调用时传入实际值(实参) → 你好,小明!欢迎学习Python~
greet("小红")                # 再次调用,传入不同值

多个参数

def introduce(name, age, city="北京"):  # city 有默认值
    print(f"我叫{name},今年{age}岁,来自{city}")

introduce("张三", 18)                  # → 我叫张三,今年18岁,来自北京(使用默认值)
introduce("李四", 20, "上海")          # → 我叫李四,今年20岁,来自上海(覆盖默认值)

2. 参数类型详解(超级重要!)

Python 的参数超级灵活,一共五种常见用法:

类型写法说明示例调用
位置参数def func(a, b)必须按顺序传入func(10, 20)
关键字参数def func(a, b)调用时指定参数名,可乱序func(b=20, a=10)
默认参数def func(a, b=100)有默认值,不传就用默认func(5) → b=100
可变位置参数def func(*args)接收任意个数位置参数,变成元组func(1,2,3,4,5) → args=(1,2,3,4,5)
可变关键字参数def func(**kwargs)接收任意个数关键字参数,变成字典func(name=”王五”, age=22) → kwargs={‘name’:’王五’,’age’:22}

实战组合使用(最常见写法)

def register(name, age, *hobbies, city="未知", **extra_info):
    print(f"注册用户:{name},年龄:{age},城市:{city}")
    if hobbies:
        print("爱好:", hobbies)
    if extra_info:
        print("其他信息:", extra_info)

# 调用示例
register("小明", 18, "篮球", "编程", "吉他", city="广州", gender="男", score=95.5)
# 输出:
# 注册用户:小明,年龄:18,城市:广州
# 爱好: ('篮球', '编程', '吉他')
# 其他信息: {'gender': '男', 'score': 95.5}

参数顺序铁律(必须记住!):

def func(位置参数, *args, 默认参数, **kwargs):

顺序错了会报错!

3. 返回值(return)——函数的“外卖”

函数可以返回数据给调用者,用 return

def add(a, b):
    result = a + b
    return result         # 返回计算结果

sum_value = add(3, 7)      # sum_value = 10
print(sum_value)          # 10

返回多个值(其实是返回一个元组!)

def get_student_info():
    return "赵六", 19, 98.5   # 实际上返回 ("赵六", 19, 98.5)

name, age, score = get_student_info()  # 元组解包!超级好用
print(f"{name}今年{age}岁,成绩{score}分")

没有 return 或 return None:函数默认返回 None

def say_hi():
    print("Hi~")

result = say_hi()          # result = None

4. 作用域(Scope)——变量的“生存范围”

这是初学者最容易混淆的地方,用一个故事记住:

家里(全局)买了冰箱,客厅(函数内)也能用;
但你在客厅里买了个小冰箱(局部变量),出门就看不到了!

x = 100                     # 全局变量,全程序都能访问

def test():
    y = 200                 # 局部变量,只在函数内有效
    print("函数内x =", x)    # 可以访问全局变量 → 100
    print("函数内y =", y)    # → 200

test()
print("函数外x =", x)        # → 100
# print(y)                  # 报错!y 是局部变量,函数外访问不了

特殊情况:函数内修改全局变量

money = 1000

def spend(amount):
    global money            # 声明要修改全局变量
    money -= amount
    print(f"花了{amount}元,还剩{money}元")

spend(300)                  # 花了300元,还剩700元
print(money)                # 700

非要修改外部变量?推荐用返回值方式(更安全)

def add_bonus(salary):
    new_salary = salary + 1000
    return new_salary       # 不直接改外部,推荐!

my_salary = 5000
my_salary = add_bonus(my_salary)
print(my_salary)            # 6000

5. 进阶小技巧

  1. 文档字符串(docstring)——给函数写说明
def multiply(a, b):
    """
    计算两个数的乘积
    参数:
        a: 第一个数
        b: 第二个数
    返回值:
        a 和 b 的乘积
    """
    return a * b

print(multiply.__doc__)     # 可以查看说明
  1. lambda 匿名函数——一行定义简单函数
# 普通函数
def square(x):
    return x * x

# lambda 写法(等价)
square = lambda x: x * x

# 常配合 map、filter、sorted 使用
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, numbers))  # [1, 4, 9, 16, 25]

6. 总结对比表

概念关键点记忆口诀
定义函数def 函数名(参数):def 开头,冒号别忘
参数位置、关键字、默认、args、*kwargs顺序不能乱!
返回值return 数据(可多个)不写 return 返回 None
作用域局部变量函数内有效,全局变量到处可用客厅的东西出不了门
global修改全局变量时声明要改全局,先报备

结语

函数是 Python 最强大的工具之一!掌握了它,你就能:

  • 消除重复代码
  • 让程序结构清晰
  • 轻松实现复杂逻辑

练习建议

  1. 写一个计算圆面积的函数(参数:半径,返回:面积)
  2. 写一个支持任意数量数字求和的函数(用 *args)
  3. 写一个学生信息注册函数,接收姓名、年龄、选修课(可多门)和额外信息

下一课我们将学习 列表和元组——Python 的“善变女友”和“长情伴侣”,敬请期待!

加油!你离 Python 中级玩家只差一步了!🚀

文章已创建 3707

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部