当前位置: 首页 > news >正文

Python函数参数与作用域生存指南

好的!这是一份关于 Python 函数参数与作用域的初级指南,旨在帮助你穿越这些概念构成的“沙漠”与“丛林”。


生存技巧一:认识绿洲——函数定义与调用

函数就像沙漠中的绿洲,它封装了可重复使用的代码块。定义函数使用def关键字:

def 问候(名字): """向指定名字的人打招呼""" 信息 = f"你好,{名字}!" print(信息)
  • 问候: 函数名,是我们找到绿洲的标识。
  • (名字):形参列表。名字是我们在函数内部使用的一个占位符变量,代表调用者实际传入的值。它定义了绿洲的入口。
  • """...""": 文档字符串,说明这个绿洲是做什么用的。
  • 信息 = ...print(信息): 函数体,绿洲内部的具体功能。

调用函数就是使用绿洲:

问候("小明") # 输出:你好,小明! 问候("小红") # 输出:你好,小红!
  • "小明""小红"实参。它们是我们在调用时实际传入的值,会传递给函数内部的形参名字

生存技巧二:穿越参数沙漠——理解参数传递

沙漠中有不同类型的路径(参数传递方式):

  1. 位置参数:最常见的路径,实参按顺序传递给形参。

    def 介绍(姓名, 职业): print(f"{姓名} 是一名 {职业}") 介绍("张三", "程序员") # 输出:张三 是一名 程序员 介绍("程序员", "张三") # 输出:程序员 是一名 张三 (顺序错了!结果无意义)
  2. 关键字参数:指定形参名字来传递,顺序不再重要。

    介绍(职业="画家", 姓名="李四") # 输出:李四 是一名 画家 (顺序颠倒但结果正确)
  3. 默认参数:为形参指定一个默认值。如果调用时不提供该实参,则使用默认值。默认参数通常在函数定义时计算一次。

    def 点餐(菜品, 数量=1): # 数量默认是 1 print(f"点了 {数量} 份 {菜品}") 点餐("宫保鸡丁") # 输出:点了 1 份 宫保鸡丁 (使用默认数量) 点餐("鱼香肉丝", 数量=2) # 输出:点了 2 份 鱼香肉丝
  4. 可变数量参数:处理不确定数量的路径。

    • *args: 收集任意多个位置参数到一个元组中。
      def 求和(*数字): 结果 = 0 for 数 in 数字: 结果 += 数 return 结果 print(求和(1, 2)) # 输出:3 print(求和(1, 2, 3, 4)) # 输出:10
    • **kwargs: 收集任意多个关键字参数到一个字典中。
      def 显示信息(**信息): for 键, 值 in 信息.items(): print(f"{键}: {值}") 显示信息(姓名="王五", 年龄=30, 城市="北京") # 输出: # 姓名: 王五 # 年龄: 30 # 城市: 北京

生存技巧三:探索作用域丛林——变量的可见范围

丛林有不同区域,变量只在特定区域可见:

  1. 局部作用域:在函数内部定义的变量(包括形参)。它们只在这个函数内部有效。走出这个函数(绿洲),这些变量就消失了。

    def 计算(): 局部变量 = 10 # 在计算函数内部定义 print(局部变量) # 在函数内部可以访问 计算() # 输出:10 print(局部变量) # 报错!NameError: name '局部变量' is not defined (在函数外部不可见)
  2. 全局作用域:在函数外部定义的变量。它们在整个程序文件(丛林)中都可见。在函数内部可以读取全局变量,但通常不建议在函数内部直接修改全局变量(容易引起混乱)。

    全局变量 = 100 # 在函数外部定义 def 查看全局(): print(全局变量) # 在函数内部可以读取全局变量,输出:100 def 尝试修改(): 全局变量 = 200 # 这实际上创建了一个新的同名局部变量!不是修改全局变量。 print(全局变量) # 输出:200 (访问的是局部变量) 查看全局() # 输出:100 尝试修改() # 输出:200 print(全局变量) # 输出:100 (全局变量未被函数内的操作修改)
  3. 修改全局变量:如果确实需要在函数内部修改全局变量,需要使用global关键字声明。

    全局计数器 = 0 def 增加计数器(): global 全局计数器 # 声明我们要修改的是全局变量 全局计数器 += 1 print(全局计数器) # 输出:0 增加计数器() print(全局计数器) # 输出:1
  4. 嵌套函数与nonlocal:在函数内部再定义函数(嵌套函数)。内部函数可以访问外部函数的变量。如果想在内部函数中修改外部函数的变量(非全局变量),需要使用nonlocal关键字。

    def 外部函数(): 外部变量 = "外部" def 内部函数(): nonlocal 外部变量 # 声明要修改外部函数的变量 外部变量 = "被内部修改了" print("内部:", 外部变量) # 输出:内部: 被内部修改了 内部函数() print("外部:", 外部变量) # 输出:外部: 被内部修改了 (外部变量被修改了) 外部函数()

