1

Python(四)

 2 years ago
source link: http://antkillerfarm.github.io/language/2019/07/07/python_4.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Python

mypy是一个针对python语言的静态类型检查工具。

http://www.mypy-lang.org/

https://mp.weixin.qq.com/s/dBK8x_WajI2A3L5v6OQEgA

四年完成400万行Python代码检查,甚至顺手写了个编译器

glob的历史可以追溯到早期的UNIX系统。用它可以查找符合特定规则的文件路径名。

https://blog.csdn.net/csapr1987/article/details/7469769

python glob模块

https://mp.weixin.qq.com/s/suUXM4Tdj6ekKQWC0g04Yg

glob-被忽略的python超强文件批量处理模块

Python Lex-Yacc是一个python版本的lex/yacc实现。

http://www.dabeaz.com/ply/

https://blog.csdn.net/feixiaoxing/article/details/79123776

python编程(ply库)

https://blog.csdn.net/chosen0ne/article/details/8077880

Python语法解析器PLY——lex and yacc in Python

JPype

JPype是一个能够让python代码方便地调用Java代码的工具。官网:

https://sourceforge.net/projects/jpype/

http://blog.csdn.net/niuyisheng/article/details/9002926

JPype:实现在python中调用JAVA

http://www.cnblogs.com/yu-zhang/p/3817024.html

python调用java程序–jpype

Simplified Wrapper and Interface Generator可以为C/C++的库生成其他高级脚本语言的Wrapper。

http://swig.org/

PLY和SWIG的作者都是David Beazley。

David M. Beazley,犹他大学博士。IEEE Gordon Bell Prize(1993,1998)。先后在Los Alamos和University of Chicago工作执教。超算领域专家。python语言核心开发者。

Sly Lex Yacc是David Beazley的新作,号称新一代的PLY。

https://sly.readthedocs.io/en/latest/

Cython

和SWIG功能类似的替代品。

https://cython.org/

https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/python/cython

python setup.py build_ext --inplace

>import hello
>hello.say_hello()

https://mp.weixin.qq.com/s/ODA74xgoS8X1HFxp4BfshQ

如何将Python自然语言处理速度提升100倍:用spaCy/Cython加速NLP

https://mp.weixin.qq.com/s/1Iyhsp5-2DyTfOb0JzqLZg

比Python快100倍,利用spaCy和Cython实现高速NLP项目

https://mp.weixin.qq.com/s/l-zmvQvmosw81G1wFCIDbQ

用Cython造个轮子

.pyc & .pyx & .pyd

.pyc: 编译好的二进制文件。

.pyx: python的c扩展文件,代码要符合cython的规范

.pyd: 编译好的cython动态库,仅在Windows平台有,Linux平台生成.so文件。

https://blog.csdn.net/sislcb/article/details/4002414

py文件编译为pyc

https://www.cnblogs.com/kaituorensheng/p/4452881.html

Cython学习

https://mp.weixin.qq.com/s/_fi4fpfN8Whe7_ZpkPL0tA

怎么给Python写C扩展?

https://mp.weixin.qq.com/s/eqNaX0YorcaMN8D9lnQprw

简单上手一波Cython

http://gashero.yeax.com/?p=38

使用C/C++扩展Python

Pythran

Pythran是一个将python翻译成C++的库,而Cython和SWIG则是对C++进行python封装。

https://pythran.readthedocs.io/en/latest/

https://mp.weixin.qq.com/s/hJGaREpBP0j7rqCXSZQMvA

把Python自动翻译成C++

pybind11

pybind11可以在C++11和Python之间建立互操作的关系,而且还是个header-only的方案。

https://pybind11.readthedocs.io/en/stable/

python调用GTK函数的一般规则

众所周知,GTK库是用C语言编写的,其相关的文档提供的也是C函数的接口,python接口的文档相对较少,获得也不太容易。因此有必要掌握一下这方面基本的命名规则。(这里只讲方法,对深层次的调用原理不做探究。)

1)类初始化函数

C:GtkWidget * gtk_button_new (void);

python:button = Gtk.Button()

这里除了把C函数式的写法,替换成python的类的写法之外,并无其他差异。

2)普通类成员函数

