不寻常的 python 函数包装器语法
Unusual python function wrapper syntax
我正在经历 django channels tutorial and I'm baffled by the async_to_sync syntax in the asgiref.sync module
具体
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 先调用? return 值是如何传递的?
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
returns 函数 inner()
,它修改 function()
调用的输出。一些伪代码:
wrapper(function)("Hello", "World")
inner("Hello", "World")
output = function("Hello", "World")
output = output.modified # ("HELLO", "WORLD")
return output # ("HELLO", "WORLD")
我正在经历 django channels tutorial and I'm baffled by the async_to_sync syntax in the asgiref.sync module
具体
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 先调用? return 值是如何传递的?
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
returns 函数 inner()
,它修改 function()
调用的输出。一些伪代码:
wrapper(function)("Hello", "World")
inner("Hello", "World")
output = function("Hello", "World")
output = output.modified # ("HELLO", "WORLD")
return output # ("HELLO", "WORLD")