当前位置:首页>python>Python基础学习手册第17章:函数进阶实战!参数进阶、作用域 、 匿名函数等讲解

Python基础学习手册第17章:函数进阶实战!参数进阶、作用域 、 匿名函数等讲解

  • 2026-10-11 07:47:24
Python基础学习手册第17章:函数进阶实战!参数进阶、作用域 、 匿名函数等讲解
上一章,我们对于自定义函数已经是有一定的了解了
接下来,我们可以在上文的基础上继续深入一点去了解
使用我们的自定义函数了
如果没看到的话建议建议从16章开始👇
🚀Python基础学习手册第16章:函数基础全通关!定义 / 参数 / 返回值,创造属于自己的代码(少儿编程版)
⭐接下来我们进入今天的知识学习🌹

📖 本文知识点速览

✅函数中不确定参数数量的问题

✅函数作用域 

✅匿名函数:lambda 表达式

✅函数嵌套:函数里面套函数

📚处理不确定数量的参数
有时候我们不知道函数要接收多少个参数,这时候就需要用到可变参数和关键字参数
✍️可变位置参数:*args
接收任意数量的位置参数,会打包成一个元组(可以自定义参数名)
🖥️demo
# 定义函数,接收任意数量的数字,返回它们的和def add(*args):    """计算任意多个数字的和"""    sum = 0    for i in args:  # 遍历所有的参数数字         sum += i  # 对所有参数进行相加操作     return sum# 调用函数,可以传任意数量的参数print(add(1, 2))  # 输出:3print(add(1, 2, 3))  # 输出:6print(add(1, 2, 3, 4, 5))  # 输出:15print(add())  # 输出:0(不传参数也可以)

✍️可变关键字参数:**kwargs

接收任意数量的关键字参数,会打包成字典(可以自定义参数名)

🖥️demo
# 定义一个函数,接收任意数量的关键字参数,打印学生信息def st(**kwargs):    """打印学生信息"""    print("学生信息:")    for key, value in kwargs.items():  # 遍历字典         print(f"{key}:{value}")# 调用函数,可以传任意数量的关键字参数st(name="小明", age=15, grade="六年级")print("=" * 10)  # 分割一下控制台结果,没有其它作用 st(name="小红", age=14, score=95, gender="女")
⌨️运行结果:
✍️参数组合:位置 + 默认 +*args+**kwargs
四种参数可以组合使用,但是必须遵循固定的顺序
🖥️demo
def demo(a, b=10, *args, **kwargs):    print(f"必选参数a:{a}")    print(f"默认参数b:{b}")    print(f"可变位置参数args:{args}")    print(f"可变关键字参数kwargs:{kwargs}")# 调用函数demo(1)print("=" * 10)demo(1, 20, 3, 4, 5, name="小明", age=15)
⌨️运行结果:
📊参数对比表
参数类型
语法
作用
数据类型打包
位置参数
a
传递的位置参数
默认参数
a=10
不传值执行默认值
可变位置参数
*args
接收任意数量位置参数
元组
可变关键字参数
**kwargs
接收任意数量关键字参数
字典
📚函数作用域
作用域就是变量在代码中能被访问的范围
Python 中有2种基本的作用域:局部作用域和全局作用域

✍️局部变量:

             在函数体内 定义的变量

  •              只能在函数内部访问,函数外部无法访问
  •              函数执行结束后,局部变量会被销毁
  • 🖥️demo
def j():    # x是局部变量,只能在函数内部使用    x = 10    print(f"函数内部x:{x}")j()  # 输出:函数内部x:10# 错误:函数外部无法访问局部变量# print(x)  # 报错:NameError

✍️全局变量

           在函数体外部定义的变量

  •            在整个程序中都可以访问
  •            函数内部可以读取全局变量,但不能直接修改
🖥️demo
# x是全局变量x = 10def q():    # 函数内部可以读取全局变量    print(f"函数内部读取x:{x}")q()  # 输出:函数内部读取x:10print(f"函数外部x:{x}")  # 输出:函数外部x:10
✍️global 关键字
            在函数内部修改全局变量
            如果要在函数内部修改全局变量,必须用global关键字声明
🖥️demo
x = 10def f():    global x  # 声明x是全局变量    x = 20  # 修改全局变量    print(f"函数内部修改x:{x}")f()  # 输出:函数内部修改x:20print(f"函数外部x:{x}")  # 输出:函数外部x:20(全局变量被修改了)
⚠️ 重点提醒
尽量不要在函数内部修改全局变量,会导致代码逻辑混乱,难以维护。如果需要修改,最好通过函数返回值的方式
📚匿名函数 :lambda 表达式
匿名函数就是没有名字的函数,用lambda关键字定义,适合写简单的、一行就能写完的函数
  • 只能有一个表达式,表达式的结果就是返回值
  • 可以有 0 个、1 个或多个参数,多个用逗号分隔
