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。的更多相关文章

  1. 使用eval将字符串转化成字典时报name 'null' is not defined错误解决办法

    在接口测试过程中,为了取值将形如字典形式的字符串使用eval()方法转化成字典方便取值 str={"code":100,"num":1,"data&q ...

  2. Python+Selenium进行UI自动化测试项目中,常用的小技巧1:读取excel表,转化成字典(dict)输出

    从今天开始我将会把在项目中遇到的问题,以及常用的一些技巧来分享出来,以此来促进自己的学习和提升自己:更加方便我以后的查阅. 现在要说的是:用Python来读取excel表的数据,返回字典(dict), ...

  3. Python元组组成的列表转化为字典

    虽然元组.列表不可以直接转化为字典,但下面的确是可行的,因为经常用python从数据库中读出的是元组形式的数据. # 原始数据 rows = (('apollo', 'male', '164.jpeg ...

  4. python scrapy 把cookie并转化为字典的形式

    在用scrapy设置cookie的时候,需要从网页上对应的页面把cookie字段复制下来,并转化为字典的形式,下面代码是对cookie的转化过程 # -*- coding: utf-8 -*- cla ...

  5. Python dict 将元祖转成字典

    dict 关键字 dict3=dict(((),(),())) #dict 只有一个参数 输出:{'a': 97, 'b': 98, 'c': 99}

  6. 如何获取字符串中某个具体的数值--通过json.load转化成字典形式获取

    r=requests.get('http://httpbin.org/get').text print(r) # print(type(r)) # 如果要获取User-Agent的详细数值,需要做JS ...

  7. Python把给定的列表转化成二叉树

    在LeetCode上做题时,有很多二叉树相关题目的测试数据是用列表给出的,提交的时候有时会出现一些数据通不过,这就需要在本地调试,因此需要使用列表来构建二叉树,方便自己调试.LeetCode上二叉树结 ...

  8. sqlachemy查询对象转化成字典/json使用

    https://www.cnblogs.com/sanduzxcvbnm/p/10220718.html

  9. 条款24:若所有的函数参数可能都需要发生类型转换才能使用,请采用non-member函数

    假设有一个有理数类Rational,有一个计算有理数乘法的成员函数operator*,示例如下: #include <iostream> class Rational { public: ...

随机推荐

  1. python系统编程(六)

    threading注意点 1. 线程执行代码的封装 通过上一小节,能够看出,通过使用threading模块能完成多任务的程序开发,为了让每个线程的封装性更完美,所以使用threading模块时,往往会 ...

  2. redis配置(redis.conf)

    1.如果我们刚刚装好 redis 发现Redis Desktop Manager无法连接到redis,       那是因为redis默认配置只让本机访问,我们 vim redis.conf 注释以下 ...

  3. Sublime_正则查找替换

    在sublime编辑器中使用正则表达式对内容进行查找和替换: (1)Find——Replace... (2)出现下图界面 注意:点击左边第一个按钮,开启正则表达式功能. (3) (4)点击Replac ...

  4. IO流(4)—字符流

    1.IO体系: 抽象基类 --节点流(文件流) InputStream -- FileInputStream OutputStream --FileOutputSteam Reader --FileR ...

  5. mysql [索引优化] -- in or替换为union all

    一个文章库,里面有两个表:category和article.category里面有10条分类数据.article里面有 20万条.article里面有一个"article_category& ...

  6. webpack Import 动态文件

    其实React Import scss 是非常简单的,比如一般写法import './PromotionPage.scss';,今天遇到一个样式需要覆盖,那么修改后的代码变成了: import './ ...

  7. jquery 多级联动下拉列表含(数据模型)

    方法 /** * 级联 * 联动 * @param url:访问json数据的地址 * @param param:参数 * @param levelIds:页面下拉标签数组,为联动级数 * @priv ...

  8. n2n的编译和运行、配置

    交叉编译: cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/CMakeToolchainFileMingw32.cmake -build ./ ../ 1.n2n  基于p ...

  9. [Java] zjdbcping:JDBC数据库连接测试工具

    作者: zyl910 一.缘由 当数据库服务器很多时,或者要与第三方公司做数据库表交换时,此时觉得若有一个简单快捷的数据库连接测试工具就好了. 因为若是采取直接把程序部署到tomcat等容器再测试的办 ...

  10. Rabbit五种消息队列学习(二) – 简单队列

    队列结构图 P:消息的生产者 C:消息的消费者 红色:队列 生产者将消息发送到队列,消费者从队列中获取消息. 测试 1.连接MQ public static Connection getConnect ...