Python 函数详解

发布于:2025-08-06 ⋅ 阅读:(18) ⋅ 点赞:(0)

在写 Python 程序的时候,如果你发现自己不停地在写重复的代码,那说明你需要函数来帮你省事了。

参考文章: Python 函数 | 简单一点学习 easyeasy.me

目录

  1. 什么是函数?
  2. 为什么要用函数?
  3. 如何定义函数(def 语法)
  4. 函数参数的各种花样(位置参数、默认值、可变参数)
  5. 函数的返回值
  6. 变量作用域(局部变量 vs 全局变量)
  7. 匿名函数 lambda
  8. 函数作为参数传递
  9. 嵌套函数和闭包
  10. 装饰器(进阶)
  11. 实战:写几个有用的函数

1. 什么是函数?

函数就是把一段代码封装起来,给它起个名字,以后想用的时候直接调用名字就行。

比如你写了个计算两个数相加的功能:

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

你只要写好一次,之后用 add(3, 4) 就能得到 7


2. 为什么要用函数?

几个原因:

  • 复用性高:写一次,用多次;
  • 代码更清晰:每段代码都表达一个明确功能;
  • 方便维护:改一个地方,所有地方都生效;
  • 避免重复:不复制粘贴,写得更优雅。

3. 如何定义函数(def 语法)

def 关键词来定义函数:

def greet(name):
    print("Hello,", name)

调用方法:

greet("Tom")  # 输出:Hello, Tom

注意:

  • 函数名尽量见名知意;
  • 函数体缩进(4 空格)是必须的;
  • return 可以返回值,也可以没有。

4. 函数参数的各种花样

Python 的函数参数可以有很多种写法,主要有这些:

📌 位置参数

最常见的,就是你传几个值,函数就按顺序接收。

def say_hello(name, age):
    print(f"{name} is {age} years old.")

📌 默认参数

有些参数可以不传,给它设置一个默认值。

def greet(name="Guest"):
    print("Hi", name)

📌 可变参数 *args

接收任意数量的位置参数(会变成元组):

def add_all(*numbers):
    return sum(numbers)

add_all(1, 2, 3, 4)  # 结果是 10

📌 关键字参数 **kwargs

接收任意数量的键值对参数(会变成字典):

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(key, ":", value)

print_info(name="Alice", age=20)

5. 函数的返回值

return 把值返回出去:

def double(x):
    return x * 2

result = double(5)  # result 是 10

如果不写 return,函数默认返回 None

可以返回多个值(其实是个元组):

def calc(a, b):
    return a + b, a * b

s, p = calc(2, 3)

6. 变量作用域(局部变量 vs 全局变量)

局部变量(local)

只在函数内部能用:

def test():
    x = 10  # x 是局部变量

全局变量(global)

在整个文件中都能用的变量:

x = 5

def change():
    global x
    x = 10

注意:不要滥用全局变量,会让代码难维护。


7. 匿名函数 lambda

lambda 是一种简洁写法,适合只用一次的小函数:

double = lambda x: x * 2
print(double(4))  # 输出 8

常见用法是搭配 mapfilter 等函数。


8. 函数作为参数传递

Python 中,函数本身也是“值”,可以当参数传:

def apply(f, x):
    return f(x)

print(apply(lambda x: x**2, 5))  # 输出 25

9. 嵌套函数和闭包

函数里可以再定义函数:

def outer(msg):
    def inner():
        print("Message:", msg)
    return inner

f = outer("Hi")
f()  # 输出 Message: Hi

这种结构叫“闭包”,可以记住外层函数的变量。


10. 装饰器(进阶)

装饰器是个“函数改造器”,用来给函数加功能而不改源码,后续文章我会专门讲解装饰器如何定义与使用:

def logger(func):
    def wrapper(*args, **kwargs):
        print("Calling", func.__name__)
        return func(*args, **kwargs)
    return wrapper

@logger
def greet(name):
    print("Hello", name)

greet("Bob")

运行结果:

Calling greet
Hello Bob

11. 实战:写几个有用的函数

统计一个字符串中某个字符出现的次数

def count_char(s, ch):
    return s.count(ch)

判断一个数是不是素数

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5)+1):
        if n % i == 0:
            return False
    return True

生成一个斐波那契数列

def fib(n):
    seq = [0, 1]
    for i in range(2, n):
        seq.append(seq[-1] + seq[-2])
    return seq[:n]


网站公告

今日签到

点亮在社区的每一天
去签到