【导读】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. 使用Nginx搭建Tomcat9集群,Redis实现Session共享

    使用Nginx搭建Tomcat9集群,Redis实现Session共享 1.tomcat准备 首先准备两个tomcat9 ,修改配置文件server.xml 如果在多个服务器上分别启动tomcat 则 ...

  2. 九十六、SAP中ALV事件之九,显示功能按钮栏中显示ALV加强工具栏

    一.排查了很久,终于找到问题所在.把问题解决了,代码如下: 二.运行效果如下 三.试一试,标准功能都可以用 完美

  3. 吴裕雄--天生自然C++语言学习笔记:C++ 数据封装

    所有的 C++ 程序都有以下两个基本要素: 程序语句(代码):这是程序中执行动作的部分,它们被称为函数. 程序数据:数据是程序的信息,会受到程序函数的影响. 封装是面向对象编程中的把数据和操作数据的函 ...

  4. Hbase PleaseHoldException错误

    PleaseHoldException ① 原因:(由于正在操作Hbase时,电脑突然关机,未正常关闭hbase,故导致shell无法正常显示)如下图: ②解决过程: 先在网上百度到了使用https: ...

  5. 业务全都在yun上能放心吗?

    导读 组织将其业务在云上进行“全押”,这与扑克游戏中的这个激动人心时刻有着同样的吸引力.这种举动感觉很大胆,但却向外界传达了自己的信心,表明将会果断行动赢得比赛. 大多数银行对处理零售银行业务方式需要 ...

  6. Kubernetes-基于helm安装部署高可用的Redis及其形态探索

    首先是一些关于redis的介绍和其在K8S上的安装过程:https://www.kubernetes.org.cn/3974.html 1.1部署形态 通过上述地址的教程,可以完成redis 的安装和 ...

  7. exgcd详解

    注:本文中所有 \(\%\) 号均表示取模, \(gcd(a,b)\) 表示 \(a\) 和 \(b\) 的最大公因数 1.exgcd是什么? exgcd大名扩展欧几里得算法,用来求形如 \(gcd( ...

  8. php添加openssl扩展

    很多时候都会用到openssl组件,下面就介绍一下linux下php安装openssl扩展: 安 装openssl组件,一般php安装目录中都有许多扩展组件的安装包,当然也包括openssl,例如我的 ...

  9. n以内的素数

    /* 问题描述: 质数又称素数.一个大于1的自然数,除了1和它自身外, 不能被其他自然数整除的数叫做质数: 问题分析: 素数只能被1和自身整除的数.判断一个数是不是素数, 是用2和这个数之间的所有的数 ...

  10. UVALive 4487 Exclusive-OR 加权并查集神题

    已知有 x[0-(n-1)],但是不知道具体的值,题目给定的信息 只有 I P V,说明 Xp=V,或者 I P Q V,说明 Xp ^ Xq=v,然后要求回答每个询问,询问的是 某任意的序列值 Xp ...