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 正则表达式操作指南
May 04 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
python实现数据库跨服务器迁移
Apr 12 Python
python spyder中读取txt为图片的方法
Apr 27 Python
python3 unicode列表转换为中文的实例
Oct 26 Python
Python找出微信上删除你好友的人脚本写法
Nov 01 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
python字符串替换re.sub()方法解析
Sep 18 Python
关于Numpy中的行向量和列向量详解
Nov 30 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
python自动从arxiv下载paper的示例代码
Dec 05 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 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 smarty的预保留变量总结
2008/12/04 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
PHP 二维array转换json的实例讲解
2018/08/21 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
2019/07/26 PHP
javascript globalStorage类代码
2009/06/04 Javascript
浅谈javascript的原型继承
2012/07/25 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
Angular ng-animate和ng-cookies用法详解
2018/04/18 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
Js图片点击切换轮播实现代码
2020/07/27 Javascript
python从入门到精通(DAY 1)
2015/12/20 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python找出列表中大于某个阈值的数据段示例
2019/11/24 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
什么是python类属性
2020/06/10 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
材料加工工程求职信
2014/02/19 职场文书
市场营销方案范文
2014/03/11 职场文书
我的长生果教学反思
2014/04/28 职场文书
电教室标语
2014/06/20 职场文书
优秀纪检干部材料
2014/08/27 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
2014年高三班主任工作总结
2014/12/05 职场文书
大学生创业事迹材料
2014/12/30 职场文书
一个家长教育孩子的心得体会
2016/01/15 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
浅谈css实现背景颜色半透明的两种方法
2021/12/06 HTML / CSS