更新目标为可调用的args和kwargs的值。

argupdate的Python项目详细描述


argupdate

此包用于更新目的地为的args/kwargs中的值 功能。这对于那些想要 修改传递到修饰函数的值。

通过反省args/kwargs的功能,它知道 你的args中所有参数的名称(当然还有你的kwargs 这是一个口述)。因此,您可以提供更新的值 根据参数的名称。

通过接受一个特殊的callable,我们还提供了一种动态地 在运行时更新参数的值。

简单示例

我们要修改

的值的函数
fromtypingimportOptionaldeffoo(arg_1:int,arg_2:bool,arg_3:Optional[str]=None)->None:print(arg_1,arg_2,arg_3)

假设出于某种原因,我们总是希望arg_2False,不 不管打电话的人是怎么进来的。

importfunctoolsfromargupdateimportupdate_parameter_valuefromtypingimportOptionaldefarg_2_always_false(func):# This is the new value for `arg_2`updated_values={'arg_2':False}@functools.wraps(func)defwrapper(*args,**kwargs):# Here we update the value.updated_args,updated_kwargs=update_parameter_value(func,updated_values,args,kwargs)returnfunc(*updated_args,**updated_kwargs)returnwrapper@arg_2_always_falsedeffoo(arg_1:int,arg_2:bool,arg_3:Optional[str]=None)->None:print(arg_1,arg_2,arg_3)

无可否认,这是一个人为的例子。你可以设置 在argsFalse中的第二个参数,不使用此库。但是, 即使在这个做作的小例子中,通过 使用argupdate。只要参数的名称保持不变, 您不必指望它是 参数列表。

更高级的示例

您还可以使用一个特殊的callable作为新值。这样你就可以 根据函数和其他函数的签名设置新值 参数的值。

下面是一个实际项目的例子。这个项目结束了 多个其他后端库。这些库都有方法 以handle参数作为int。除了一个。这个图书馆 需要handle参数作为类似于 [HANDLE:0x0000001]

而不是到处重复代码来检查 如果我们过去了,我们就创造了一个为我们做这件事的装饰师。

importfunctoolsimportinspectfromtypingimportAny,Mapping,Sequencefromargupdateimportupdate_parameter_value,ValueUpdaterfromutilsimportstringify_intdefhandle_stringifier(func):classupdate_handle(ValueUpdater):def__call__(self,original_value:Any,signature:inspect.Signature,orig_args:Sequence[Any],orig_kwargs:Mapping[str,Any])->Any:ifisinstance(original_value,int):returnstringify_int(int)returnoriginal_valueupdated_values={# update_handle will be used to create the value for the argument# called `handle`'handle':update_handle}@functools.wraps(func)defwrapper(*args,**kwargs):updated_args,updated_kwargs=update_parameter_value(func,updated_values,args,kwargs)returnfunc(*updated_args,**updated_kwargs)returnwrapper@handle_stringifierdefweird_handle_taker(handle:int)->None:...

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java ADB设备不显示手机、og droid   java使用存储和保存方法写入属性文件   java为什么要打印这个结果   JavaSpring自动连线和并行流   java如何在Hashmap中存储KStream对象类型的值?   Android中Telugu字符串的java正则表达式?   java平方求幂   Eclipse和Tomcat的java错误   Java数组不继续循环   Jsoup未解析java嵌套html   java Android:如何知道MediaPlayer是否暂停?   跟踪Java POJO类中字段的空值集的最佳方法   java Spring在应用程序属性相对与绝对中配置工作目录?   向固定大小的平面添加随机放置的直线矩形的java方法   JavaEclipse和jasper报告:如何定位log4j。财产?