首页 > 编程语言 >《流畅的Python》示例5-17 提取函数的签名

《流畅的Python》示例5-17 提取函数的签名

时间:2023-09-20 19:35:28浏览次数:39  
标签:17 parameters 示例 Python text len sig clip print

理解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

相关文章

  • python脚本的力量
    来自:[强网杯2019]高明的黑客额,开门见山这么抽象吗?那就直接www.tar.gz下载吧。一下载,人傻了,40M,WEB题文件都这么大,我还以为遇到misc电子取证了,哈人。打开更是重量级,3000多个内容,一个个看这得看到猴年马月。果断想到py脚本来做,但是哥们的py编写能力太烂了,直接贴一个别人的脚......
  • MarkupSafe:Python的字符转义库
    MarkupSafe转义字符,因此在HTML和XML中使用文本是安全的。具有特殊含义的字符将被替换,使其显示为实际字符。这减轻了注入攻击,意味着不受信任的用户输入可以安全地显示在页面上。escape()函数转义文本并返回一个Markup对象。该对象将不再被转义,但与它一起使用的任何文本都将被转义,......
  • Go每日一库之17:watermill
    简介在上一篇文章Go每日一库之message-bus中,我们介绍了一款小巧、实现简单的异步通信库。作为学习,message-bus确实不错。但是在实际使用上,message-bus的功能就有点捉襟见肘了。例如,message-bus将消息发送到订阅者管道之后就不管了,这样如果订阅者处理压力较大,会在管道中堆积太多......
  • AtCoder Grand Contest 017
    链接C.SnukeandSpells容易发现合法序列排序后一定是若干段值域连续的部分组成:可以发现最小次数就是重叠/空出的部分大小。每次修改只会对\(O(1)\)个点\(±1\),直接维护即可。#include<iostream>#include<cstdio>#include<cstring>#include<vector>#defineN200010......
  • Python基础分享之面向对象的进一步拓展
    我们熟悉了对象和类的基本概念。我们将进一步拓展,以便能实际运用对象和类。调用类的其它信息上一讲中提到,在定义方法时,必须有self这一参数。这个参数表示某个对象。对象拥有类的所有性质,那么我们可以通过self,调用类属性。classHuman(object):laugh='hahahaha'defsho......
  • 《Python深度学习》高清高质量PDF电子书+源码
    Keras之父,TensorFlow机器学习框架贡献者详尽介绍了用Python和Keras进行深度学习的探索实践,包括计算机视觉、自然语言处理、产生式模型等应用。书中包含30多个代码示例,步骤讲解详细透彻。由于本书立足于人工智能的可达性和大众化,读者无须具备机器学习相关背景知识即可展开阅读。在学......
  • 反编译python程序
    1. 工具1. pyinstxtractor.py  2. uncompyle6 :pipinstalluncompyle62.安装pyinstallerpipinstallpyinstaller3. exe解pycpythonpyinstxtractor.pyxxx.exe4. pyc转pypython3.9版本以下: uncompyle6-oxxx.pyxxx.pycpytho......
  • IIS报错:HTTP 错误 404.17 - Not Found
    新建处理程序映射 *.svc%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dllsvc-ISAPI-4.0*.svc%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dllsvc-ISAPI-4.0-64......
  • python入门基础(14)--类的属性、成员方法、静态方法以及继承、重载
    上一篇提到过类的属性,但没有详细介绍,本篇详细介绍一下类的属性一、类的属性方法是用来操作数据的,而属性则是建模必不的内容,而且操作的数据,大多数是属性,比如游戏中的某个boss类,它的生命值就是属性(不同级别的boss,有不同的生命值),被攻击方法(不同的攻击,伤害值不同),当boss被攻击......
  • Python用于解析和修改文本数据-pyparsing模块教程
    Python库解析地址PyParsing人们普遍认为,Python编程语言的pyparsing模块是对文本数据进行操作的一个宝贵工具。用于解析和修改文本数据的pyparsing包,简化了对地址的操作。这是因为该模块可以转换和帮助解析地址。在这篇文章中,我们将讨论PyParsing模块在处理解析以及修改时的......