Python 三十个实践、建议和技巧
【导读】2020年,你又立了什么新的 flag?新一年,我们先为大家准备 30 个非常优秀的 python 实践技巧。希望这些诀窍能在实际工作中帮助大家,并且学到一些有用的知识。
1、使用 python 3
由于官方从2020年1月1日起就停止了对python2.7的更新支持,因此本教程的大部分例子都只能在python 3环境下运行。如果你仍然在使用2.7版本,请先升级到python 3。
2、检查并使用满足需求的最小python版本
你可以在代码中检查python 版本,以确保你的代码使用者没有使用不兼容的版本运行脚本。使用以下代码进行简单的检查:
if not sys.version_info > (2, 7): # berate your user for running a 10 year # python version elif not sys.version_info >= (3, 5): # kindly tell your user (s)he needs to upgrade # because you're using 3.5 features
3、使用ipython
ipython 基本上是一个增强的shell,仅仅是为了自动补全功能,ipython也是值得使用的,但其实它还有更多作用,包括内建的magic命令,这里列举了一些:
-
%cd:改变当前的工作目录
-
%edit:打开编辑器并在关闭编辑器后执行键入的代码
-
%env:显示当前的环境变量
-
%pip:install [pkgs] 在不离开交互式shell的情况下安装功能包
-
%time 和 %timeit:类似于python中的time模块,可以为代码运行计时
ipython的另一个有用功能是可以使用之前任意一行代码的输出,代码的输入和输入实际上都是对象,例如可以通过 out[3] 来使用第三次运行代码的输出对象。安装ipython的指令是:
pip3 install ipython
4.列表解析式
列表解析式可以用来替换通过loop来填充列表的丑陋方法,其基本语法是:
[ expression for item in list if conditional ]
一个非常基础的例子,用于生成包含连续数字的列表:
mylist = [i for i in range(10)] print(mylist) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
由于可以使用表达式,因此可以通过更复杂的数学方法来生成列表:
squares = [x**2 for x in range(10)] print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
甚至也可以调用外部函数:
def some_function(a): return (a + 5) / 2 my_formula = [some_function(i) for i in range(10)] print(my_formula) # [2, 3, 3, 4, 4, 5, 5, 6, 6, 7]
最后,也可以用if作为生成条件来对列表进行过滤。在下面的例子中,只有偶数被保留:
filtered = [i for i in range(20) if i%2==0] print(filtered) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
5、检查对象的内存占用情况
通过sys.getsizeof(object)命令可以查看任何对象的内存使用情况:
import sys mylist = range(0, 10000) print(sys.getsizeof(mylist)) # 48
这是因为range函数返回的是一个类对象,这个类对象表现为一个列表。因此使用range函数比使用实际的包含一万个数字的列表要更加节省内存。可以通过上面第四条中提到的列表解析式创建一个同样大小的实际列表:
import sys myreallist = [x for x in range(0, 10000)] print(sys.getsizeof(myreallist)) # 87632
实际内存占用87632字节,远高于通过range函数生成的对象。
6、返回多个值
pyhon中的函数都可以返回多个变量,而不需要字典,列表或者类作为返回对象。方法如下:
def get_user(id): # fetch user from database # .... return name, birthdate name, birthdate = get_user(4)
对于有限数量的返回值,这是可以的。但是任何超过3个值的内容都应该放到一个(data)类中。
7、使用 data 类
从3.7版本开始,python提供了 data 类。与常规类或其他替代方法(如返回多个值或字典)相比,有以下几个优点:
-
数据类需要至少一定数量的代码
-
可以通过 eq 方法来比较不同的data类对象
-
可以 repr 通过很容易地打印一个数据类来进行调试
-
数据类需要类型提示,因此减少了 bug
一个data类的例子如下:
from dataclasses import dataclass @dataclass class card: rank: str suit: str card = card("q", "hearts") print(card == card) # true print(card.rank) # 'q' print(card) card(rank='q', suit='hearts')
8、就地变量交换
一个简洁的技巧,可以节省几行代码:
a = 1 b = 2 a, b = b, a print (a) # 2 print (b) # 1
9、字典合并(python 3.5+)
从python 3.5开始,字典的合并变得更简单了:
dict1 = { 'a': 1, 'b': 2 } dict2 = { 'b': 3, 'c': 4 } merged = { **dict1, **dict2 } print (merged) # {'a': 1, 'b': 3, 'c': 4}
10、将字符串转化为标题格式
在标题格式中,非介词的首字母会大写。可以通过.title()方法实现:
mystring = "10 awesome python tricks" print(mystring.title()) '10 awesome python tricks'
11、将字符串分离并存储到列表中
可以按任意字符来分割字符串,并存储到列表中,例如按空格来分割字符串:
mystring = "the quick brown fox" mylist = mystring.split(' ') print(mylist) # ['the', 'quick', 'brown', 'fox']
12、将列表中的字符串合并到一起
与上一条的功能正好相反,从列表中创建字符串,并在两个单词间插入空格:
mylist = ['the', 'quick', 'brown', 'fox'] mystring = " ".join(mylist) print(mystring) # 'the quick brown fox'
也许你会疑惑,为什么不使用mylist.join(" ")呢?归根结底,string.join()函数不仅可以连接列表,还可以连接任何可迭代的列表。将它放在string中会阻止在多个位置实现相同的功能。
13、emoji
这些表情具有很强的表达能力,能给人留下深刻印象。更重要的是,这在分析社交媒体数据时尤其有用。首先通过以下命令安装emoji模块:
pip3 install emoji
可以按照以下方法使用表情:
import emoji result = emoji.emojize('python is :thumbs_up:') print(result) # 'python is
相关文章:
-
-
添加或取消 Ctrl + Shift + 对应的数字(1 9) 作用 相当于标签,Ctrl + 对应的数字键,可以快速定位到做了标签的代码行 ...... [阅读全文]
-
第一次: 没有jdk,安装好jdk就可以了 第二次: java的环境变量没配好,按照下图的配就行: Java_HOME和jre_HOME都是jdk的... [阅读全文]
-
开源项目SMSS开发指南(二)——基于libevent的线程池
libevent是一套轻量级的网络库,基于事件驱动开发。能够实现多线程的多路复用和注册事件响应。本文将介绍libevent的基本功能以及如何利用li... [阅读全文] -
概述 2019 年时间过得很快。 有欢笑、 有离别、 有压力、 有收获。 关于工作 项目发生了变动,团队也发生了变动, 不过总体是成长的 ,在这感谢... [阅读全文]
-
其他收集器的工作范围是整个新生代或者老年代、G1收集器的工作范围是整个Java堆。在使用G1收集器时,它将整个Java堆划分为多个大小相等的独立区域... [阅读全文]
-
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
上一篇: 一个新站百度权重从0到1的4点金玉良言
下一篇: 吕布勇猛过人,为何却常被人看不起呢?
发表评论