临街小站


  • 首页

  • 归档

  • 标签

  • 相册

  • 搜索
close
临街小站

Lambda

发表于 2016-01-26 | 分类于 python | 阅读次数

Python的Lambda函数

lambda函数也叫匿名函数,即函数没有具体的名称,函数冒号之前是函数的参数,没有return语句,参数的结果就是返回值。先来看一个最简单例子:

1
2
3
4
5
def f(x):
return x**3

print f(5)
#结果是125

Python中使用lambda的话,写成这样

1
2
3
g = lambda x : x**3
print g(5)
#同样的结果 125
  1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

  2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

    阅读全文 »
临街小站

简单的拼写检查

发表于 2016-01-25 | 分类于 python | 阅读次数

大家在使用谷歌或者百度搜索时,输入搜索内容时,谷歌总是能提供非常好的拼写检查,比如你输入 speling,谷歌会马上返回 spelling。
下面是用python代码实现的一个简易但是具备完整功能的拼写检查器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import re, collections
def words(text): return re.findall('[a-z]+', text.lower())
def train(features):
model = collections.defaultdict(lambda: 1)
for f in features:
model[f] += 1
return model
NWORDS = train(words(open('big.txt').read()))
alphabet = 'abcdefghijklmnopqrstuvwxyz'
def edits1(word):
splits = [(word[:i], word[i:]) for i in range(len(word) + 1)]
deletes = [a + b[1:] for a, b in splits if b]
transposes = [a + b[1] + b[0] + b[2:] for a, b in splits if len(b)>1]
replaces = [a + c + b[1:] for a, b in splits for c in alphabet if b]
inserts = [a + c + b for a, b in splits for c in alphabet]
return set(deletes + transposes + replaces + inserts)
def known_edits2(word):
return set(e2 for e1 in edits1(word) for e2 in edits1(e1) if e2 in NWORDS)
def known(words): return set(w for w in words if w in NWORDS)
def correct(word):
candidates = known([word]) or known(edits1(word)) or known_edits2(word) or [word]
return max(candidates, key=NWORDS.get)
阅读全文 »
临街小站

Python CGI初体验

发表于 2016-01-25 | 分类于 python | 阅读次数

CGI小述

CGI(Common Gateway Interface,通用网页接口)。CGI是网络服务器可以将查询(一般来说是通过Web表单)传递到专门的程序(比如Python等)中并且在网页上显示结果的标准机制。它是创建万维网应用程序而不用编写特殊用途的应用服务器的简单方法。

CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。
Common Gateway Interface,简称CGI。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。这样说大概还不好理解。那么我们看一个实际例子:现在的个人主页上大部分都有一个留言本。留言本的工作是这样的:先由用户在客户端输入一些信息,如名字之类的东西。接着用户按一下“留言”(到目前为止工作都在客户端),浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理。在本例中就是把用户提交的信息存入指定的文件中。然后CGI程序给客户端发送一个信息,表示请求的任务已经结束。此时用户在浏览器里将看到“留言结束”的字样。整个过程结束。

绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器。CGI程序使网页具有交互功能。

Python CGI程序设计的关键工具是cgi、cgitb模块。

阅读全文 »
临街小站

抓取豆瓣电影信息

发表于 2016-01-22 | 分类于 python | 阅读次数

BeautifulSoup抓取豆瓣电影信息

Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(parse tree)。 它提供简单又常用的导航(navigating),搜索以及修改剖析树的操作。它可以大大节省你的编程时间。


BeautifulSoup4的安装

一、使用pip直接安装beautifulsoup4

1
2
3
4
5
6
7
8
F:\demo>pip install beautifulsoup4
Collecting beautifulsoup4
Downloading beautifulsoup4-4.4.0-py3-none-any.whl (80kB)
328kB/s
Installing collected packages: beautifulsoup4
Successfully installed beautifulsoup4-4.4.0

F:\demo>

或者从官网下载Beautifulsoup的软件包,然后解压,cmd命令行进入解压包目录,输入以下命令安装:python setup.py install

实例,新浪双色球开奖数据实现:

阅读全文 »
临街小站

AC自动机

发表于 2016-01-21 | 分类于 algorithm | 阅读次数

文章大部分内容参考自CSDN–飘过的小牛

AC自动机,全程是Aho-Corasick automaton,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法。

要讲清楚比较吃力,直接上实例边消化边理解会好很多。

示例

构造

  1. 构造一棵Trie,作为AC自动机的搜索数据结构。

  2. 构造fail指针,使当前字符失配时跳转到具有最长公共前后缀的字符继续匹配。如同 KMP算法一样, AC自动机在匹配时如果当前字符匹配失败,那么利用fail指针进行跳转。由此可知如果跳转,跳转后的串的前缀,必为跳转前的模式串的后缀并且跳转的新位置的深度(匹配字符个数)一定小于跳之前的节点。所以我们可以利用 bfs在 Trie上面进行 fail指针的求解。

  3. 扫描主串进行匹配。

阅读全文 »
临街小站

矩阵快速幂

发表于 2016-01-21 | 分类于 algorithm | 阅读次数

矩阵的快速幂是用来高效地计算矩阵的高次方的。将朴素的o(n)的时间复杂度,降到log(n).

最简单的例子来讲,一般我们正常计算实数x的n次幂时,都是从1开始,进行n次的x相乘。

但做下简单的改进就能减少连乘的次数,方法如下:

把n个矩阵进行两两分组,比如:A*A*A*A*A*A => (A*A)*(A*A)*(A*A)

这样变的好处是,你只需要计算一次AA,然后将结果(AA)连乘自己两次就能得到A^6,即(A*A)^3=A^6.这样就很容易的实现了时间复杂度的优化。

阅读全文 »

临街小站

Trie树

发表于 2016-01-20 | 分类于 algorithm | 阅读次数

文章大部分内容引用自Encyclopedia

Trie树,即字典树。是一种树形结构,哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

Trie树可以用来作为搜索引擎中的分词处理手段。

描述

根节点不包含字符,除根节点外每一个节点都只包含一个字符; 从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串; 每个节点的所有子节点包含的字符都不相同。

实现

  1. 从根结点开始一次搜索;
    阅读全文 »
临街小站

分布式进程

发表于 2016-01-12 | 分类于 python | 阅读次数

在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。

Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个进程中,依靠网络通信。由于managers模块封装很好,不必了解网络通信的细节,就可以很容易地编写分布式多进程程序。

阅读全文 »

1…192021…24
clinjie

clinjie

189 日志
38 分类
69 标签
RSS
github weibo zhihu
Creative Commons
© 2019 clinjie
由 Hexo 强力驱动
主题 - NexT.Muse