编程学习网 > 编程语言 > Python > Python 函数与模块入门:把代码装进“盒子”,随用随取!
2026
10-13

Python 函数与模块入门:把代码装进“盒子”,随用随取!


前几章我们学会了顺序、分支和循环,但还差一个关键能力:复用。比如程序里好几处都要计算两个数的和,总不能每次都把代码重写一遍吧?函数就是为“复用”而生:把一段代码封装起来、起个名字,需要时调用一次即可。今天就来学函数,以及把函数组织起来的“模块”。

01 函数:封装可复用的代码

定义函数用 def 关键字,写法是 def 函数名(参数):,后面缩进的部分是函数体。函数分两类:有返回值的(用 return 返回结果)和没有返回值的(只负责执行操作)。看几个例子:

python
# 没有返回值的函数:只做事,不返回结果
def say_hello():
    print("你好,Python!")

say_hello()
# 输出:你好,Python!

# 有返回值的函数:用 return 返回结果
def add(a, b):
    return a + b

result = add(3, 5)
print(result)   # 把调用函数的结果打印出来
# 输出:8

注意区别:没有 return 的函数,调用后得到的是 None(表示“什么都没有”);有 return 的函数,调用处就能拿到 return 出来的值。

02 默认参数:调用时可以“偷懒”

定义函数时,可以给参数设置默认值。调用时如果不传这个参数,就自动使用默认值。看几个例子:

python
def greet(name, greeting="你好"):
    print(f"{greeting},{name}!")

greet("小明")            # 用默认问候语
# 输出:你好,小明!
greet("小红", "早上好")   # 覆盖默认值
# 输出:早上好,小红!

这个能力和 Java 的方法重载有点像,但概念不同:Java 靠定义多个同名方法(重载)来支持不同的参数组合;Python 没有重载,靠默认参数实现类似效果——参数个数固定,只是某些参数可以不传。

03 可变参数:参数个数不固定

有时函数要接收的参数个数不固定,比如求任意多个数的和。这时可以用可变参数 *args,函数内部会把它当做一个元组来遍历。看几个例子:

python
def total(*numbers):
    result = 0
    for n in numbers:
        result += n
    return result

print(total(1, 2, 3))        # 输出 6
print(total(1, 2, 3, 4, 5))  # 输出 15

调用时想传几个就传几个,它们会全部收进 numbers 这个元组里,再用循环逐个累加。

04 模块:给代码“分区”,告别命名冲突

给变量、函数起名字,总会遇到一个尴尬的问题:命名冲突。最简单的场景是同一个 .py 文件里定义了两个同名函数——Python 没有函数重载,后定义的那个会覆盖先定义的,也就是说真正生效的只有最后一个。看几个例子:

python
def calc(x):
    return x * 2

def calc(x):
    return x * 3

print(calc(5))  # 输出 15:后定义的 calc 覆盖了前面的

解决办法之一,是把不同功能的函数放进不同的 .py 文件——这样的文件就叫“模块”。使用时用 import 引入,再通过 模块名.函数名 的方式调用,就不会互相干扰。看几个例子:

python
# 文件 mymath.py:专门放数学计算的函数
def add(a, b):
    return a + b

# 文件 main.py:引入并使用 mymath 模块
import mymath

print(mymath.add(3, 5))  # 输出 8

两个文件放在同一目录下,main.py 里 import mymath 之后,就能用 mymath.add(3, 5) 调用模块里的函数了。

05 入口函数:if __name__ == "__main__"

写脚本时,我们常常希望:直接运行这个文件时执行某些代码,被别的文件导入时就不执行。Python 用 if __name__ == "__main__" 来实现,这一判断常被称为程序的“入口”。原理是:每个模块都有一个 __name__ 属性,文件被直接运行时它的值是 "__main__",被 import 时值是模块名。看几个例子:

python
# 文件 main.py
def add(a, b):
    return a + b

if __name__ == "__main__":
    # 只有直接运行 main.py 时,才会执行下面的代码
    print(add(3, 5))  # 输出 8

直接运行 main.py 会输出 8;如果别的文件 import main,这段 print 不会执行。把测试代码放进这个判断里,既能直接运行验证,又不会在别人引用你模块时被误执行。

06 练习题

学了这么多,来做三道题巩固一下。参考答案附在每道题后面,建议先自己写,再对照检查:

1. 写一个函数 is_even(n),判断整数 n 是否为偶数,是则返回 True,否则返回 False。

python
def is_even(n):
    return n % 2 == 0

print(is_even(4))  # True
print(is_even(7))  # False

2. 写一个带默认参数的函数 power(base, exp=2),返回 base 的 exp 次方;分别调用 power(3) 和 power(2, 3)。

python
def power(base, exp=2):
    return base ** exp

print(power(3))     # 9,用默认的 2 次方
print(power(2, 3))  # 8,显式传入 3 次方

3. 写一个可变参数函数 average(*numbers),求任意多个数的平均值。

python
def average(*numbers):
    return sum(numbers) / len(numbers)

print(average(1, 2, 3))  # 2.0

07 小结

这一章的要点:def 定义函数、return 返回结果;默认参数让调用更灵活;*args 接收任意个数的参数;模块(.py 文件)用 import 组织代码、避免命名冲突;if __name__ == "__main__" 控制程序的入口。函数把代码变成“积木”,模块把积木分门别类放好——接下来,就可以搭更大的程序了。

以上就是“Python 函数与模块入门:把代码装进“盒子”,随用随取”的详细内容,想要了解更多Python教程欢迎持续关注编程学习网。 

扫码二维码 获取免费视频学习资料

Python编程学习

查 看2022高级编程视频教程免费获取