python使用建议与技巧分享(一)

这是一个系列文章,主要分享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 建议与技巧的资料请关注我们其它相关文章!

(0)

相关推荐

  • 使用Python解决Windows文件名非用反斜杠问题(python 小技巧)

    在编程过程中,我们往往会遇到一个小麻烦--微软 Windows 系统在文件夹名之间使用反斜杠字符,而几乎所有其它的计算机(操作系统)都使用正斜杠: Windows filenames: C:\some_folder\some_file.txt Most other operating systems: /some_folder/some_file.txt 这是由于上世纪 80 年代早期计算机历史上的一个小意外.「MS-DOS」的第一版使用了正斜杠字符来指定命令行选项.当微软在「MS-DOS 2.

  • Python如何将图像音视频等资源文件隐藏在代码中(小技巧)

    下午有同学Python学习群里说,使用pyinstaller打包源码时,因为代码中使用了图像.音频.视频等资源文件,无法将程序打包成单一的可执行文件.有没有方法将这些资源文件按保存在代码中呢?我想了一下,应该是可以的.于是乎,花了一个小时,写出了下面的代码,算是抛砖引玉吧. 这段代码可以将二进制文件转存为python脚本文件,供其他脚本引用.代码最后附有使用的例子,演示用的图片可以随便照一张.除了转存二进制数据,还提供了两个方法: get_fp():返回二进制的IO对象(类文件对象) save(

  • python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例

    装饰器信号与槽 所谓装饰器信号与槽,就是通过装饰器的方法来定义信号与槽函数,具体的使用方法如下 @PyQt5.QtCore.pyqtSlot(参数) def on_发送者对象名称_发射信号名称(self,参数): pass 这种方法有效的前提是下面的函数已经执行: QMetaObject.connectSlotsByName(QObject) 在上面的代码中,'发送者对象名称'就是使用setObjectName函数设置的名称,因此自定义槽函数的命名规则也可以看做:on+使用setObjectNa

  • Python爬虫防封ip的一些技巧

    在编写爬虫爬取数据的时候,因为很多网站都有反爬虫措施,所以很容易被封IP,就不能继续爬了.在爬取大数据量的数据时更是瑟瑟发抖,时刻担心着下一秒IP可能就被封了. 本文就如何解决这个问题总结出一些应对措施,这些措施可以单独使用,也可以同时使用,效果更好. 伪造User-Agent 在请求头中把User-Agent设置成浏览器中的User-Agent,来伪造浏览器访问.比如: headers ={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleW

  • Python中使用filter过滤列表的一个小技巧分享

    有的时候使用dir(Module),可以查看里面的方法,但是模块自带的属性"__"开头的也会显示,如下: >>> import random >>> dir(random) ['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', 'WichmannHill', '_Buil tinMethodType', '_M

  • python 19个值得学习的编程技巧

    Python最大的优点之一就是语法简洁,好的代码就像伪代码一样,干净.整洁.一目了然.要写出 Pythonic(优雅的.地道的.整洁的)代码,需要多看多学大牛们写的代码,github 上有很多非常优秀的源代码值得阅读,比如:requests.flask.tornado,下面列举一些常见的Pythonic写法. 0. 程序必须先让人读懂,然后才能让计算机执行. "Programs must be written for people to read, and only incidentally f

  • 常用的10个Python实用小技巧

    大家好,都说追女孩方法大于态度,学Python也是,今天就给大家分享的是我在用Python编写程序时常用的一些小技巧. 1.多次打印同一个字符 在Python中,不用特地写一个函数来重复打印同一个字符,直接使用Print就可以 tem = 'I Love Python ' print(tem * 3) I Love Python I Love Python I Love Python 2.在函数内部使用生成器 在写Python程序时,我们可以在函数内部直接使用生成器,这样可以使代码更简洁. su

  • python之array赋值技巧分享

    首先上一段程序: import numpy as np list_a = list(range(10)) print("list_a: {}".format(list_a)) array_a = np.array(list_a) print("array_a: {}".format(array_a)) list_b = [True,False,True,True,False,False,True,False,True,False] print("list_

  • python使用建议与技巧分享(一)

    这是一个系列文章,主要分享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 Rep

  • python使用建议与技巧分享(二)

    这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获. 1 如何在if语句中检测多个条件 不推荐方式 flag1 = 1 flag2 = 0 flag3 = 0 if flag1 == 1 or flag2 == 1 or flag3 == 1: print 'ok' 推荐方式 flag1 = 1 flag2 = 0 flag3 = 0 if 1 in (flag1, flag2, flag3): print 'ok' 可以看到,前一种方式重复代码太多,不推荐.

  • python 使用建议与技巧分享(四)

    这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获. 1 如何打印更易读的类 不推荐方式 class Point(object): def __init__(self, x, y): self.x = x self.y = y p = Point(3, 4) print p # <__main__.Point object at 0x0000000001E1B9E8> 推荐方式 class Point(object): def __init__(self,

  • python property的使用技巧分享

    property属性 一种用起来像是使用实例属性一样的特殊属性,可以对应于某个方法 既要保护类的封装特性,又要让开发者可以使用 对象.属性 的方式操作方法,@property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对  () 小括号. 来看下求圆的面积的例子 class Circle(object): PI = 3.14 def __init__(self, r): # r圆的半径 self.r = r self.__area = self.PI * self.r * se

  • Python 代码性能优化技巧分享

    如何进行 Python 性能优化,是本文探讨的主要问题.本文会涉及常见的代码优化方法,性能优化工具的使用以及如何诊断代码的性能瓶颈等内容,希望可以给 Python 开发人员一定的参考. Python 代码优化常见技巧 代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构.优化.扩展以及文档相关的事情通常需要消耗 80% 的工作量.优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率. 改进算法,选择合适的数据结构 一个

  • python使用建议技巧分享(三)

    这是一个系列文章,主要分享python的使用建议和技巧,每次分享3点,希望你能有所收获. 1 如何去掉list中重复元素 my_list = [3, 2, 1, 1, 2, 3] print my_list # [3, 2, 1, 1, 2, 3] unique_list = list(set(my_list)) print unique_list # [1, 2, 3] 或者 from collections import OrderedDict my_list = [3, 2, 1, 1,

  • 分享3个简单的Python代码高效运行技巧

    目录 1. 引言 2. 获取字典的值 3. 循环中使用enumerate 4. 使用f-strings来拼接和打印字符串 5. 总结 1. 引言 小伙伴们日常工作中都必不可少地使用Python实现一些简单的功能,但是不同的人所编写的代码执行效率往往是不同的.本文重点介绍大家经常遇到的场景下,三个有效的,方便理解的,执行高效的实用技巧. 闲话少说,我们直接开始吧!!! 2. 获取字典的值 不妨假设我们有以下字典: my_dict = {'first_name': 'Michaela',      

  • Python中隐藏的五种实用技巧分享

    目录 1. ... 对象 2.解压迭代对象 3.展开的艺术 4.下划线 _ 变量 5.多种用途的else 循环 异常处理 1. ... 对象 没错,你没看错,就是 "..." 在Python中 ... 代表着一个名为 Ellipsis 的对象.根据官方说明,它是一个特殊值,通常可以作为空函数的占位符,或是用于Numpy中的切片操作. 如: def my_awesome_function():     ... 等同于: def my_awesome_function():     Ell

  • python语言使用技巧分享

    一 在写之前 最好指定python的路径: #!/usr/bin/python python 在linux中需要添加编码方式:以免出现中文乱码 # -*- coding: UTF-8 –*- 二 在各类语言中,python应该是最会利用识缩进的语言 ,他的for语句即使有多行也不需要想java,C++.c一样使用{} ,可以像js.swift一样同换行符代表一句话,而不是使用: 号.有学过语言背景的同学请注意: 在python看来: 如果改变了缩进的方式,例如在第二个for上缩进,会导致错误:

随机推荐