1. 模块化编程
Python的模块化编程是将代码分散到若干个文件中,这些文件内的代码都是以Python模块的形式存在。这样做的好处在于,可以将代码分散到不同的文件中,提高代码的复用性,使得代码的编写变得更加简单和模块化。模块化编程能够让大型代码的开发更加专业化和高效化,同时也能够提高代码的可读性和可维护性。在模块化编程中,Python的模块就是一个 .py 的文件。
1.1. 模块的导入
在Python中,导入模块的方式有三种:
import module_name
from module_name import func_name
from module_name import *
其中,第一种方式是最基本的导入方式,它将整个模块导入。使用这种方式时,要使用 module_name.func_name 的形式调用函数。第二种方式是可选择的导入方式,它可以只导入某个函数或者类。使用这种方式时,直接使用 func_name 调用函数即可。第三种方式是最方便的导入方式,它可以将模块中的所有变量和函数都导入。但是,这种方式会污染命名空间,不建议使用。
1.2. 模块的编写
在Python中,我们可以使用以下几种方式来编写模块:
def
class
if __name__ == "__main__"
其中,def 和 class 可以定义函数和类,if __name__ == "__main__" 是一个特殊的代码块,当模块被直接执行时,这个代码块会被执行。这个代码块可以用来测试模块的功能。
下面是一个简单的模块编写示例:
# module.py
def say_hello():
print("Hello, World!")
class Student:
def __init__(self, name):
self.name = name
if __name__ == "__main__":
print("This module is running directly.")
2. 装饰器
装饰器是一种Python语言的特性,它可以在不改变函数代码的前提下,增加函数的功能。换句话说,装饰器是一种用于修改函数行为的语法构造。使用装饰器可以避免重复的代码,提高代码的复用性。它能够使函数变得更具有灵活性、可扩展性以及可重用性。
2.1. 装饰器的基本语法
装饰器本质上是一个函数,它可以接受一个函数作为参数,并且返回一个新的函数。装饰器的语法可以使用 "@" 符号来表示。
def decorator(func):
def inner_func(*args, **kwargs):
# 在函数前做出修改
print("Start")
result = func(*args, **kwargs)
# 在函数后做出修改
print("End")
return result
return inner_func
@decorator
def my_func(name):
print("Hello,", name)
my_func("John")
在这个例子中,首先定义了一个名为 decorator 的函数,它接受一个 func 参数。然后,定义了一个名为 inner_func 的函数,并将其作为 decorator 函数的返回值。inner_func 函数在装饰器函数中被定义,它包装着 func 函数,并且用来修改 my_func 的行为。在 inner_func 中,先输出了 "Start",然后执行了 func 函数,最后输出了 "End"。这样,我们就成功地通过装饰器来修改了 my_func 函数的行为,增加了 "Start" 和 "End" 的输出。
2.2. 多个装饰器的应用
我们可以同时使用多个装饰器,来对一个函数进行装饰。这个时候,Python会从上到下依次应用这些装饰器。也就是说,上面的装饰器先执行,下面的装饰器后执行。
def decorator_1(func):
def inner_func(*args, **kwargs):
print("Decorator 1")
result = func(*args, **kwargs)
return result
return inner_func
def decorator_2(func):
def inner_func(*args, **kwargs):
print("Decorator 2")
result = func(*args, **kwargs)
return result
return inner_func
@decorator_1
@decorator_2
def my_func(name):
print("Hello,", name)
my_func("John")
在这个例子中,首先定义了 decorator_1 和 decorator_2 两个装饰器函数。然后,用 "@decorator_2" 语法来表示 my_func = decorator_2(my_func),接着再用 "@decorator_1" 语法来表示 my_func = decorator_1(my_func)。这样,Python就会先执行 decorator_2,然后再执行 decorator_1。输出结果为:
Decorator 1
Decorator 2
Hello, John
。