forge(python签名)

python-forge的Python项目详细描述


forge logo

forge(python)签名,既有趣又有益

pypi projectMIT licensePython 3.5+master Travis CI Statusmaster Coveralls StatusDocumentation Status

forge是一个优雅的python包,用于在运行时修改函数签名。 这些库的目的是帮助您用更少的样板文件编写更好、更具可读性的代码。

安装

forgepython 3.5+的python专用包hosted on PyPI

建议的安装方法是pip-installingvirtualenv

$ pip install python-forge

示例

考虑一下像requests这样的库,它为执行http请求提供了一个有用的api。 每个http方法都有自己的函数,它是围绕requests.Session.request的薄包装。 代码有150多行,其中90%是样板文件。 使用forge我们可以将其恢复到当前大小的10%左右,同时增加了代码的读写能力。

importforgeimportrequestsrequest=forge.copy(requests.Session.request,exclude='self')(requests.request)defwith_method(method):revised=forge.modify('method',default=method,bound=True,kind=forge.FParameter.POSITIONAL_ONLY,)(request)revised.__name__=method.lower()returnrevisedpost=with_method('POST')get=with_method('GET')put=with_method('PUT')delete=with_method('DELETE')options=with_method('OPTIONS')head=with_method('HEAD')patch=with_method('PATCH')

怎么了? 我们做的第一件事是创建一个替代的request函数来替换requests.request,该函数提供完全相同的功能,但使其参数显式:

# requests.get() looks like this:assertforge.repr_callable(requests.get)=='get(url, params=None, **kwargs)'# our get() calls the same code, but looks like this:assertforge.repr_callable(get)==('get(url, params=None, data=None, headers=None, cookies=None, ''files=None, auth=None, timeout=None, allow_redirects=True, ''proxies=None, hooks=None, stream=None, verify=None, cert=None, ''json=None'')')

接下来,我们构建了一个工厂函数with_method,它创建了一些新函数,这些函数使用正确的http动词发出http请求。 因为method参数是绑定的,所以它不会显示出来,而是从结果函数签名中移除。 当然,这些生成的函数的签名仍然是显式的,让我们尝试一下:

response=get('http://google.com')assert'Feeling Lucky'inresponse.text

您可以通过访问requests.api的代码来查看替代代码(实际实现)。

项目信息

forgeMIT许可下发布, 它的文档保存在Read the Docs, 关于GitHub的代码, 以及PyPI上的最新版本。 它在python 3.6+和pypy3.5+上进行了严格的测试。

forge作者是Devin Fee。 其他贡献者列在https://github.com/dfee/forge/graphs/contributors下。

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

推荐PyPI第三方库


热门话题
java在Eclipse中使用ctrlshiftt而不是ctrlshiftr有什么好处?   java自动装箱概念SCJP   java如何使用JAXR和Resteasy、Angular和Wildfly10处理COR   java如何在整数数组中动态添加元素?   JAVA从继承生成器模式返回父对象继承   java问题调试生产者消费者问题   java MQ:已达到通道的最大实例数   JavaPowerMockMockito:我试图stubb的方法最终被调用   java Hibernate将多个列映射到一个表   在java中,将字符串中的单词大写,但跳过字符串中的数字和多余空格或符号   使用Eclipse将Java项目导出到JAR时出现“重复条目”错误   java使用eclipselink在实体表上指定NullConstraint   <Java>我可以在TCPIP中使用多个服务器socket吗?   带有自定义视图的java AlertDialog:调整大小以包装视图的内容   如何从用C#编写的web服务生成用于java的SOAP API?