python使用建议与技巧分享(一)


Posted in Python onAugust 17, 2020

这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获。

1 如何创建指定长度且有特定值的list

不推荐方式

list1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
print list1
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

推荐方式

list1 = [0] * 10
print list1
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

其实,前一种方式一看就不符合DRY(Don't Repeat Yourself)原则,稍微想想就知道还有更优雅的做法。如果是元组呢?只需要将[0]改成(0,)即可,千万不要忘记0后面的逗号。另外,这里不止支持数字,其实可以是任意对象组成的list或者tuple。例如:

class User(object):
pass


user_list = [User()] * 10

2 如何连接字符串

不推荐方式

def plus_str():
str_list = ['1'] * 10000
long_str = ''
for str in str_list:
long_str = long_str + str
return long_str

推荐方式

def join_str():
str_list = ['1'] * 10000
return ''.join(str_list)

使用加号方式连接字符串,效率底下,因为会频繁的拷贝字符串和分配内存,比较耗时。但是使用join方式连接字符串,只需要分配一次内存,并将所有待连接的字符串拷贝到内存空间,效率更高。在我的电脑上,测试2个函数的耗时,当执行10000次时,前者耗时是后者约24倍,代码如下:

print timeit(stmt="plus_str()",
setup="from __main__ import plus_str",
number=10000)

// 输出:42.7354210396

print timeit(stmt="join_str()",
setup="from __main__ import join_str",
number=10000)

// 输出: 1.78316799643

3 如何合并字典

不推荐方式

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'a': 4, 'b': 5, 'g': 6}
dict1.update(dict2)
merged_dict = dict1
print merged_dict
# {'a': 4, 'c': 3, 'b': 5, 'g': 6}

推荐方式

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'d': 4, 'f': 5, 'g': 6}
merged_dict = dict(dict1, **dict2)
print merged_dict
# {'a': 1, 'c': 3, 'b': 2, 'd': 4, 'g': 6, 'f': 5}

前一种方式会将源字典dict1修改,有一定的副作用,如果不在乎源字典被修改,前一种方式更简洁一些。后一种方式不会修改源字典,没有副作用。如果有重复的key值,按从右到左的顺序覆盖,例如:

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'a': 4, 'b': 5, 'g': 6}
merged_dict = dict(dict1, **dict2)
print merged_dict
# {'a': 4, 'c': 3, 'b': 5, 'g': 6}

使用右边参数dict2的key值覆盖dict1的key值。通过内建函数dict,将2个字典作为参数传递给该函数,创建一个新字典。需要特别指出的是,第二个参数dict2需要加上2个星号,这里表示该参数是一个具名参数,并且类型是字典。因为dict函数创建字典时,可以接受多个参数,这是python函数支持可变参数的规定格式。

以上就是python使用建议与技巧分享(一)的详细内容,更多关于python 建议与技巧的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
qpython3 读取安卓lastpass Cookies
Jun 19 Python
Python设计模式之MVC模式简单示例
Jan 10 Python
Django中cookie的基本使用方法示例
Feb 03 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
基于python指定包的安装路径方法
Oct 27 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
Python面向对象程序设计之私有属性及私有方法示例
Apr 08 Python
详解Python 解压缩文件
Apr 09 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
Python趣味挑战之教你用pygame画进度条
May 31 Python
Python2.6版本pip安装步骤解析
Aug 17 #Python
python中pathlib模块的基本用法与总结
Aug 17 #Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 #Python
详解python datetime模块
Aug 17 #Python
python实现梯度下降算法的实例详解
Aug 17 #Python
python3.5的包存放的具体路径
Aug 16 #Python
python根据字典的键来删除元素的方法
Aug 16 #Python
You might like
phpize的深入理解
2013/06/03 PHP
php实现遍历目录并删除指定文件中指定内容
2015/01/21 PHP
探究Laravel使用env函数读取环境变量为null的问题
2016/12/06 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
JavaScript 调试器简介
2009/02/21 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
JavaScript使表单中的内容显示在屏幕上的方法
2015/06/29 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
2020/08/08 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
[46:20]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第二场 1月22日
2021/03/11 DOTA
Python制作词云的方法
2018/01/03 Python
一看就懂得Python的math模块
2018/10/21 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
2020/01/09 Python
使用Jupyter notebooks上传文件夹或大量数据到服务器
2020/04/14 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
关于Python错误重试方法总结
2021/01/03 Python
使用HTML5技术开发一个属于自己的超酷颜色选择器
2013/09/22 HTML / CSS
海滩咖啡馆:Beach Cafe
2018/02/02 全球购物
高性能钓鱼服装:Huk Gear
2019/02/20 全球购物
函授毕业生自我鉴定
2013/11/06 职场文书
培训楼经理岗位责任制
2014/02/10 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
岗位说明书怎么写
2014/07/30 职场文书
毕业生实习期转正自我鉴定
2014/09/26 职场文书
单位工作证明
2014/10/07 职场文书
个人职业及收入证明
2014/10/13 职场文书
幼儿园百日安全活动总结
2015/05/07 职场文书
地球上的星星观后感
2015/06/02 职场文书
城南旧事观后感
2015/06/11 职场文书