理解param.kind含义:给形参传递参数的方式,是位置传递,还是关键字传递
1 def clip(text, max_len = 80): 2 end = None 3 if len(text) > max_len: 4 space_before = text.rfind(" ", 0, max_len) 5 if space_before >= 0 : 6 end = space_before 7 else: 8 space_after = text.rfind(" ", max_len) 9 10 if space_after >= 0: 11 end = space_after 12 13 if end is None: 14 end = len(text) 15 16 return text[:end].rstrip(" ") 17 18 19 20 # print(clip.__defaults__) 21 # print(clip.__kwdefaults__) 22 23 # a = clip.__code__.co_varnames 24 # print(a) 25 # print(type(a)) 26 # print(clip.__code__.co_argcount) 27 28 29 #和上面clip函数唯一的区别是参数中添加了/, *,为了测试每个参数可以通过哪种类型传递参数 30 def clip1(text, /,*,max_len = 80): 31 pass
from inspect import signature from clip import clip, clip1 sig = signature(clip) sig1 = signature(clip1) print(sig) print(str(sig)) print("sig.parameters:\n",sig.parameters, '\n') print('sig.parameters.items():\n',sig.parameters.items(), '\n') print('sig.parameters.keys():\n',sig.parameters.keys(), '\n') print('sig.parameters.values():\n',sig.parameters.values(), '\n') for i in sig.parameters.values(): print("parameter对象类型:",type(i)) #<class 'inspect.Parameter'> print(" ") #以下两种对比param.kind返回值 print("clip函数的param.kind值:") for name, param in sig.parameters.items(): print(param.kind, ':', name,"=", param.default ,',',param.annotation ) print("\nclip1函数的param.kind值:") for name1, param1 in sig1.parameters.items(): print(param1.kind , ':', name ,"=", param1.default )
从运行结果可以看到,
clip函数中的text和max_len参数可以通过POSITIONAL_OR_KEYWORD传递实参;
而clip1函数中text只能通过POSITIONAL_ONLY传递实参,而max_len只能通过KEYWORD_ONLY传递实参;
标签:17,parameters,示例,Python,text,len,sig,clip,print From: https://www.cnblogs.com/bravesunforever/p/17718178.html