Python 是世界上最流行、热门的编程语言之一,原因很多,比如:
任何使用非常规数据结构的Python开发人员必备的。import requests
附二:Python 最佳编译依赖
直接译自 Python Deployment。
键入如下命令自动安装一些依赖:
$ sudo apt-get build-dep python2.7
确认安装如下列下的其他 -dev 包。
- python-dev
- libncurses5-dev
- libsqlite3-dev
- libbz2-dev
- libreadline-dev
- libdb4.8-dev
- tcl8.5-dev,tk8.5-dev
下面这个包在 ubuntu 早期版本(如 10.04)并没有自动安装,需确认一下。
- libssl-dev
- libexpat1-dev
- libreadline6-dev
- libgtk2.0-dev
如果想支持 xml 相关:
- libxml2-dev
- libxslt1-dev
如果想支持 MySQLdb (在 pypi 中实际命令为 MySQL-python):
- libmysqlclient-dev
最终的 make 结果(编译结果)如能如下:
Python build finished, but the necessary bits to build these modules were not found:
_tkinter bsddb185 dl
gdbm imageop sunaudiodev
To find the necessary bits, look in setup.py in detect_modules() for the module's name.
这个编译 log 提示哪些模块没有被编译到,注意其中有一些并不是必需的或过时的:
- bsddb185: Older version of Oracle Berkeley DB. Undocumented. Install version 4.8 instead.
- dl: For 32-bit machines. Deprecated. Use ctypes instead.
- imageop: For 32-bit machines. Deprecated. Use PIL instead.
- sunaudiodev: For Sun hardware. Deprecated.
- _tkinter: For tkinter graphy library, unnecessary if you don't develop tkinter programs.
profile:
7 个测量 Python 脚本和控制内存以及 CPU 使用率的技巧
random
12.列表推导式(List comprehensions)
我最喜欢 Python 编程的原因之一是它的列表推导式(https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions)。
这些表达式使得编写干净易读的代码变得很容易,那些代码读起来几乎像自然语言一样。
关于它们的更多使用信息请查看:https://www.learnpython.org/en/List_Comprehensions
numbers = [1,2,3,4,5,6,7]
evens = [x for x in numbers if x % 2 is 0]
odds = [y for y in numbers if y not in evens]
cities = ['London', 'Dublin', 'Oslo']
def visit(city):
print("Welcome to "+city)
for city in cities:
visit(city)
实际上,可以生成超过2 12 2个可能的UUID。这超过五亿十亿(或5,000,000,000,000,000,000,000,000,000,000,000,000,000)。
环境变量
目前还不清楚为何 export $PATH 后,运行 python 命令找不到 python lib 库,而且找不到 site 模块。而使用绝对路径访问 python 没有问题。
/tmp/bin # python
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
ImportError: No module named site
/tmp/bin # /tmp/bin/python
Python 2.7.11 (default, May 16 2016, 17:11:59)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>
通过配置环境变量解决:
export PYTHONHOME=/usr/lib/python2.7
export PYTHONPATH=.:$PYTHONHOME:$PYTHONHOME/site-packages
export PATH=$PATH:$PYTHONHOME:$PYTHONPATH
hash表:
dict:
https://docs.python.org/2/library/stdtypes.html#dict
- 易于学习
- 超高的通用性
- 具备大量模块和库
本文来自 我的博客。博客的文章保持更新,此文可能不是最新状态。
pyquery
https://pypi.python.org/pypi/pyquery
api :
http://pyquery.readthedocs.org/en/latest/api.html
TypeError: Type 'unicode' cannot be serialized.
给两个list,一个是word list, 一个是prefix list return 所有的word that have the prefix 例子: word list = [“a", "abc", "dz", "dda], prefix list = ["ab", "dd"] return ["abc", "dda"]
Python干货精选
http://baoz.me/446252
当我说我会Python时,实际上我会了什么?
8.howdoi
陷入编码问题,却不记得以前见过的解决方案?需要检查 StackOverflow,但不想离开终端?
那么你需要这个有用的命令行工具:https://github.com/gleitz/howdoi
$ pip install howdoi
无论你有什么问题都可以问它,它会尽力回答。
$ howdoi vertical align css
$ howdoi for loop in java
$ howdoi undo commits in git
但是请注意——它会从 StackOverflow 的最高票答案中抓取代码。也就是说它提供的信息并非总是有用……
$ howdoi exit vim
它允许您从一系列领先的国际出版物中检索新闻文章和相关的元数据。您可以检索图像,文本和作者姓名。
裁剪考虑
- lib/libpython2.7.a, 16M
- lib/test, 30M
python的函数特性
- map
10.Jedi
Jedi 库是一个自动完成和代码分析的库。它使代码编写变得更快、效果更高。
除非你正在开发自己的 IDE,否则你肯定会对使用 Jedi 库作为编辑插件很感兴趣。
Jedi:https://jedi.readthedocs.io/en/latest/docs/usage.html
你可能已经在使用 Jedi 了。IPython 项目就使用 Jedi 实现代码自动完成功能。
它们还允许您使用类型检查工具在运行时捕获那些杂散的TypeErrors。如果您正在开展大型复杂项目,那可能是值得的!
附一:Python 内建模块功能说明
直接引自 定制 Python 嵌入 C++: (四) 定制 Python 内建模块,内容可能已过时,不过有参考价值。
- array (Modules/arraymodule.c) (http://docs.python.org/library/array.html) 一个可以存放基本类型的高效数组, 提供了和序列类似的操作. 使用放法类似于 a = array.array('b', [10, 20, 30]), 不常使用, 可以考虑去除.
- _ast (Python/Python-ast.c) (http://docs.python.org/library/ast.html) 抽象语法树, 供 Python 程序解析处理 Python 语法相关的库, 这个模块的源代码是由脚本自动生成的. 由于 Python-ast.c 本身还会被解释器的其它地方引用, 不能删除, 所以, 如果是为了压缩解释器大小, 保留这个库也没关系. 如果是为了定制 python 的功能, 也可以屏蔽这个库, 但是源代码需要保留, 不能从工程中删掉.
- audioop (Modules/audioop.c) (http://docs.python.org/library/audioop.html) 一个音频处理的库, 仅 Win32 平台有效.
- binascii (Modules/binascii.c) (http://docs.python.org/library/binascii.html) 提供二进制和 ASCII 码的转换, 会被 uu, base64, binhex 这些库引用. 建议保留.
- cmath (Modules/cmathmodule.c) (http://docs.python.org/library/cmath.html) 提供复数操作的函数
- errno (Modules/errnomodule.c) (http://docs.python.org/library/errno.html) 提供标准的错误码定义, 在很多地方中都会使用, 需要保留.
- future_builtins (Modules/future_builtins.c) (http://docs.python.org/library/future_builtins.html) 对那些在 Python2.x 和 Python3 中都有但是意义不一样的函数提供的包装. 使用这里面的函数可以保证调用了正确的版本的函数.
- gc (Modules/gcmodule.c) (http://docs.python.org/library/gc.html) Python 的垃圾收集接口. 当然保留.
- imageop (Modules/imageop.c) (http://docs.python.org/library/imageop.html) 一些图像处理的函数.
- math (Modules/mathmodule.c) (http://docs.python.org/library/math.html) 提供了 C 标准库中的那些数学函数.
- _md5 (Modules/md5module.c) 提供了 MD5 算法.
- nt (Modules/posixmodule.c) 一些操作系统习惯的函数, 比如打开文件等等.
- operator (Modules/operator.c) (http://docs.python.org/library/operator.html) 提供了操作符的等价函数
- signal (Modules/signalmodule.c) (http://docs.python.org/library/signal.html) 信号机制, 提供异步事件的回调.
- _sha, _sha256, _sha512 三种 SHA 的加密算法模块.
- strop (Modules/stropmodule.c) 提供了一些优化的字符串操作.
17.time (Modules/timemodule.c) (http://docs.python.org/library/time.html) 时间操作库. - thread (Modules/threadmodule.c) Python 线程的底层模块, threading 会使用 thread 库.
- cStringIO (Modules/cStringIO.c) (http://docs.python.org/library/stringio.html) StringIO 的高效版本.
- cPickle (Modules/cPickle.c) (http://docs.python.org/library/pickle.html) Python 的序列化模块.
- msvcrt (PC/msvcrtmodule.c) (http://docs.python.org/library/msvcrt.html) VC 运行时库的包装, 包括一些文件和屏幕操作函数.
- _locale (Modules/_localemodule.c) 提供本地化支持的模块.
- _subprocess (PC/_subprocess.c) (http://docs.python.org/library/subprocess.html) 操作子进程的库, 平台相关的.
- _codecs (Modules/_codecsmodule.c) (http://docs.python.org/library/codecs.html) 定义了 Python 的编码器相关接口.
- _weakref (Modules/_weakref.c) (http://docs.python.org/library/weakref.html) 创建对象的弱引用.
- _hotshot (Modules/_hotshot.c) (http://docs.python.org/library/hotshot.html) 类似于 Profiler 模块, 而且将来可能被移除, 现在把它去掉也不错.
- _random (Modules/_randommodule.c) 随机数模块.
- _bisect (Modules/_bisectmodule.c) (http://docs.python.org/library/bisect.html) 一个基于二分算法, 可以让插入一个数据岛排序的序列后序列仍然有序的库.
- _heapq (Modules/_heapqmodule.c) (http://docs.python.org/library/heapq.html) 实现堆栈数据结构算法的库.
- _lsprof (Modules/_lsprof.c) (http://docs.python.org/library/profile.html) Profiler 模块, 统计程序执行的性能.
- itertools (Modules/itertoolsmodule.c) (http://docs.python.org/library/itertools.html) 一些迭代器操作的模块.
- _collections (Modules/_collectionsmodule.c) (http://docs.python.org/library/collections.html) 提供了几个高级的容器类.
- _symtable (Modules/symtablemodule.c) (http://docs.python.org/library/symtable.html) 符号表管理模块.
- mmap (Modules/mmapmodule.c) (http://docs.python.org/library/mmap.html) 文件内存映射支持模块.
- _csv (Modules/_csv.c) (http://docs.python.org/library/csv.html) 为 CSV 模块的内部支持. CSV 模块提供了读写 CSV 文件的功能.
- _sre (Modules/_sre.c) 正则表达式的匹配引擎.
- parser (Modules/parsermodule.c) (http://docs.python.org/library/parser.html) 操作 Python 语法树的模块.
- _winreg (PC/_winreg.c) Windows 注册表操作模块.
- _struct (Modules/_struct.c) 提供在 Python 和 C 之间转换数据类型的功能.
- datetime (Modules/datetimemodule.c) (http://docs.python.org/library/datetime.html) 日期时间操作函数.
- _functools (Modules/_functoolsmodule.c) (http://docs.python.org/library/functools.html) 函数相关操作模块.
- _json (Modules/_json.c) (http://docs.python.org/library/json.html) JSON 数据格式操作模块.
- xxsubtype (Modules/xxsubtype.c) 这是一个测试相关的模块. 运行 test_descr.py 时会用到.
- zipimport (Modules/zipimport.c) 这个模块主要用于从 zip 文件中导入 Python 的模块.
- zlib (Modules/zlibmodule.c) 这个模块提供了 zip 压缩和解压功能, 基于 GNU zip 实现.
- _multibytecodec, _codecs_cn, _codecs_hk, _codecs_iso2022, _codecs_jp, _codecs_kr, _codecs_tw (Modules/cjkcodecs/*) 这些模块提供了 CJK(中日韩统一表意文字) 的编码和解码. 去掉这部分可以减小 python 解释器 600 多 K.
- marshal (Python/marshal.c) (http://docs.python.org/library/marshal.html) 为 Python 对象提供序列化的模块.
- imp (Python/import.c) (http://docs.python.org/library/imp.html) 这个模块提供了 Python 里的 import 语句的实现.
- main, builtin, sys, exceptions, _warnings 这部分模块在 config.c 设置里只是一个名字占位符.
- _io (Modules/_iomodule.c) (http://docs.python.org/library/io.html) 新版本的 Python 输入输出模块, 在 Python 3 中为默认的输入输出处理方法.
python-books:
how to think like a computer scientist : http://www.greenteapress.com/thinkpython/thinkCSpy.pdf
算法
python 字典(dict)按键和值排序
http://www.cnpythoner.com/post/266.html
13.map
Python 通过许多内置功能支持函数式编程。map() 函数是最有用的函数之一——特别是当它与 lambda 函数结合使用时。
lambda 函数:https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions
x = [1, 2, 3]
y = map(lambda x : x + 1 , x)
# prints out [2,3,4]
print(list(y))
在上面的例子中,map() 将一个简单的 lambda 函数应用于 x 中的每个元素。它返回一个 map 对象,该对象可以被转换成可迭代的对象,如列表或元组。
print(location.address)
创建 build 目录
在 python 源代码下创建 build-pc
和 build-mips
目录,分别用于编译 PC
pgen(交叉编译时用到)与交叉编译 mips python。该目录做
configure、make、make install,编译时用于保存临时生成的文件,保证 python
源代码干净。
高阶函数:
functools: https://docs.python.org/2/library/functools.html
函数嵌套:
http://effbot.org/pyfaq/how-do-you-make-a-higher-order-function-in-python.htm
20.类型提示(Type hints)
Python 是动态语言。在定义变量、函数、类别等时无需指定数据类型。
这有利于缩短开发周期。但是,简单的类型错误(typing issue)导致的运行时错误真的太烦了。
从 Python 3.5 版本开始,用户可以选择在定义函数时开启类型提示。
def addTwo(x : Int) -> Int:
return x + 2
你还可以定义类型别名:
from typing import List
Vector = List[float]
Matrix = List[Vector]
def addMatrix(a : Matrix, b : Matrix) -> Matrix:
result = []
for i,row in enumerate(a):
result_row =[]
for j, col in enumerate(row):
result_row += [a[i][j] + b[i][j]]
result += [result_row]
return result
x = [[1.0, 0.0], [0.0, 1.0]]
y = [[2.0, 1.0], [0.0, -2.0]]
z = addMatrix(x, y)
尽管非强制,但类型注释可以使代码更易理解。
它们还允许你在运行之前使用类型检查工具捕捉 TypeError。在进行大型复杂项目时执行此类操作是值得的。
bashplotlib
配置交叉编译环境变量
比如 CC、CFLAGS、LDFLAGS 等。
列表生成
http://www.cnblogs.com/moinmoin/archive/2011/03/10/lsit-comprehensions-generators.html
本文将分享一些使用 Python 的技巧,顺序按照 A-Z 排列。
维基百科有一个很棒的API,允许用户以编程方式访问无与伦比的完全免费的知识和信息。
编译
简单的 make
命令即可。
类型
5.emoji
是的,真的有。请点击这里:https://pypi.org/project/emoji/
$ pip install emoji
别以为我不知道你会偷偷试它→→
from emoji import emojize
print(emojize(":thumbs_up:"))
本文由必威发布于编程,转载请注明出处:你肯定还不知道,分享一份python实用