Skip to content

04 函数与模块

函数

函数可以让我们的程序从过程走向模块化,变得更清晰、更可维护

定义与语法

Python 中使用def关键字定义一个函数: - def后面跟着函数名 - 函数名后面跟着一串形式参数 - 函数声明最后也已冒号结尾

从下一行开始编写函数内代码

传参与返回值

在函数声明中列举的参数被称为形式参数: - 用来接收传入的值 - 占位符,在函数定义时不会有具体的值,直到函数被调用时才赋予实际值

def greet(name):  # 这里的 name 就是形式参数
    print("Hello, " + name + "!")

在调用函数时传递的参数被称为实际参数: - 用来给形式参数赋值 - 函数外部的数据,被传入到函数内以供函数使用

greet("Alice")  # 这里的 Alice 就是实际参数

返回值是函数执行结束后返回的结果: - 函数可以有返回值,也可以没有 - 使用return语法返回 - 为了传递一些信息给函数外的调用者

def square(number):
    return number * number

result = square(4)
print(result)  # 16

返回值也可以是多个:

def get_name_and_age():
    name = "Alice"
    age = 30
    return name, age

name, age = get_name_and_age()
print(name)  # Alice
print(age)   # 30

也可以没有:

def greet(name):
    print("Hello, " + name + "!")  # 没有return语句

作用域

重要概念

我们的程序就像一座多层的建筑,每一层楼都有自己的房间和钥匙。

在这里,每个变量就像房间中的“物品”,不同的楼层对应不同的作用域。

你可以在某个楼层找到自己需要的物品,但不能随意拿到其他楼层的物品,除非有合适的权限(即作用域规则)。

这栋建筑的作用域分为以下四个“楼层”:

局部作用域 - 私人办公室

一间私人办公室内有一些私人物品,只有在房间内的人才有权力使用,且这个人离开后物品就会消失

def office():
    password = "secret123"  # 私人办公室里的私密物品
    print(password)  # 可以在办公室里使用
office()
print(password)  # 会报错,因为在办公室外无法访问密码

全局作用域 - 公共区域

是大厅或走廊,所有楼层的员工都可以到达这个区域

你可以把一些公共信息放在大厅里,比如“公告栏”

在任何房间里的人都可以查看公告栏上的信息,因为这是整个建筑公共区域的一部分

假如你在大厅放了一个 “公告” 变量,那么每个办公室的人都可以看到它,不管在哪层楼

notice = "Building will close at 6 PM"  # 公告栏

def office():
    print(notice)  # 在办公室里可以看到公告
office()

嵌套作用域 - 楼层

允许某一层楼所有房间的人访问!其他楼不行

如果某个楼层有一个“咖啡机” 变量,那么这个楼层的所有房间都能使用这个咖啡机

def floor():  # 楼层
    coffee_machine = "Coffee machine on Floor 2"  # 楼层的共享物品

    def room():
        print(coffee_machine)  # 楼层的共享物品可以被这个房间(内部函数)使用

    room()
floor()

内置作用域 - 基础设施

电梯、楼梯,或供电

这些基础设施总是存在,是建筑物设计时就内置好的,所有楼层和房间的人都可以使用

比如Python的内置函数 print()、len() 等,任何代码里都可以调用它们,因为它们是“系统自带的”

就像电梯可以让你上下楼,print() 函数可以在任何地方使用

模块使用

import 语句

  • 导入整个模块:使用 import 模块名,模块中的所有函数和变量都可以访问
  • 导入模块里的一些内容:使用 from 模块名 import 成员 可以只导入模块的特定函数或变量
  • 别名:import 模块名 as 别名 给函数取名字,方便写

自定义

  • 创建一个 Python 文件
  • 在里面写一点函数和变量
  • 在其他 Python 文件导入并使用
# mymodule.py
def greet(name):
    return f"Hello, {name}!"

pi = 3.14159
import mymodule
print(mymodule.greet("Alice"))  # Hello, Alice!
print(mymodule.pi)  # 3.14159

练习

函数

  • 编写函数 greet(name),输入参数为一个字符串,输出问候语句,例如:Hello, Alice!
  • 计算阶乘 编写一个函数 factorial(n),输入参数为正整数 n,返回 n 的阶乘。

模块

  • 创建一个名为 geometry 的模块,其中包含计算矩形、圆形面积的函数。rectangle_area(width, height) 和 circle_area(radius)。
  • 使用 math 模块中的 sqrt 函数,编写一个计算直角三角形斜边的函数 hypotenuse(a, b),其中 a 和 b 为直角边的长度,返回斜边长度。