python 定义函数与类(Python函数类定义)


Python作为一门动态类型语言,其函数与类的定义机制体现了灵活性与结构化设计的平衡。函数通过def
关键字实现代码块的封装,支持多种参数形式和灵活的返回值处理;类则以class
为核心构建对象模板,通过实例化生成对象并支持继承与多态。两者共同构成Python面向过程与面向对象编程的基石,既能通过函数实现模块化任务拆分,又能通过类封装数据与行为。函数与类的结合使用(如类方法调用函数)进一步扩展了代码的复用性和可维护性,而装饰器、文档字符串等特性则为功能扩展和代码注释提供了标准化支持。
一、语法结构与定义方式
函数定义以def
开头,后接函数名和参数列表,语句块通过缩进表示。例如:
def add(a, b):
return a + b
类定义使用class
关键字,后接类名和冒号,类体包含属性和方法。例如:
class Calculator:
def __init__(self):
self.result = 0
def add(self, a, b):
self.result = a + b
函数体直接执行代码,类体仅定义属性和方法,需通过实例化(cls()
)激活。
特性 | 函数 | 类 |
---|---|---|
定义关键字 | def | class |
参数传递 | 按值/引用传递 | 自动传入self |
返回值 | 任意对象 | 无显式限制(可返回实例) |
二、参数机制与作用域规则
函数参数支持位置参数、默认值、可变参数(args
, kwargs
),例如:
def func(a, b=2, args, kwargs):
pass
类方法必须包含self
参数,用于绑定实例属性。类还可定义类方法(classmethod
)和静态方法(staticmethod
),绕过self
限制。
特性 | 函数参数 | 类方法参数 |
---|---|---|
默认值 | 支持(如b=2 ) | 需显式定义 |
可变参数 | 支持args , kwargs | 需通过装饰器实现 |
作用域 | 局部作用域 | 实例属性绑定至self |
三、返回值与结果处理
函数通过return
返回任意对象,未指定则返回None
。例如:
def square(x):
return x x
类方法通常不返回新实例,但可通过return self
链式调用。特殊方法(如__str__
)的返回值直接影响对象行为。
场景 | 函数 | 类方法 |
---|---|---|
返回值类型 | 任意对象 | 多为None 或self |
隐式返回 | None | 无显式return 时返回None |
链式调用 | 需显式返回自身 | 通过return self 实现 |
四、文档字符串与注释规范
函数和类的文档字符串(Docstring)均通过三引号定义,例如:
def func():
"""计算平方"""
return 1class MyClass:
"表示数学运算"
def method(self):
"加法操作"
pass
函数Docstring描述功能,类Docstring说明用途,方法Docstring补充细节。IDE和工具(如help()
)可自动提取这些信息。
五、作用域与命名空间
函数内部变量为局部作用域,无法直接修改外部变量,需使用global
或nonlocal
声明。例如:
def outer():
x = 1
def inner():
nonlocal x
x += 1
inner()
print(x) 输出2
类属性属于类命名空间,实例属性存储于实例对象。类方法(classmethod
)操作类属性,实例方法(默认)操作实例属性。
六、继承与多态特性
类通过继承(class Sub(Base)
)复用父类属性和方法,支持方法重写与扩展。例如:
class Animal:
def sound(self):
passclass Dog(Animal):
def sound(self):
return "Bark"
多态性表现为不同类实例调用同名方法时产生不同行为,需依赖方法重写。函数本身不支持多态,但可通过高阶函数(如回调)模拟类似效果。
七、装饰器支持与扩展性
装饰器(Decorator)可用于函数和类,通过decorator
语法修改行为。例如:
functools.lru_cache()
def fib(n): 缓存计算结果
if n <= 1:
return n
return fib(n-1) + fib(n-2)property
class Foo:
classmethod
def bar(cls):
pass
函数装饰器(如staticmethod
)可应用于类方法,类装饰器(如dataclass
)直接修饰类定义。
八、应用场景与性能差异
函数适用于独立功能封装(如数学计算、文件操作),通过模块导入复用。类适合建模复杂数据结构(如用户、订单),通过继承和组合扩展功能。性能方面:
- 函数调用开销较低,适合高频执行
- 类实例化涉及内存分配和属性绑定,开销较高
- 类方法查找(MRO)在多继承时可能增加复杂度
实际开发中常将函数作为类的方法(如工具类),或通过类封装函数集合(如策略模式),实现两种范式的优势互补。
Python的函数与类设计体现了“简洁而不简单”的哲学。函数以轻量级封装见长,类以结构化建模取胜,两者通过参数传递、继承、装饰器等机制无缝协作。合理选择函数或类取决于具体场景:单一功能优先函数,复杂交互依赖类。未来随着Python的发展,函数与类的边界可能进一步模糊(如dataclass
>),但其核心思想——模块化与抽象化——仍将是高效编程的基石。





