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操作数据库之sqlite3打开数据库、删除、修改示例
Mar 13 Python
python使用arp欺骗伪造网关的方法
Apr 24 Python
python opencv实现证件照换底功能
Aug 19 Python
python根据文本生成词云图代码实例
Nov 15 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
Apr 01 Python
Django 解决阿里云部署同步数据库报错的问题
May 14 Python
python使用自定义钉钉机器人的示例代码
Jun 24 Python
python 使用多线程创建一个Buffer缓存器的实现思路
Jul 02 Python
python实现最短路径的实例方法
Jul 19 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
Python实现老照片修复之上色小技巧
Oct 16 Python
python解析照片拍摄时间进行图片整理
Jul 23 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 COOKIE设置为浏览器进程
2009/06/21 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
php命令行写shell实例详解
2018/07/19 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
JavaScript Event学习第六章 事件的访问
2010/02/07 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
node.js入门教程
2014/06/01 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
Vue前端开发规范整理(推荐)
2018/04/23 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
[00:35]DOTA2上海特级锦标赛 Newbee战队宣传片
2016/03/03 DOTA
Python中使用PIPE操作Linux管道
2015/02/04 Python
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
python的paramiko模块实现远程控制和传输示例
2017/10/13 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
使用tensorflow实现线性回归
2018/09/08 Python
Django 路由系统URLconf的使用
2018/10/11 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
三个python爬虫项目实例代码
2019/12/28 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
Python如何把Spark数据写入ElasticSearch
2020/04/18 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
高校教师岗位职责
2014/03/18 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
见习报告的格式
2014/11/04 职场文书
2014年科室工作总结范文
2014/12/19 职场文书
对外汉语教师推荐信
2015/03/27 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
Angular CLI发布路径的配置项浅析
2021/03/29 Javascript
Django实现在线无水印抖音视频下载(附源码及地址)
2021/05/06 Python