python 装饰器函数
时间: 2024-06-16 08:07:33 浏览: 16
装饰器函数是Python中一种特殊的函数,它可以用来修改其他函数的行为或者功能。装饰器函数通常接受一个函数作为参数,并返回一个新的函数,这个新的函数通常会在原函数执行前后添加额外的功能。
装饰器函数的语法使用了Python的语法糖,即使用@符号将装饰器函数应用到目标函数上。当目标函数被调用时,实际上是调用了装饰器函数返回的新函数。
下面是一个简单的装饰器函数示例:
```python
def decorator_func(original_func):
def wrapper_func():
print("在目标函数执行前添加的功能")
original_func()
print("在目标函数执行后添加的功能")
return wrapper_func
@decorator_func
def target_func():
print("目标函数")
target_func()
```
输出结果为:
```
在目标函数执行前添加的功能
目标函数
在目标函数执行后添加的功能
```
在上面的示例中,`decorator_func`是一个装饰器函数,它接受`original_func`作为参数,并返回一个新的函数`wrapper_func`。`wrapper_func`在原函数执行前后分别添加了额外的功能。通过使用`@decorator_func`语法糖,将装饰器应用到`target_func`上,使得`target_func`在被调用时实际上是调用了`wrapper_func`。
相关问题
python装饰器函数
装饰器函数在 Python 中被广泛使用,它可以在不修改原函数代码的前提下,通过添加额外的功能来扩展原函数的功能。下面是一个简单的装饰器函数示例:
```python
def my_decorator(func):
def wrapper():
print('Before the function is called.')
func()
print('After the function is called.')
return wrapper
@my_decorator
def say_hello():
print('Hello!')
say_hello()
```
输出结果为:
```
Before the function is called.
Hello!
After the function is called.
```
在这个示例中,我们定义了一个名为 `my_decorator` 的装饰器函数,它接受一个函数作为参数,并返回一个新的函数 `wrapper`。在 `wrapper` 函数中,我们添加了额外的功能,即在原函数被调用前和调用后打印一些信息。然后,我们使用 `@my_decorator` 语法将装饰器应用到 `say_hello` 函数上。
当我们调用 `say_hello` 函数时,实际上是调用了 `wrapper` 函数。因此,在输出结果中,我们可以看到在调用原函数前和后打印了一些信息。
python装饰器函数练习题
以下是一个关于Python装饰器函数的练习题。
```python
# 需要认证才能执行的装饰器函数
user_status = False
def login(func):
def inner():
_username = "alex"
_password = "abc!23"
global user_status
if user_status is False:
username = input("输入用户名:")
password = input("密码:")
if username == _username and password == _password:
print("welcome login...")
user_status = True
else:
print("wrong username or password!")
if user_status:
func()
return inner
# 示例函数
import time
a = time.localtime()
def log_1():
print('%s-%s-%s'%(a.tm_year, a.tm_mon, a.tm_mday))
def log_2():
time.sleep(2)
print('%s-%s-%s' % (a.tm_year, a.tm_mon, a.tm_mday))
@login
def log_3():
time.sleep(4)
print('%s-%s-%s' % (a.tm_year, a.tm_mon, a.tm_mday))
# 测试代码
log_1()
log_2()
log_3()
```
这个练习题中,我们定义了一个装饰器函数`login`。这个装饰器函数要求在执行被装饰的函数之前进行认证。如果用户没有登录,则要求用户输入用户名和密码进行认证。如果认证成功,则允许执行被装饰的函数,否则提示用户名或密码错误。示例函数`log_1`、`log_2`和`log_3`分别使用了这个装饰器。运行以上代码时,会先执行`log_1`和`log_2`函数,然后会提示输入用户名和密码进行认证。如果认证成功,则执行`log_3`函数,并输出日期信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [python练习题及答案-python装饰器练习题及答案](https://blog.csdn.net/q6q6q/article/details/109341078)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [4道Python装饰器练习题](https://blog.csdn.net/qdPython/article/details/117329802)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)