【导读】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))
#

这是因为range函数返回的是一个类对象,这个类对象表现为一个列表。因此使用range函数比使用实际的包含一万个数字的列表要更加节省内存。可以通过上面第四条中提到的列表解析式创建一个同样大小的实际列表:

import sys

myreallist = [x for x in range(0, 10000)]
print(sys.getsizeof(myreallist))
#

实际内存占用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)
#
print (b)
#

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

Python 三十个实践、建议和技巧的更多相关文章

  1. Python三十个常见的脚本汇总

    1.冒泡排序     2.计算x的n次方的方法     这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发.爬虫.数据分析.数据可视化.机器学习等.送给正在 ...

  2. 《Python机器学习及实践:从零开始通往Kaggle竞赛之路》

    <Python 机器学习及实践–从零开始通往kaggle竞赛之路>很基础 主要介绍了Scikit-learn,顺带介绍了pandas.numpy.matplotlib.scipy. 本书代 ...

  3. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  4. iOS-------应用性能调优的25个建议和技巧

    性能对 iOS 应用的开发尤其重要,如果你的应用失去反应或者很慢,失望的用户会把他们的失望写满App Store的评论.然而由于iOS设备的限制,有时搞好性能是一件难事.开发过程中你会有很多需要注意的 ...

  5. iOS应用性能调优的25个建议和技巧

    本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/,你还可以 ...

  6. [转]iOS应用性能调优的25个建议和技巧

    写在前面 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelofabri.com/ ...

  7. IOS 性能优化的建议和技巧

    IOS 性能优化的建议和技巧 本文来自iOS Tutorial Team 的 Marcelo Fabri,他是Movile的一名 iOS 程序员.这是他的个人网站:http://www.marcelo ...

  8. iOS应用性能调优的25个建议和技巧【转】

    转载自:http://blog.jobbole.com/37984/ 首页 最新文章 资讯 程序员 设计 IT技术 创业 在国外 营销 趣文 特别分享 更多 > - Navigation -  ...

  9. python爬虫抓站的一些技巧总结

    使用python爬虫抓站的一些技巧总结:进阶篇 一.gzip/deflate支持现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页为例,未压缩版本247K,压缩了以后45 ...

随机推荐

  1. M3U8地址在谷歌浏览器中播放

    该案例git码云地址:https://gitee.com/kawhileonardfans/hls-player-example 1.下载插件 插件地址:https://files.cnblogs.c ...

  2. x86平台inline hook原理和实现

    概念 inline hook是一种通过修改机器码的方式来实现hook的技术. 原理 对于正常执行的程序,它的函数调用流程大概是这样的: 0x1000地址的call指令执行后跳转到0x3000地址处执行 ...

  3. 068-PHP定义并输出数组

    <?php $arr=array(98,'hello',67,'A',85,NULL); //定义一个数组 echo "输出第一个元素:{$arr[0]}"; //输出数组的 ...

  4. 062-PHP函数按值传参,交换数值函数

    <?php function swap($x,$y){ //定义交换数值函数 $temp=$x; $x=$y; $y=$temp; } $m=5; $n=15; echo "交换前:& ...

  5. js利用递归生成随机数填充到数组

    用递归算法实现,数组长度为5且元素的随机数在2-32间不重复的值 var  array = new Array(5); function addNumToArray(array,num){     i ...

  6. 干货分享:Academic Essay写作套路详解

    你想过如何中立的表达自己吗?大概只有10%不到的同学,会真正重视这个细节.但很多留学生能顺利写完作文已经不容易,还要注意什么中立不中立的.我知道这个标准,对许多同学有些过分,但很残酷的告诉你,这的确是 ...

  7. qvector 转为数组

    在 qt 中想要把 qvector 转化为原始数据构成的数组,有几种方法: 直接使用循环读取 double *bytes = new double[vec.size()]; for (int i = ...

  8. webpack知识点散记

    1.今天学习webpack  ,刚开头就碰到了钉子,因为现在都是4+的版本,用以前的老命令不好使,如下例子及解决办法 不好用:  webpack3的   打包文件   webpack a.js b.j ...

  9. javascript 对象只读

    var person = {}; Object.defineProperty(person, "name", { writable: false, value: "nic ...

  10. 为什么vue中的data用return返回

    1.为什么在项目中data需要使用return返回数据呢? 不使用return包裹的数据会在项目的全局可见,会造成变量污染:使用return包裹后数据中变量只在当前组件中生效,不会影响其他组件. 当一 ...