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 相关文章推荐
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
Python yield与实现方法代码分析
Feb 06 Python
python数字图像处理实现直方图与均衡化
May 04 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
Dec 16 Python
Pandas 重塑(stack)和轴向旋转(pivot)的实现
Jul 22 Python
python画蝴蝶曲线图的实例
Nov 21 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
Mar 09 Python
python+selenium 脚本实现每天自动登记的思路详解
Mar 11 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
Apr 24 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
python编写函数注意事项总结
Mar 29 Python
python爬虫之爬取笔趣阁小说
Apr 22 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
php计算两个文件相对路径的方法
2015/03/14 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
PHP常用字符串函数小结(推荐)
2018/08/05 PHP
Jquery 实现表格颜色交替变化鼠标移过颜色变化实例
2013/08/28 Javascript
JQuery加载图片自适应固定大小的DIV
2013/09/12 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
2015/09/26 Javascript
微信小程序 框架详解及实例应用
2016/09/26 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
浅谈vue获得后台数据无法显示到table上面的坑
2020/08/13 Javascript
在nuxt中使用路由重定向的实例
2020/11/06 Javascript
详解ES6 扩展运算符的使用与注意事项
2020/11/12 Javascript
分析在Python中何种情况下需要使用断言
2015/04/01 Python
一篇文章入门Python生态系统(Python新手入门指导)
2015/12/11 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
html5时钟实现代码
2010/10/22 HTML / CSS
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
经济贸易系毕业生求职信
2014/05/31 职场文书
防灾减灾标语
2014/10/07 职场文书
优秀护士事迹材料
2014/12/25 职场文书
罚站检讨书
2015/01/29 职场文书
学校远程教育工作总结
2015/08/11 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
如何Python使用re模块实现okenizer
2022/04/30 Python
vue3 自定义图片放大器效果的示例代码
2022/07/23 Vue.js