生存锦囊:关键要点

  1. 形参 vs 实参:定义函数时括号里的是形参(占位符),调用函数时传入的是实参(实际值)。
  2. 参数传递方式:掌握位置参数、关键字参数、默认参数、*args**kwargs的使用场景。
  3. 作用域规则
    • 优先访问局部变量。
    • 内部可读取外部变量。
    • 修改全局变量用global
    • 修改外层非全局变量用nonlocal
  4. 避免陷阱:小心默认参数的可变对象(如列表、字典)带来的副作用。例如:
    def 添加元素(目标=[]): # 默认参数是空列表 目标.append("新元素") return 目标 print(添加元素()) # 输出:['新元素'] print(添加元素()) # 输出:['新元素', '新元素'] (因为默认列表是同一个对象!)
    解决方案:使用不可变对象(如None)作为默认值,并在函数内部创建可变对象。
    def 添加元素(目标=None): if 目标 is None: 目标 = [] # 每次调用都创建新列表 目标.append("新元素") return 目标

理解参数传递和作用域是掌握 Python 函数的关键。多练习,多思考变量的生命周期和可见范围,你就能在这片“沙漠”与“丛林”中游刃有余!

http://www.jsqmd.com/news/360231/

相关文章:

  • buuctf--npuctf_2020_easyheap
  • 2026年靠谱的东莞便携式接触角测量仪/一键式接触角测量仪厂家热销推荐 - 品牌宣传支持者
  • 2026年倍克朗口碑如何详细解读,江苏泳池漆品牌靠谱排名 - mypinpai
  • 完整教程:多智能体框架调研:10个主流 AI Agent 框架
  • 2026年知名的厂房节能改造政府补贴政策/厂房节能改造怎么选直销厂家价格参考 - 品牌宣传支持者
  • 2026年大型乘务管理学校费用,上海优质学校排名 - 工业推荐榜
  • 2026后期制作精良的宣传片制作公司推荐 - 品牌排行榜
  • 01 环境配置
  • 上海高性价比焊工技术培训学校怎么选,为你支招 - myqiye
  • 2026能根据客户需求定制方案的宣传片制作公司推荐 - 品牌排行榜
  • 分析2026年值得推荐的燃气锅炉制造商,远大锅炉优势尽显 - 工业品牌热点
  • 26寒假S基础集训
  • 聊聊广州比较不错的CE认证企业,专业CE认证机构推荐 - 工业设备
  • 2026年口碑好的环保水性漆/水性漆实力工厂参考哪家靠谱(高评价) - 品牌宣传支持者
  • 2026小容量电炖盅品牌推荐:高口碑款选购参考 - 品牌排行榜
  • 聊聊旅游租车选哪家好,杭州佳程汽车服务性价比超突出 - 工业品网
  • llms.txt 帮助大模型理解站点的协议
  • 2026工业级三维扫描仪哪个牌子好?十大品牌综合评测与选购指南 - 匠言榜单
  • 2026年评价高的不锈钢切割圆锯机床/高硬金属加工圆锯机床厂家选择参考建议 - 品牌宣传支持者
  • 2026年热门的全自动精密倒角机/双头精密倒角机厂家选购参考汇总 - 品牌宣传支持者
  • 2026婴儿辅食电炖锅哪个牌子好?宝妈实测口碑推荐 - 品牌排行榜
  • 2026空气炸锅哪个品牌质量比较好?真实体验与品牌解析 - 品牌排行榜
  • PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
  • 2026宝宝辅食锅煮粥哪个牌子好?新手妈妈实用攻略 - 品牌排行榜
  • 2026空气炸锅哪个牌子好用?高口碑品牌推荐 - 品牌排行榜
  • 2026上海广告位公司推荐:聚焦商圈户外LED广告服务 - 品牌排行榜
  • 2026上海地标广告位公司哪家专业?行业实力机构推荐 - 品牌排行榜
  • 2026上海户外广告位哪家好?核心商圈资源推荐 - 品牌排行榜
  • 2026上海商圈广告位公司推荐榜:核心资源与服务能力解析 - 品牌排行榜
  • 2026上海商场广告位出租公司有哪些?行业精选推荐 - 品牌排行榜