在*args, **kwargs上强制规定参数的调用约定

  首先我们要知道任何关于函数调用签名的问题,都和inspect模块有着关系

  这个知识点涉及到两个类:

              Signature、
              Parameter
创建一个签名对象,这是个重点
 1 from inspect import Signature, Parameter
 2 
 3 params = [Parameter("name", Parameter.POSITIONAL_OR_KEYWORD, default="g"),
 4           Parameter("gender", Parameter.POSITIONAL_OR_KEYWORD, default="man"),
 5           Parameter("age", Parameter.KEYWORD_ONLY, default=25)]
 6 
 7 sig = Signature(params)
 8 print(sig)
 9 
10 
11 def func(*args, **kwargs):
12     res = sig.bind(*args, **kwargs)
13     for name in res.arguments:
14         print(name, res.arguments[name])
15 
16 
17 if __name__ == '__main__':
18     # 测试调用
19     func('c', gender="m", age=18)

output: 

  (name='g', gender='man', *, age=25)
  name c
  gender m
  age 18

其实具体的应用,什么场景下用比较合适,我目前还不是很清楚,后面遇到希望能回来再接着完善,先记录下来

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在*args, **kwargs上强制规定参数的调用约定 - Python技术站

(0)
上一篇 2023年4月2日 下午4:43
下一篇 2023年4月2日

相关文章

  • 循环优化一

    主角:takewhile   判断序列中元素是否为偶数,奇数则终止 这是我们最常用的一种方式,其实没必要这么复杂 1 a = [4, 6, 7, 3] 2 3 4 def judge_is_even(item): 5 if item % 2 == 0: 6 return True 7 return False 8 9 10 # 最常用 11 for item…

    Python开发 2023年4月2日
    00
  • 编程思想

    三大编程思想:   POP:面向过程编程(Procedure Oriented Programming)   OOP:面向对象编程(Object Oriented Programming)   AOP:面向切面编程(Aspect Oriented Programming) 以下大部分内容引用腾讯云一位笔者,我也是进一步了解纯记录之目的。 POP ​   面向…

    Python开发 2023年4月2日
    00
  • 多组合少继承

    继承:   强调类与类之间的关系 组合:   强调对象和对象之间的关系 清楚python支持多继承,从而涉及到一些MRO的点,这里不做赘述,在实际工作过程中,我们经常会使用继承来实现代码复用,如果仅仅是为了复用,还是比较推荐使用组合方式,因为继承方式,使得类与类之间的耦合性变得异常紧密,这多少违背了迪米特法则 1 “”” 2 OOP中三大特性之一:继承 3 …

    Python开发 2023年4月2日
    00
  • 抽象类的子类化机制

    抽象类:可以作为顶层基类,从高层次规范编程接口 1、在abc模块中,最常见的抽象类有Iterable,我们可以用他判断一个对象是不是可迭代对象 1 from collections.abc import Iterable 2 3 4 class Valley: 5 6 def __iter__(self): 7 … 8 9 10 if __name__ …

    Python开发 2023年4月2日
    00
  • 泛型

    第一个参数类型决定执行特定的方法体 一、单分派泛函数   只对函数的第一个参数做类型检查,发现局限性太大,没什么特别的应用场景,也可能是我没用到 1 from functools import singledispatch 2 3 4 @singledispatch 5 def func(a, *args): 6 raise TypeError(“暂不支持{…

    Python开发 2023年4月2日
    00
  • 浅用描述符

      可以理解为property方法的一种进阶,都可以用来创建一种新形式的实例属性,即在实例属性值的获取和设定上,增加额外的处理事务,such as:类型检查、验证   重写三个属性访问方法,其中__delete__方法是否重写取决需求   在类层次上引用描述符,即该类遵从描述符协议 1 class Check: 2 def __init__(self, na…

    Python开发 2023年4月2日
    00
  • 工匠回忆(二)

    接上文 4、条件分支控制流   避免分支嵌套,异常放在代码片段最前面   4.1、归约函数   4.2、条件表达式的封装避免过长而导致可读性下降   4.3、德摩根定律   4.4、and、or优先级   4.5、or短路效应   4.6、消失的分支     4.6.1、二分查找算法     4.6.2、字典算法   5、异常错误处理   无需多言   6、…

    python 2023年5月4日
    00
  • 比较赋值、浅拷贝、深拷贝

    1、无论是浅拷贝还是深拷贝,拷贝对象后是否会开辟新内存,取决于被拷贝对象的数据类型是否可变,一般来讲,可变的数据类型会开辟新内存,不可变数据类型反之不会开辟新内存,进行内存地址的引用(-5-256以外的大整数池会开辟内存,注:但我本地进行测试比较内存还是一样的,有问题) 2、要在单层、嵌套型对象中逐一比较拷贝 3、浅拷贝和深拷贝的区别主要体现在对嵌套型结构的…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部