python - 不寻常的python函数包装语法
问题描述
我正在阅读django 频道教程,我对asgiref.sync 模块中的 async_to_sync 语法感到困惑
具体来说
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
它说 async_to_sync 是一个包装器,它似乎是一个可与装饰器互换的术语(如果不是这种情况,请纠正我)但我无法找到装饰器具有以下语法的任何文档
func_one(func_two)(args)
这条线的流程是什么?func_one 或 func_two 是先调用的吗?以及返回值是如何传递的?
解决方案
def wrapper(func):
def inner(*args):
return (output.uppercase() for outputs in func())
return inner
wrapper
您可以通过两种方式使用装饰器:
wrapper(function)("Hello", "World")
或者,更传统的方式:
@wrapper
def function(*args):
print(args)
function("Hello", "World")
两个输出:
('HELLO', 'WORLD')
该函数wrapper
返回inner()
修改function()
调用输出的函数。一些伪代码:
wrapper(function)("Hello", "World")
inner("Hello", "World")
output = function("Hello", "World")
output = output.modified # ("HELLO", "WORLD")
return output # ("HELLO", "WORLD")
推荐阅读
- ios - iOS IAP 恢复需要几次尝试
- javascript - 默认滚动条始终完全滚动的库
- reactjs - 卸载 React Native 组件时如何清除 Image.getSize 请求?
- python - Python yield 关键字的意义和关于生成器的困惑?
- sql - SELECT 中的多个 WHERE
- excel - VBA 索引匹配函数
- java - 如何在 Java 的帮助下在运行时获取 testNG 方法名?
- c# - 编译器对与`using`指令冲突的命名空间感到困惑
- html - 如何从 Shopify 导航中隐藏特定标签?
- python - 检查给定列表中有多少单词出现在文本/字符串列表中