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的chardet库获得文件编码并修改编码
Jan 22 Python
python基础教程之简单入门说明(变量和控制语言使用方法)
Mar 25 Python
python正则表达式re模块详细介绍
May 29 Python
Python EOL while scanning string literal问题解决方法
Sep 18 Python
python中如何使用朴素贝叶斯算法
Apr 06 Python
Python实现Linux中的du命令
Jun 12 Python
Python抓取框架Scrapy爬虫入门:页面提取
Dec 01 Python
Python访问MongoDB,并且转换成Dataframe的方法
Oct 15 Python
Python设计模式之原型模式实例详解
Jan 18 Python
python 实现批量替换文本中的某部分内容
Dec 13 Python
详解django使用include无法跳转的解决方法
Mar 19 Python
Django admin管理工具TabularInline类用法详解
May 14 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设计模式之命令模式的应用详解
2013/05/21 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
WordPress中"无法将上传的文件移动至"错误的解决方法
2015/07/01 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
jQuery中andSelf()方法用法实例
2015/01/08 Javascript
JavaScript 学习笔记之操作符(续)
2015/01/14 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
2015/04/16 Javascript
jQuery ajax时间差导致的变量赋值问题分析
2016/01/22 Javascript
js点击文本框弹出可选择的checkbox复选框
2016/02/03 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
很棒的vue弹窗组件
2017/05/24 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
django使用图片延时加载引起后台404错误
2017/04/18 Python
python基于itchat模块实现微信防撤回
2019/04/29 Python
python实现简单银行管理系统
2019/10/25 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
Under Armour瑞典官方网站:美国高端运动科技品牌
2018/11/21 全球购物
出纳岗位职责范本
2013/12/01 职场文书
销售员岗位职责范本
2014/02/03 职场文书
关于母亲节的感言
2014/02/04 职场文书
爱心捐书活动总结
2014/07/05 职场文书
2014年公务员工作总结
2014/11/18 职场文书
2015年见习期个人工作总结
2015/05/28 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
sentinel支持的redis高可用集群配置详解
2022/04/01 Redis