当前位置:首页>python>30天学Python|第 9 天:作用域、模块域导入

30天学Python|第 9 天:作用域、模块域导入

  • 2026-09-08 17:39:27
30天学Python|第 9 天:作用域、模块域导入

函数让我们把代码分成多个小任务,模块则让我们把一个较大的程序分成多个文件。

在拆分之前,需要先弄清楚:变量在哪里可以使用?

在函数内部创建的变量通常是局部变量,只能在函数内部使用:

def calculate_total():
    price = 100
    quantity = 3
    total = price * quantity
    print
(total)

calculate_total()

如果在函数外访问 total:

print(total)

程序会出现 NameError,因为函数外部看不到这个局部变量。

二、全局变量

在函数外创建的变量叫全局变量:

tax_rate = 0.06

def
 calculate_tax(price):
    return
 price * tax_rate

函数可以读取全局变量,但不建议在函数中随意修改它。更清晰的方式是通过参数传入:

def calculate_tax(price, tax_rate):
    return
 price * tax_rate

这样函数需要什么数据一目了然,也更方便测试。

三、同名变量不会互相替代

name = "Linda"

def
 show_name():
    name = "Python"
    print
(f"函数内部:{name}")

show_name()
print
(f"函数外部:{name}")

输出:

函数内部:Python
函数外部:Linda

函数内部的 name 与外部的 name 位于不同作用域。

四、导入标准库

Python 自带许多可以直接使用的模块,称为标准库。

导入整个模块:

import math

print
(math.sqrt(16))
print
(math.pi)

只导入需要的内容:

from math import sqrt

print
(sqrt(16))

使用别名:

import random as rd

print
(rd.randint(1, 10))

初学阶段更推荐 import 模块名,因为能清楚看出函数来自哪个模块。

五、random 模块

生成随机整数:

import random

number = random.randint(1, 100)
print
(number)

从列表中随机选择一个元素:

names = ["Linda", "小明", "小红"]
winner = random.choice(names)
print
(winner)

打乱列表:

random.shuffle(names)
print
(names)

六、创建自己的模块

新建 calculator.py:

def add(a, b):
    return
 a + b


def
 subtract(a, b):
    return
 a - b

在同一文件夹中新建 main.py:

import calculator

print
(calculator.add(10, 5))
print
(calculator.subtract(10, 5))

一个文件就是一个模块。把计算逻辑与主程序分开,项目会更容易维护。

七、主程序入口

你可能会看到这种写法:

if __name__ == "__main__":
    print
("程序从这里开始运行")

当文件被直接运行时,这段代码会执行;当文件被其他模块导入时,它不会自动执行。

现阶段不必死记,只需要知道它常用于区分“直接运行”和“被导入”。

基础练习

  1. 1. 观察局部变量在函数外使用时的报错。
  2. 2. 使用 math.sqrt() 计算平方根。
  3. 3. 使用 random.randint() 模拟掷骰子。
  4. 4. 使用 random.choice() 从名单中随机选人。
  5. 5. 把两个计算函数放进独立模块,再从主程序导入。

今日项目:模块化随机抽奖器

创建 lottery.py:

import random


def
 choose_winners(names, winner_count=1):
    if
 winner_count > len(names):
        return
 []

    return
 random.sample(names, winner_count)

创建 main.py:

import lottery

names = ["Linda", "小明", "小红", "小刚", "小美"]
winner_count = int(input("请输入获奖人数:"))

winners = lottery.choose_winners(names, winner_count)

if
 len(winners) == 0:
    print
("获奖人数不能超过参与人数")
else
:
    print
("获奖名单:")

    for
 winner in winners:
        print
(winner)

查漏测试

  1. 1. 局部变量为什么不能直接在函数外使用?
  2. 2. 为什么更推荐把数据通过参数传入函数?
  3. 3. import math 与 from math import sqrt 有什么区别?
  4. 4. 自定义模块本质上是什么?
  5. 5. if __name__ == "__main__" 有什么作用?

模块化的目标不是把文件拆得越多越好,而是让每个文件承担清楚的职责。

最新文章

随机文章