首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第7章 编程术语
7.1 编程术语定义
7.1.1 作为语言的Python和作为解释器的Python
7.1.2 垃圾回收
7.1.3 字面量
7.1.4 关键字
7.1.5 对象、值、实例和身份
7.1.6 项
7.1.7 可变和不可变
7.1.8 索引、键和哈希值
7.1.9 容器、序列、映射和集合类型
7.1.10 特殊方法
7.1.11 模块和包
7.1.12 可调用对象和头等对象
7.2 经常被混淆的术语
7.2.1 语句和表达式
7.2.2 块、子句和主体
7.2.3 变量和特性
7.2.4 函数和方法
7.2.5 可迭代对象和迭代器
7.2.6 语法错误、运行时错误和语义错误
7.2.7 形参和实参
7.2.8 显式类型转换和隐式类型转换
7.2.9 属性和特性
7.2.10 字节码和机器码
7.2.11 脚本和程序,以及脚本语言和编程语言
7.2.12 库、框架、SDK、引擎、API
第8章 常见的Python陷阱
8.1 循环列表的同时不要增删其中的元素
8.2 复制可变值时务必使用copy.copy()和copy.deepcopy()
8.3 不要用可变值作为默认参数
8.4 不要通过字符串连接创建字符串
8.5 不要指望sort()按照字母顺序排序
8.6 不要假设浮点数是完全准确的
8.7 不要使用链式!=运算符
8.8 不要忘记在仅有一项的元组中添加逗号
第9章 Python的奇特难懂之处
9.1 为什么256 是256,而257 不是257
9.2 字符串驻留
9.3 假的Python 增量运算符和减量运算符
9.4 传递空列表给all()
9.5 布尔值是整数值
9.6 链式使用多种运算符
9.7 Python 的反重力特性
当前位置:
首页>>
技术小册>>
Python编程轻松进阶(三)
小册名称:Python编程轻松进阶(三)
### 7.2.4 函数和方法 在Python编程的世界中,函数和方法是两个核心概念,它们是实现代码重用、提高代码可读性和可维护性的基石。尽管函数和方法在概念上有所重叠,但它们在Python中的使用场景和定义方式上存在显著差异。本章节将深入探讨函数和方法的概念、定义方式、调用机制,以及它们在面向对象编程(OOP)中的特殊作用。 #### 7.2.4.1 函数的基本概念 **定义与结构** 函数是一段封装了独立功能的代码块,它可以接受参数(输入),执行一系列操作,并可选择性地返回结果(输出)。在Python中,定义函数使用`def`关键字,后跟函数名和圆括号(可包含参数列表),然后是冒号和函数体(缩进块)。 ```python def greet(name): """向指定的人打招呼""" return "Hello, " + name + "!" # 调用函数 print(greet("Alice")) # 输出: Hello, Alice! ``` **参数与返回值** - **参数**:函数可以定义零个或多个参数,这些参数在函数被调用时接收外部传入的值。参数可以是位置参数、关键字参数、默认参数、可变参数(*args)和关键字可变参数(**kwargs)。 - **返回值**:函数通过`return`语句返回结果给调用者。如果没有`return`语句或`return`后没有值,则默认返回`None`。 **作用域与闭包** - **作用域**:Python函数中的变量遵循LEGB原则(Local -> Enclosed -> Global -> Built-in)来确定其作用域。 - **闭包**:当内层函数引用了外层函数(非全局)的变量时,内层函数连同这些变量的引用一起被称为闭包。闭包允许一个函数访问并操作函数外部的变量。 #### 7.2.4.2 方法的定义与特性 **方法与函数的区别** 在Python中,方法特指与对象相关联的函数。换句话说,方法是定义在类内部的函数,它们至少会接收一个名为`self`(或`cls`在类方法或静态方法中)的参数,用于指代类的实例本身或类本身。通过对象调用方法时,Python会自动将对象作为第一个参数(`self`)传递给方法。 ```python class Person: def __init__(self, name): self.name = name def greet(self): """向外界打招呼""" return f"Hello, my name is {self.name}!" # 创建Person类的实例 alice = Person("Alice") # 调用方法 print(alice.greet()) # 输出: Hello, my name is Alice! ``` **特殊方法(魔术方法)** Python还定义了一系列以双下划线开头和结尾的特殊方法(也称为魔术方法或dunder方法),如`__init__`、`__str__`、`__add__`等。这些方法在Python中有特定的用途,比如对象初始化、定义对象的字符串表示、实现对象间的运算等。 #### 7.2.4.3 函数的进阶应用 **高阶函数** 高阶函数是至少满足下列一个条件的函数: - 接受一个或多个函数作为输入。 - 返回一个函数作为输出。 高阶函数在Python中非常常见,如内置的`map()`、`filter()`和`reduce()`函数,以及装饰器(Decorators)都是高阶函数的应用实例。 **装饰器** 装饰器是Python中一种特殊的语法糖,允许我们在不修改原有函数代码的情况下,给函数增加新的功能。装饰器本质上是一个函数,它接收一个函数作为参数并返回一个新的函数(通常是原函数的增强版)。 ```python def my_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello() # 输出: # Something is happening before the function is called. # Hello! # Something is happening after the function is called. ``` **Lambda函数** Lambda函数是Python中的匿名函数,它们是用`lambda`关键字定义的简单函数。Lambda函数可以接受任意数量的参数,但只能有一个表达式。它们通常用于定义简单的、能够在一行内写完的函数对象。 ```python square = lambda x: x * x print(square(4)) # 输出: 16 ``` #### 7.2.4.4 方法和面向对象编程 在面向对象编程(OOP)中,方法扮演着至关重要的角色。它们不仅封装了对象的行为,还通过`self`参数与对象的状态(属性)紧密关联。通过定义在类中的方法,我们可以实现数据的封装、继承和多态等面向对象编程的核心概念。 **方法的类型** - **实例方法**:最常见的类型,通过类的实例调用,至少包含一个`self`参数。 - **类方法**:通过`@classmethod`装饰器定义,至少包含一个`cls`参数,代表类本身,而非类的实例。 - **静态方法**:通过`@staticmethod`装饰器定义,不接受隐含的类实例或类本身作为参数,其行为更接近于普通函数。 **继承与方法的重写** 在继承关系中,子类可以继承父类的方法,并根据需要重写这些方法。方法的重写允许子类提供特定于自身实现的行为,这是实现多态性的基础。 #### 7.2.4.5 结论 函数和方法是Python编程中不可或缺的部分,它们通过封装独立的功能单元,提高了代码的重用性和可维护性。通过深入理解函数和方法的定义、调用机制及其在面向对象编程中的应用,我们可以编写出更加高效、可读的Python代码。从简单的函数定义到高阶函数、装饰器、Lambda函数,再到面向对象编程中的方法,Python提供了丰富的工具来支持复杂功能的实现和代码的优雅表达。
上一篇:
7.2.3 变量和特性
下一篇:
7.2.5 可迭代对象和迭代器
该分类下的相关小册推荐:
Python合辑5-格式化字符串
Python数据分析与挖掘实战(下)
Python爬虫入门与实战开发(上)
Python合辑6-字典专题
Python合辑11-闭包函数
Python合辑8-变量和运算符
Python合辑2-字符串常用方法
Python合辑12-面向对象
剑指Python(磨刀不误砍柴工)
Python合辑14-面向对象编程案例(下)
Python高并发编程与实战
Python合辑7-集合、列表与元组