python 将函数参数一键转化成字典的技巧,非**kwargs,公有方法和函数抵制kwargs。
1、有时候使用设计模式,例如工厂方法模式,函数传的参数还需要一一根据条件传递到各个类里面去实例化或者其他原因,直接复制所有的参数看起来不太好,造成很多相同的行。
2、直接函数/方法中写**kwargs,那就不需要转化了,但写代码要抵制这样的写法,这样造成补全困难和使调用者不知道需要传递什么参数,必须去深入跳转到代码中去才知道需要传递什么东西。最明显的是,requests库的get post函数了,用了*args,**kwargs造成很多小伙伴不知道到底要传些什么参数到函数中,或者知道要传递什么参数,但经常把函数关键字参数拼写错误,比如吧verify拼写成了ferify,headers写成了header,这样写后代码会出错。
3、例子
def f(a=1,b=2,c=3):
f2(a,b,c)
f3(a,b,c)
f4(a,b,c)
这样写代码很重复,越长越爱出错。
正确做法是 key_word_args = locals()
然后f1(**key_word_args)
f2(**key_word_args)
f3(**key_word_args)
上面说的是函数的例子,如果是方法,那就有一些区别。需要把第一个参数self弹出来
key_word_args = copy.deepcopy(locals())
key_word_args.pop('self')
然后self.f1(**key_word_args)
self.f2( **key_word_args)
4、如果直接写
def f(**kwargs):
f2(**kwargs)
f3(**kwargs)
f4(**kwargs)
这样写虽然不需要转化,但作为公有方法,居然不让用户知道需要传递什么东西,使得pycharm无法补全,这是下下策。我的就是包装了requests的Session,添加了很多方法,使得用起来更简单,而且永远不会出参数名字现拼写错误的情况。
5、关键就是要用个locals()得到一个字典,并且这个locals()需要放在函数的第一行,否则往后locals会变多,传递到里面的东西时候,传多了会报错。
python 将函数参数一键转化成字典的技巧,非**kwargs,公有方法和函数抵制kwargs。的更多相关文章
- 使用eval将字符串转化成字典时报name 'null' is not defined错误解决办法
在接口测试过程中,为了取值将形如字典形式的字符串使用eval()方法转化成字典方便取值 str={"code":100,"num":1,"data&q ...
- Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出
从今天开始我将会把在项目中遇到的问题,以及常用的一些技巧来分享出来,以此来促进自己的学习和提升自己:更加方便我以后的查阅. 现在要说的是:用Python来读取excel表的数据,返回字典(dict), ...
- Python元组组成的列表转化为字典
虽然元组.列表不可以直接转化为字典,但下面的确是可行的,因为经常用python从数据库中读出的是元组形式的数据. # 原始数据 rows = (('apollo', 'male', '164.jpeg ...
- python scrapy 把cookie并转化为字典的形式
在用scrapy设置cookie的时候,需要从网页上对应的页面把cookie字段复制下来,并转化为字典的形式,下面代码是对cookie的转化过程 # -*- coding: utf-8 -*- cla ...
- Python dict 将元祖转成字典
dict 关键字 dict3=dict(((),(),())) #dict 只有一个参数 输出:{'a': 97, 'b': 98, 'c': 99}
- 如何获取字符串中某个具体的数值--通过json.load转化成字典形式获取
r=requests.get('http://httpbin.org/get').text print(r) # print(type(r)) # 如果要获取User-Agent的详细数值,需要做JS ...
- Python把给定的列表转化成二叉树
在LeetCode上做题时,有很多二叉树相关题目的测试数据是用列表给出的,提交的时候有时会出现一些数据通不过,这就需要在本地调试,因此需要使用列表来构建二叉树,方便自己调试.LeetCode上二叉树结 ...
- sqlachemy查询对象转化成字典/json使用
https://www.cnblogs.com/sanduzxcvbnm/p/10220718.html
- 条款24:若所有的函数参数可能都需要发生类型转换才能使用,请采用non-member函数
假设有一个有理数类Rational,有一个计算有理数乘法的成员函数operator*,示例如下: #include <iostream> class Rational { public: ...
随机推荐
- 开车旅行 [NOIP 2012]
Description 小A 和小B决定利用假期外出旅行,他们将想去的城市从1到N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 i的海拔高度为Hi,城市 i ...
- redis 作为 mysql的缓存
使用redis做为MySQL的缓存 介绍 在实际项目中,MySQL数据库服务器有时会位于另外一台主机,需要通过网络来访问数据库:即使应用程序与MySQL数据库在同一个主机中,访问MySQL也涉及到 ...
- Centos7——NFS(Network File System)服务
NFS(Network File System)即网络文件系统,允许计算机之间通过网络共享资源:在NFS客户端即可NFS服务端所共享的目录挂载到本地,此时即可像读写本地目录一样读写远程计算机的目录与文 ...
- Could not commit JPA transaction RollbackException: Transaction marked as rollbackOnly
项目调试时,报以下错误: org.springframework.transaction.TransactionSystemException: Could not commit JPA transa ...
- elasticsearch服务安装采坑
笔者这里下载的elastic search,是5.3.0版本,下载地址:https://www.elastic.co/downloads/past-releases/elasticsearch-5-3 ...
- bootstrap常见的面试题
1. 如果让一个元素在pc端显示而在手机端隐藏,下列选项正确的是(b). A. visible-xs-8 hidden-md B. visible-md-8 hidden-xs C. visibl ...
- 页面嵌套iframe后,点击里面的链接,然后父窗口跳转(子窗口控制父窗口的链接跳转)
做app的时候遇到一个问题,一个页面,然后里面嵌套了一个另一个页面,想实现点击里面的链接,然后外面进行跳转,不然的话,里面的页面永远出不来, 后面想了个办法,app的页面都是打开打开,不关闭的,然后由 ...
- html冲刺
html知识点回顾与面试题<!--1.<DOCTYPE>告诉浏览器当前文档要以何种HTML或者XHTML规范解析2.语义标签strong 粗体em 斜体del 删除线ins 下划线 ...
- Hibernate(4)简单的HelloWorld
一个HelloWorld的案例 public class HelloWorld { @Test public void test() { //1.创建SessionFactory对象 SessionF ...
- C# 发送消息SendKeys、SendMessage、keybd_event的用法
一.C#中SendKeys的用法 功能:将一个或多个按键消息发送到活动窗口,就如同在键盘上进行输入一样. 语法: SendKeys.Send(string keys); SendKeys.SendWa ...