C:void gtk_container_add (GtkContainer *container, GtkWidget *widget);

python:button.add(image)

可以看出,C函数的第一个表示self类指针的参数被省略掉了。

3)回调函数

这里以按钮的click事件回调为例:

C:void user_function (GtkButton *button, gpointer user_data)

python:

button.connect("clicked", self.playToggled)

def playToggled(self, w):

这里的情况要复杂的多。首先在事件回调注册的时候,由于我们并没有给user_data赋值,因此照理说playToggled函数,只有button这一个参数。但实际传递给playToggled函数的有两个参数,self是一个用于占位的参数,w对应button,没有东西对应user_data。

4)用于输出的参数

C:void gst_message_parse_error (GstMessage *message, GError **gerror, gchar **debug);

python:err, debug = message.parse_error()

这个例子中的gerror和debug都是用于输出的参数。如果只想得到其一,还可用以下方法:

debug = message.parse_error()[2]

5)枚举类型

enum GstSeekFlags
{
  GST_SEEK_FLAG_FLUSH,
  ...
}

python:Gst.SeekFlags.FLUSH

6)宏常量

C:#define GST_CLOCK_TIME_NONE ((GstClockTime) -1)

python:Gst.CLOCK_TIME_NONE

7)类型转换

大多数情况下,类型转换自动完成,并无什么问题。这里只讨论特殊的情况。

gst_element_seek (pipeline, 1.0, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH,
                         GST_SEEK_TYPE_SET, time_nanoseconds,
                         GST_SEEK_TYPE_NONE, GST_CLOCK_TIME_NONE))

python:

self.player.seek(1.0, Gst.Format.TIME, Gst.SeekFlags.FLUSH, Gst.SeekType.SET,\
                 time_nanoseconds, Gst.SeekType.NONE, Gst.CLOCK_TIME_NONE)

这里首先按照一般的方法,将C代码转化成python代码。但是运行之后,产生如下错误:

OverflowError: long too big to convert

究其原因,gst_element_seek的最后一个参数是uint64类型的。但python原生并不支持该类型,而是将之转换成int类型(实际上是int64类型),这样的话,GST_CLOCK_TIME_NONE的值显然超出了int64所能表示的范围。

解决的办法是使用ctypes库,将

Gst.CLOCK_TIME_NONE

c_long(Gst.CLOCK_TIME_NONE).value

Django

Django是一个Web框架。

https://www.djangoproject.com/

中文教程:

https://www.runoob.com/django/django-tutorial.html

sudo pip install Django

https://mp.weixin.qq.com/s/-CaMHjsY580et8Hh_D2FSg

简约而不简单的Django新手图文教程

http://www.liujiangblog.com/course/django/

Django教程

SimpleHTTPServer

Django比较重量级了,如果只是想发布静态网页的话,可以用:

python -m SimpleHTTPServer 7800

python3 -m http.server 7800

除此之外,Flask、tornado也是较常用的Web框架。

基于python新增的async/await语法的异步Web框架,是最近的新流派,代表有:Sanic

https://juejin.cn/post/6944598601674784775

异步Web框架Sanic凭什么比Django Flask强?

pygame


pygame是一个python的游戏引擎。

https://www.pygame.org/

类似的引擎还有:

https://kaboomjs.com/

kaboom.js(一个JS写的引擎)

https://solar2d.com/

Solar2D(一个Lus写的引擎)

https://github.com/marblexu/PythonPlantsVsZombies

Python《植物大战僵尸》代码实现

https://mp.weixin.qq.com/s/la9srinIeibkXZEDRvv5pA

手把手教你用Python实现“坦克大战”,附详细代码!

https://mp.weixin.qq.com/s/1xXULpT36P7LTO5HDbjptg

坦克大战小游戏

https://mp.weixin.qq.com/s/EEw4x1mk0y8xsL9mORd9sA

如何用Python实现超级玛丽的界面和状态机?

https://mp.weixin.qq.com/s/HRdc5O6hT-dzx4jmgmlSYw

如何用Python实现超级玛丽的人物行走和碰撞检测?

https://mp.weixin.qq.com/s/20F0ieUjJSZp7yI7ymeJ5Q

试试在终端模拟下雪的效果呗?

处理eml文件

代码示例:

