一、函数
1.1 定义与调用
用 def 关键字定义函数,不需要声明返回类型:
1 2 3 4 5 6
| def greet(name): """这是一个文档字符串(docstring),描述函数功能。""" return f"Hello, {name}!"
print(greet("Python")) print(greet.__doc__)
|
1.2 参数类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| def greet(name, greeting="Hello"): return f"{greeting}, {name}!"
print(greet("小明")) print(greet("小明", greeting="你好"))
print(greet(greeting="Hi", name="小红"))
def sum_all(*numbers): return sum(numbers)
print(sum_all(1, 2, 3)) print(sum_all(1, 2, 3, 4, 5))
def print_info(**info): for key, value in info.items(): print(f"{key}: {value}")
print_info(name="小明", age=22)
|
1.3 参数顺序
完整顺序:**位置参数 → *args → 关键字参数 → kwargs
1 2 3 4 5 6 7 8 9 10 11
| def func(a, b, *args, c=10, d=20, **kwargs): print(f"a={a}, b={b}") print(f"args={args}") print(f"c={c}, d={d}") print(f"kwargs={kwargs}")
func(1, 2, 3, 4, 5, c=100, name="test", age=22)
|
1.4 lambda 匿名函数
一行代码的小函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| def square(x): return x ** 2
square = lambda x: x ** 2
numbers = [1, 2, 3, 4, 5] squares = list(map(lambda x: x ** 2, numbers)) evens = list(filter(lambda x: x % 2 == 0, numbers))
pairs = [(1, 'b'), (2, 'a'), (3, 'c')] sorted_pairs = sorted(pairs, key=lambda p: p[1])
|
二、面向对象
2.1 类与对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| class Student: school = "华北水利水电大学"
def __init__(self, name, age): self.name = name self.age = age self._private = 0 self.__secret = "hidden"
def study(self): print(f"{self.name} 正在学习")
def __str__(self): return f"Student(name={self.name}, age={self.age})"
def __repr__(self): return f"Student({self.name!r}, {self.age!r})"
s1 = Student("小明", 22) s2 = Student("小红", 21)
print(s1.school) s1.study() print(s1)
|
2.2 常用魔法方法
| 方法 |
用途 |
示例 |
__init__ |
构造方法 |
obj = MyClass() |
__str__ |
print(obj) 时的显示 |
str(obj) |
__repr__ |
调试显示(交互环境) |
repr(obj) |
__len__ |
长度 |
len(obj) |
__eq__ |
等于比较 |
obj1 == obj2 |
__lt__ |
小于比较 |
obj1 < obj2 |
__getitem__ |
索引访问 |
obj[0] |
__enter__/__exit__ |
上下文管理器 |
with obj: |
2.3 继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| class Animal: def __init__(self, name): self.name = name
def eat(self): print(f"{self.name} 在吃东西")
class Dog(Animal): def __init__(self, name, breed): super().__init__(name) self.breed = breed
def eat(self): print(f"{self.name} 在啃骨头")
def bark(self): print(f"{self.name} 汪汪叫")
dog = Dog("旺财", "金毛") dog.eat() dog.bark()
|
Python 支持多继承:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| class A: def method(self): print("A.method")
class B: def method(self): print("B.method")
class C(A, B): pass
c = C() c.method() print(C.__mro__)
|
三、装饰器
用 @ 语法,在不修改原函数的前提下增加功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| def timer(func): import time def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) elapsed = time.time() - start print(f"{func.__name__} 耗时 {elapsed:.4f}s") return result return wrapper
@timer def slow_function(): import time time.sleep(0.1) return "done"
result = slow_function()
|
四、上下文管理器
用 with 语句自动管理资源(打开/关闭、加锁/解锁):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| with open("test.txt", "w", encoding="utf-8") as f: f.write("Hello")
class MyContext: def __enter__(self): print("进入上下文") return self
def __exit__(self, exc_type, exc_val, exc_tb): print("退出上下文")
with MyContext() as ctx: print("执行操作")
|
五、与 Java 的关键对比
| 概念 |
Java |
Python |
| 构造方法名 |
与类同名 |
__init__ |
| 访问控制 |
private/protected/public |
约定(下划线) |
| 方法重载 |
支持(按参数数量/类型) |
不支持(后定义覆盖前定义) |
| 多继承 |
不支持(用接口) |
支持 |
| this/self |
this(隐式) |
self(显式,约定) |
| 接口 |
interface |
用抽象基类或鸭子类型 |
| 静态方法 |
static |
@staticmethod |
| 抽象方法 |
abstract |
@abstractmethod |
本系列导航:
- (一)变量与数据类型
- (二)流程控制
- (三)函数与面向对象 ← 当前