lambda + 参数列表: 表达式
🖥️demo
# 定义加法匿名函数,赋值给变量addadd = lambda a, b: a + b# 调用匿名函数print(add(1, 2))  # 输出:3print(add(10, 20))  # 输出:30# 相当于于这种函数def add(a, b):    return a + b
🌏常用场景:作为参数传递给其他函数
匿名函数最常用的场景是作为参数传递给sorted()、map()等函数
🖥️demo
# 按列表中字典的age排序st = [    {"name": "小明", "age": 15},    {"name": "小红", "age": 14},    {"name": "小刚", "age": 16}]# 按age升序排序st_sorted = sorted(st, key=lambda x: x["age"])print(st_sorted)
📚函数嵌套:函数里面套函数
Python 允许在一个函数内部定义另一个函数,这就是函数嵌套
🖥️demo
def w():    #外层函数    print("这是外层函数")    def n():        #内层函数        print("这是内层函数")    # 调用内层函数    n()# 调用外层函数w()# 错误:外层函数外部无法访问内层函数# inner()  # 报错:NameError
✍️内层函数访问外层函数的变量
内层函数可以访问外层函数的变量,但不能直接修改
需要用nonlocal关键字声明
🖥️demo
def w():    x = 10  # 外层函数的变量    def n():        nonlocal x  # 声明x是外层函数的变量        x = 20  # 修改外层函数的变量        print(f"内层函数x:{x}")    n()    print(f"外层函数x:{x}")w()
🖥️实战案例
demo1:计算任意多个数的平均值
def d1(*args):    """计算任意多个数的平均值"""    if len(args) == 0:        return 0    t = sum(args)    return t/ len(args)# 调用函数print(d1(1, 2, 3))  # 输出:2.0print(d1(10, 20, 30, 40))  # 输出:25.0print(d1())  # 输出:0
demo2: 生成指定长度的随机密码
import randomdef ps(len=8, inc_s=True):    st = "abcdefghijklmnopqrstuvwxyz"    sd = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"    n = "0123456789"    s = "!@#$%^&*()"    # 基础字符库 组合     chars = st + sd + n    # 如果包含特殊符号,添加进去    if inc_s:        chars += s    # 随机生成密码    password = "".join(random.choice(chars) for _ in range(len))    return password# 调用函数print(ps())  # 生成8位包含特殊符号的密码print(ps(len=12))  # 生成12位包含特殊符号的密码print(ps(inc_s=False))  # 生成8位不包含特殊符号的密码
demo3:用 lambda 对列表排序
# 按字符串长度排序w = ["apple", "banana", "cherry", "date"]wst= sorted(w, key=lambda x: len(x))print(wst)  # 输出:['date', 'apple', 'banana', 'cherry']# 按数字的绝对值排序num = [-5, 3, -2, 7, -1]num1= sorted(num, key=lambda x: abs(x))print(num1)  # 输出:[-1, -2, 3, -5, 7]

⚠️ 避坑注意

✅️参数顺序不能乱:位置→默认→*args→**kwargs,顺序错了会报错
✅️全局变量修改要加 global:函数内部直接修改全局变量会创建一个同名局部变量,不会修改全局变量
✅️lambda 只能写一个表达式:复杂逻辑还是用普通函数,不要强行用 lambda
✅️内层函数外部无法访问:只能在定义它的外层函数内部调用
✅️不要滥用可变参数:如果参数数量是固定的,用必选参数更清晰
✌️,那么今天关于自定义函数的入门内容的笔记,到这里就分享结束了✌️
你们学会了吗❓️
要好好练习,多写才能熟能生巧
文章底部有往期文章哦⬇️
🖥️实战练习
✍️练习1:定义一个函数,接收任意多个数字,返回它们的最大值
✍️练习2:定义一个函数,接收一个列表和一个关键字,返回列表中包含                    该关键字的所有元素
✍️练习3:用 lambda 表达式定义一个函数,计算一个数的平方
✍️练习4:定义一个嵌套函数,外层函数接收一个数字 n,内层函数返回                    n  的平方
如果本文对你有帮助🌹
记得点赞👍 + 在看 👀+ 收藏📚
分享给身边更多学 Python 的小伙伴👬,你们的认可是我的动力🔥
往期文章⬇️:
Python基础学习手册第15章:核心算法入门+案例实战讲解(下篇)
Python基础学习手册第14章:6大核心算法入门+案例实战演示(上篇)
Python基础学习手册第13章:random随机库的运用,验证码,抽奖,抽签,随机密码等案例实战
Python基础学习手册第10章:字典(dict)的数据类型增、删、改、查,遍历、嵌套等方法一文详解

最新文章

随机文章