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: ...
随机推荐
- 代码d17
admin.py from django.contrib import admin from crm import models # Register your models here. class ...
- 【LCA&倍增】货物运输 @upcexam5909
时间限制: 1 Sec 内存限制: 128 MB 题目描述 在一片苍茫的大海上,有n座岛屿,岛屿与岛屿之间由桥梁连接,所有的岛屿刚好被桥梁连接成一个树形结构,即共n-1架桥梁,且从任何一座岛屿出发都能 ...
- startup 环境搭配
1.登入下载网址 www.apache.org 选择 Tomcat 3. 解压后的 4. 关闭了就可以互相访问了 在浏览器上也可以的访问的直接http://然后你的ID号就OK了
- Java知识回顾 (9) 同步、异步IO
一.基本概念 同步和异步: 同步和异步是针对应用程序和内核的交互而言的. 同步指的是用户进程触发IO 操作并等待或者轮询的去查看IO 操作是否就绪: 而异步是指用户进程触发IO 操作以后便开始做自己的 ...
- SqlAlchemy “Too many connections”
File "C:\Users\user\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connection ...
- n2n的编译和运行、配置
交叉编译: cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/CMakeToolchainFileMingw32.cmake -build ./ ../ 1.n2n 基于p ...
- PL/SQL学习笔记之事务
一:事务自动提交的开启与关闭 1)开启事务自动提交:则每一个INSERT,UPDATE或DELETE命令执行时,都提交一次事务. SET AUTOCOMMIT ON; 2)关闭事务自动提交:则执行到C ...
- MySQL 的 autocommit
在自动提交模式(autocommit=ON)下提交事务: •在自动提交模式下,每个SQL语句都是一个独立的事务. –mysql>insert into ACCOUNTS values(1,'To ...
- hive SQL 行转列 和 列转行
一.行转列的使用 1.问题 hive如何将 a b 1a b 2a b 3c d 4c d ...
- Java基础(四)线程快速了解
开始整理线程之前,之前有个命令忘记整理了,先整理一下jar命令的使用 Jar包 其实可以理解是java的压缩包方便使用,只要在classpath设置jar路径即可数据库驱动,ssh框架等都是以jar包 ...