Python笔记:函数对象与变量作用域详解

需积分: 0 0 下载量 22 浏览量 更新于2024-08-30 收藏 611KB PDF 举报
本篇笔记记录了2020年3月19日关于Python编程的学习内容,主要涵盖了函数作为对象的概念,以及变量的作用域——全局变量和局部变量的区分与管理。以下是详细的知识点: 1. **函数也是对象**: Python中,函数可以被视为对象,可以通过赋值给变量或作为参数传递。例如,`def test01():` 定义了一个函数,随后通过 `c = test01` 将函数赋值给变量 `c`,这表明函数是可以存储的对象。`c()` 调用函数,显示了函数作为对象的特性。 2. **变量作用域**: - **全局变量**:在函数和类定义外部声明的变量,其作用域覆盖整个模块,如 `a=3`。全局变量应谨慎使用,尽量避免副作用,并通过 `global` 关键字在函数内部修改。 - **局部变量**:在函数体内定义的变量,如 `deftest01(): b=4`,局部变量的作用域仅限于函数内部。当函数结束时,局部变量会自动销毁。若函数内部有同名全局变量,局部变量会遮盖全局变量。 3. **效率测试**: 部分内容提到了局部变量的引用通常比全局变量更快,因为Python解释器更倾向于使用局部变量。 4. **参数传递**: - **不可变对象的引用**:Python中的不可变对象(如数字、元组)传递的是对象的引用,而非副本,因此改变传入函数的不可变对象不会影响原对象。 - **可变对象的引用**:对于可变对象(如列表、字典),传递的是引用,函数内部的操作会改变原对象。 5. **浅拷贝和深拷贝**: 当传递不可变对象时,实际上是进行浅拷贝,而对象内部的引用仍指向原始数据。深拷贝用于复杂的数据结构,如字典或列表,它会创建全新的对象,独立于原始对象。 6. **函数参数类型**: - **位置参数**:按顺序传递的参数。 - **默认值参数**:提供预设值,如果没有指定则使用默认值。 - **命名参数**:允许按名称而不是位置来传递参数,便于控制和理解。 - **可变参数**:`*args` 用于处理不定数量的位置参数,`**kwargs` 用于处理关键字参数。 7. **lambda表达式和匿名函数**: Python中的匿名函数,可以用在需要函数对象但又不想定义完整函数的情况。`lambda x: x * x` 是一个简单的例子,表示接收一个参数并返回其平方。 8. **eval()函数**: 这个函数可以执行字符串作为Python代码,但使用时需谨慎,因为它能执行任何代码,可能带来安全风险。 9. **递归函数**: 函数调用自身的过程,适用于解决需要重复执行相同逻辑的问题,如树形结构遍历。 综上,这篇笔记围绕函数对象、变量作用域、参数传递等核心概念展开,帮助读者理解和掌握Python编程中的重要知识点。