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 相关文章推荐
使用Python操作MySQL的一些基本方法
Aug 16 Python
python 写入csv乱码问题解决方法
Oct 23 Python
全面了解Nginx, WSGI, Flask之间的关系
Jan 09 Python
python logging重复记录日志问题的解决方法
Jul 12 Python
python web自制框架之接受url传递过来的参数实例
Dec 17 Python
pyside+pyqt实现鼠标右键菜单功能
Dec 08 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
python中spy++的使用超详细教程
Jan 29 Python
Python Django获取URL中的数据详解
Nov 01 Python
详解Python中__new__方法的作用
Mar 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
使用PHP制作新闻系统的思路
2006/10/09 PHP
PHP脚本的10个技巧(3)
2006/10/09 PHP
PHP扩展编写点滴 技巧收集
2010/03/09 PHP
php去除换行符的方法小结(PHP_EOL变量的使用)
2013/02/16 PHP
Yii2基于Ajax自动获取表单数据的方法
2016/08/10 PHP
php一个文件搞定微信jssdk配置
2016/12/12 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
jQuery 无限级菜单的简单实例
2014/02/21 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
IScroll5 中文API参数说明和调用方法
2016/05/21 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
vue加载完成后的回调函数方法
2018/09/07 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
JavaScript大数相加相乘的实现方法实例
2020/10/18 Javascript
举例区分Python中的浅复制与深复制
2015/07/02 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
vscode 远程调试python的方法
2017/12/01 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
python实现WebSocket服务端过程解析
2019/10/18 Python
django框架中间件原理与用法详解
2019/12/10 Python
python实现同一局域网下传输图片
2020/03/20 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
外贸业务员求职信范文
2013/12/12 职场文书
学生宿舍管理制度
2014/01/30 职场文书
简历里的自我评价
2014/01/31 职场文书
大专生自荐书范文
2014/06/22 职场文书
2015年小学财务工作总结
2015/07/20 职场文书
导游经典开场白——导游词
2019/04/17 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
Python使用mitmproxy工具监控手机 下载手机小视频
2022/04/18 Python