https://github.com/antkillerfarm/antkillerfarm_crazy/blob/master/python/misc/hello_eml.py

这个示例主要使用email包来解析eml文件。

同时为了处理其中的html的内容,还用到了Beautiful Soup包。其网址为:

https://www.crummy.com/software/BeautifulSoup/

https://mp.weixin.qq.com/s/p86yvl3uAm3FXw4V9NlNoA

一文带你上手Python网页抓取神器BeautifulSoup库

https://mp.weixin.qq.com/s/3o_T7Tyrstur6jkj0gexMA

BeautifulSoup的使用

https://mp.weixin.qq.com/s/fBz__E2Xu4GC7w1Uqx5NAA

手把手教你如何用Python从PDF文件中导出数据

https://mp.weixin.qq.com/s/xCKC3cz7jUvrwl4uvMNKTA

20行Python代码教你批量将PDF转为Word

https://mp.weixin.qq.com/s/IznKbG3cEF6uxP0Fe_0oaQ

印度小哥“神剑”:PDF提取表格so easy!

https://mp.weixin.qq.com/s/J-H638ZzhB-GOXMeAQ9aww

Camelot: 三行代码提取PDF表格数据

https://mp.weixin.qq.com/s/c0hszsSDS-u4z-83Y7km8Q

pdf文档解析之pdfminer

https://mp.weixin.qq.com/s/1BoBHbXXOGPZ4HK437lH4Q

6款Python特殊文本格式处理库推荐

https://mp.weixin.qq.com/s/bz7rCy0YyF1HrrHrWt9Mpw

聊聊Python操作PDF的几种方法

https://mp.weixin.qq.com/s/jzjumS2oJfFO-4SBa0qooQ

利用Python将PDF文档转为MP3音频

https://mp.weixin.qq.com/s/FmdbdAWenXWuY9s7ykVORQ

三种方法,Python轻松提取PDF中全部图片

https://mp.weixin.qq.com/s/UVKOU11dfWwP9Uyw9E400Q

如何使用python提取pdf表格及文本,并保存到excel

word & excel

https://mp.weixin.qq.com/s/lEtE3ejBLzmm9_eo-_8NBg

处理大型Excel文件,用Python就对了!

https://mp.weixin.qq.com/s/GjG1Rc-HtLRkrNXY1pcp2Q

xlwings,让excel飞起来!

https://mp.weixin.qq.com/s/6M7aiXgcne9cbHffqpm_Lw

n种方式教你用python读写excel等数据文件

https://mp.weixin.qq.com/s/rBR4d_wyU8TKy1K9az4C-Q

从VBA到Python,Excel工作效率如何提高?

https://mp.weixin.qq.com/s/3nr8uHnRoSgs-Zu6QxGiqw

Python实现数据库一键导出为Excel表格!大大的增加了工作效率!

https://mp.weixin.qq.com/s/ZI7KDxH9z_UR2p3umBCNsA

一套代码批量编辑Word和Excel,告别工具人

https://mp.weixin.qq.com/s/4q6poyFBLgwZJPzJNX3y0g

Python操作Excel之一

https://mp.weixin.qq.com/s/NiDZfQCblcfw4XnPzBYIaQ

Python操作Excel之二

https://mp.weixin.qq.com/s/m5mrlx3V3bBblqHdBZKa6w

Python操作Word

https://mp.weixin.qq.com/s/KhtVET6AAhYWWefBnvis2Q

Word自动化排版画图

https://mp.weixin.qq.com/s/RLJAHQAheqrf8i-c8QtDtw

Jupyter Notebooks嵌入Excel并使用Python替代VBA宏

https://mp.weixin.qq.com/s/ymPHlri3qMmTlvlWiBqsxg

用Python+Excel制作天气预报表

https://web.mit.edu/music21/

music21官网

https://mp.weixin.qq.com/s/ONZD5RGI18rLTYhzIQQbVA

用R包gm生成音乐

python执行shell脚本

https://github.com/antkillerfarm/antkillerfarm_crazy/blob/master/python/misc/hello_cmd.py

需要注意的是shell这个选项是有讲究的。

shell=True:

args = ["ls -al ."]

shell=False:

args = ["ls","-al","."]


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK