一些python相关的trick

跳槽归来

许久没有更新,因为最近要忙的事挺多的,又是工作变更,又是连带的搬家,导致一直也没时间更新,今天一定要把篇写完然后po上来!!

回望2017

讲真2017应该是工作以来发生事情最多的一年,也是碰到最多码畜与弱智最多的一年,无力吐槽,甚至直接导致了自己价值观的动摇,许久未思考的哲学问题又重新萦绕在脑海里挥之不去,好啦多说无益,不要让垃圾再耗费多余的精力啦

闲话少说,开始正文

python作为一门解释性编程语言真的可以说是做到了方便、好用、易学习这三点,因此目前几乎所有科学计算、数据分析、各种ai库都有python版本的,这也从侧面说明了python的火爆程度。随着AI浪潮的来临未来几年python的势头势必会保持下去,这篇文章主要是提点一下python学习中的敲门,希望能在各位的学习和使用中有所帮助。

这里首先提一本书《python核心编程》这本书的内容本身是很值得推荐的,然而其翻译真的是烂到令人发指,据称该书译者(强调一下,我买的那本事白色的大部头好像是第二版?)是从网上东拼西凑剽窃过来的,好好的一本书真是污点,在看的时候甚至需要先用中国人的思维翻译成英文然后好好体会原版作者的本意,也是醉了。

python的执行方式

这里我们首先说一下python的执行方式,总共有两种,交互式以及批处理

所谓交互式,顾名思义就是计算机与人进行交互,人一边输入,计算机一面做出反应,这种场景主要用于例如:查看文档、简单测试。

考虑到python库的繁多,以及各种函数参数也需要记忆,人们在编程的时候不可能记住所有函数的所有用法,这种情况下我们就需要进行查询以及尝试,考虑如下场景,字符串有replace方法用以替换字符串中特定字符为另外的字符,那么这个replace是什么用法呢?有几个参数?每个参数分别代表什么意思?

下面我们简单说一下有几种方式可以查询,这里记住以下两个关键字:dirhelp

进入交互式环境很简单,在shell中执行python即可,下面贴代码:

1
2
3
>>> s = '122345'
>>> dir(s)
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

在上面的输出中我们先创建了一个字符串s,在python中字符串默认就已经封装好了很多种方法,例如我想看一下字符串的替换应该是replace呢还是Replace,这种情况下,我们可以使用dir将指定类型支持的方法全部显示出来,这里我们看到了replace,ok,第一步我们知道了正确的函数名称。那么接下来,我们就需要获取replace这个函数的使用文档了,第一种方式是上网搜,除此之外,我们还可以使用第二种方式help来进行本地查询

1
2
3
4
5
6
7
8
9
>>> help(s.replace)
Help on built-in function replace:
replace(...)
S.replace(old, new[, count]) -> string
Return a copy of string S with all occurrences of substring
old replaced by new. If the optional argument count is
given, only the first count occurrences are replaced.

回车后我们可以看到replace的使用文档(进入文档页面后摁下q退出阅读模式),通过阅读我们可以知道s.replace(‘old’,’new’)这种调用方式就能对字符串进行替换

1
2
>>> s.replace('2','9')
'19345'

交互式需要说的就是这些,其实也可以看出来,大部分情况下我们使用的是批处理执行模式,我们写好代码,保存后,然后使用python执行完毕,这其中是没有我们人工参与的,例如,我们把代码保存为abc.py之后在shell当中执行python abc.py我们的代码就会被执行,所谓的解释性语言就是我们的代码在执行的时候被编译器解释执行,而不是像c一样由编译器build一次,之后就和编译器没有关系了。在python abc.py这行shell代码中,我们也能看出来,abc.py其实是python这个编译器的参数,关于解释性、编译性语言这里超出了讨论范围不再赘述。

需要单独说一下的是,在交互模式下,当一个代码块的中有错误的时候,是需要重新再输入一遍的,因此在测试的时候需要根据情况来选择使用哪种场景。

以上的特性掌握之后在python的日常使用当中还是十分方便的:)

其他和python相关的一些trick :)

python默认的交互式环境不太好用,这里推荐bpython,十分好用,支持语法高亮、函数补全、函数说明!!

1
2
3
4
5
6
7
8
9
10
11
12
>>> s.
┌───────────────────────────────────────────────────────────────────────────────┐
│ s set( setattr( slice( sorted( │
│ staticmethod( str( sum( super( │
└───────────────────────────────────────────────────────────────────────────────┘
>>> s.replace('1','r')
┌───────────────────────────────────────────────────────────────────────────────┐
│ s.replace: (old, new[, count]) │
│ replace │
│ S.replace(old, new[, count]) -> string │
└───────────────────────────────────────────────────────────────────────────────┘

友情提示:会患上依赖症

pyflakes:由于python是解释性语言,因此有很多问题是执行时才有可能被发现,pyflakes能够在一定程度上对代码进行检测提前暴露出一些问题,使用方法也很简单,pyflakes abc.py,类似的还有pylint

再就是使用python wrap的mycli,这个工具对于dba来说简直不能更好用!以上bpython包含的功能他都有!!!目前已经患上严重依赖症。PS:我不是dba

先就这些吧:) 期望对读者有所帮助

hello http://just4fun.im/2018/01/03/python新手教程/ bye