- 博客(39)
- 资源 (2)
- 收藏
- 关注
原创 Python高级编程-14设计模式
单例模式singleton.pyclass Singleton(object): def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(Singleton, cls) cls._instance = orig.__new__(c
2017-02-08 15:55:16
252
原创 Python高级编程-13优化:解决方案
在一个有序list中进行二分查找find.pyfrom bisect import bisectdef find(seq, el): pos = bisect(seq, el) if pos == 0 or (pos == len(seq) and seq[-1] != el): return -1 return pos - 1seq = [2, 3, 7,
2017-02-08 15:40:12
226
原创 Python高级编程-3语法最佳实践——类级
3.1 子类化内建函数distinctdict.py:python中dict的子类。这个类与dict不同的是它不允许为一个key多次赋值。class DistinctError(Exception): passclass DistinctDict(dict): def __setitem__(self, key, value): try: v
2017-02-08 14:35:43
777
原创 Python高级编程-2语法最佳实践——低于类级
2.1 列表推导list_comprehension.py# list comprehensionprint [i for i in range(10) if i % 2 == 0] # [0, 2, 4, 6, 8]# enumerateseq = ["one", "two", "three"]for i, element in enumerate(seq): seq[i] =
2017-02-08 14:08:14
271
原创 Python import
1.四种方式可以import moduleimport X:在当前的namespace中创建X的reference。可以通过X.name来调用X中的实体from X import *:将X中所有public对象的reference到当前namespace。直接通过name调用,X.name是无效的。from X import a, b, c:与上面方式的区别是仅仅拿到a,b,c三个对象的ref
2017-02-08 13:00:32
289
原创 Python filter()、map()、reduce()与lambda
1.lambda定义python 允许用lambda 关键字创造匿名函数。参数是可选的,如果使用的参数话,参数通常也是表达式的一部分。下匿名函数的语法:lambda [arg1[, arg2, ... argN]]: expressiondef true(): return True#相当于lambda :True在上面的例子中,我们简单地用lambda 创建了一个函数(对象),但是既没有在任
2017-02-08 12:56:11
1003
原创 Python闭包编程
1.闭包(closure)定义如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是closure。定义在外部函数内的但由内部函数引用或者使用的变量被称为自由变量:def counter(start_at=0): count = [start_at] def incr(): count[0] += 1
2017-02-08 12:05:11
216
原创 Python命令行参数解析optparse
import optparseimport xmlrpclibparser = optparse.OptionParser()parser.add_option('-r', '--address', dest="server_address", default="http://localhost:8080", help="Re
2017-02-08 12:03:00
250
原创 Python实例属性与类属性
1.类属性为不变对象时的‘隐藏’效果class Foo(object): version = 1.0f = Foo()print Foo.version # 1.0print f.version # 1.0Foo.version += 0.1print Foo.version # 1.1print f.version # 1.1f.version += 0.1print Fo
2017-02-08 11:57:49
208
原创 Python全局变量与global语句
如果将全局变量的名字声明在一个函数体内的时候,全局变量的名字能被局部变量给覆盖掉。code1:bar = 100def foo(): print "\ncalling foo()..." bar = 200 print "in foo(), bar is", barprint "in __main__, bar is", barfoo()print "\nin __mai
2017-02-08 11:55:10
188
原创 Python使用chardet检测字符编码
使用chardet.detect检测字符编码:>>> import urllib>>> rawdata = urllib.urlopen('http://www.baidu.com').read()>>> import chardet>>> chardet.detect(rawdata){'confidence': 0.99, 'encoding': 'GB2312'}对于大量文本,cha
2017-02-08 11:52:05
1104
原创 Python logging
python的logging主要有四个组件: * logger: 日志类,应用程序往往通过调用它提供的api来记录日志; * handler: 对日志信息处理,可以将日志发送(保存)到不同的目标域中; * filter: 对日志信息进行过滤; * formatter:日志的格式化;logging是线程安全的。控制台输出默认情况下,logging将日志打印到屏幕,日志级别为WARNING。日志
2017-02-07 20:12:06
233
原创 Python可变长参数
1.非关键字可变长参数(元组)可变长的参数元组必须在位置和默认参数之后,带元组(或者非关键字可变长参数)的函数普遍的语法如下:def function_name([formal_args,] *nkwargs): "function_documentation_string" function_body_suite星号操作符之后的形参将作为元组传递给函数,元组保存了所有传递给函数的”
2017-02-07 19:32:58
878
原创 Python偏函数应用
currying 的概念将函数式编程的概念和默认参数以及可变参数结合在一起。一个带n 个参数,curried 的函数固化第一个参数为固定参数,并返回另一个带n-1 个参数函数对象,分别类似于LISP的原始函数car 和cdr 的行为。Currying 能泛化成为偏函数应用(PFA), 这种函数将任意数量(顺序)的参数的函数转化成另一个带剩余参数的函数对象。在某种程度上,这似乎和不提供参数,就会使用默
2017-02-07 19:31:00
304
原创 Python collection小技巧
1.序列连接操作符连接操作符( + )这个操作符允许我们把一个序列和另一个相同类型的序列做连接。sequence1 + sequence2对字符串来说,这个操作不如把所有的子字符串放到一个列表或可迭代对象中,然后调用一个join方法来把所有的内容连接在一起节约内存;对列表来说,推荐用列表类型的extend()方法来把两个或者多个列表对象合并.2.序列切片>>> s = 'abcdefgh'>>>
2017-02-07 15:29:24
1224
原创 Python base64编码
base64要求把每三个8bit的字节转换为四个6bit的字节(3*8=4*6),然后把6bit的字节再添两位高位0,组成四个8bit字节,也就是说,转换后的字符串理论上将要比原来的长1/3。1.base64编码# -*- coding: utf-8 -*-import base64initial_data = open(__file__, 'rt').read()encoded_data = b
2017-02-07 15:24:57
564
原创 Python cmd模块
cmd模块为命令行接口(command-line interfaces, CLI)提供了一个简单的框架,可以在自己的程序中使用它来创建自己的命令行程序。# -*- coding: utf-8 -*-import cmdimport sysclass CLI(cmd.Cmd): def __init__(self): cmd.Cmd.__init__(self)
2017-02-07 15:22:06
898
原创 Python对XML进行操作
1.构建xml文件# -*- coding: utf-8 -*-import xml.etree.ElementTree as ETroot = ET.Element("html")head = ET.SubElement(root, "head")title = ET.SubElement(head, "title")title.text = "Title"body = ET.SubEle
2017-02-07 13:44:59
595
原创 Python序列化
一旦数据被序列化,就可以把它写入到文件、socket、管道等中。之后你可以读取这个文件,读取这些数据结构具有相同值的新对象。# -*- coding: utf-8 -*-try: import cPickle as pickleexcept: import pickleimport pprintdata1 = [{'a': 'A', 'b': 2, 'c': 3.0}]prin
2017-02-07 13:42:34
290
原创 Python singleton模式
在使用 Python 进行程序开发的时候,同样可能会用到 Singleton 模式。最简单的办法是使用一个类属性保存一个实例,然后通过 staticmethod 或 classmethod 获取这个实例。class Sing: inst = None @staticmethod def getInst(): if not Sing.inst:
2017-02-07 13:38:58
427
原创 Python字符串模板
由于新式的字符串Template 对象的引进使得string 模块又重新活了过来,Template 对象有两个方法,substitute()和safe_substitute().前者更为严谨,在key 缺少的情况下它会报一个KeyError 的异常出来,而后者在缺少key 时,直接原封不动的把字符串显示出来.>>> from string import Template>>> s = Templa
2017-02-07 13:27:28
1003
原创 Python重载操作符
class Pair: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return 'Pair (%d, %d)' % (self.a, self.b) def __add__(self,other): return Pair(s
2017-02-07 13:24:42
163
原创 Python格式化输出
Python的print语句,与字符串操作符(%)组合使用,可实现字符串替换功能,类似于C语言的printf()函数。>>>"%s is number %d" % ('Python', 1)Python is number 1>>> "%s price is %f" % ('Core Python Programming', 31.25)Core Python Programming pric
2017-02-07 13:20:21
458
原创 Python生成器
从句法上讲,生成器是一个带yield 语句的函数。一个函数或者子程序只返回一次,但一个生成器能暂停执行并返回一个中间的结果——那就是yield 语句的功能, 返回一个值给调用者并暂停执行。当生成器的next()方法被调用的时候,它会准确地从离开地方继续。当到达一个真正的返回或者函数结束没有更多的值返回(当调用next()),一个StopIteration 异常就会抛出。简单的生成器:def simp
2017-02-04 10:45:01
356
原创 Python元类编程
元类让你来定义某些类是如何被创建的,从根本上说,赋予你如何创建类的控制权。示例1,它在用元类创建一个类时,显示时间标签。#!/usr/bin/env pythonfrom time import ctimeclass MetaC(type): def __init__(cls, name, bases, attrd): super(MetaC, cls).__init__(
2017-02-04 10:37:28
198
原创 LuceneInAction-多样化查询
通过项进行搜索:TermQuery类通过匹配isbn来检索某个文档:import lia.common.TestUtil;import org.apache.lucene.index.Term;import org.apache.lucene.search.IndexSearcher;import org.apache.lucene.search.Query;import org.apach
2017-02-03 15:44:45
309
原创 LuceneInAction-explain()理解搜索结果评分
Explainer.javaimport org.apache.lucene.analysis.SimpleAnalyzer;import org.apache.lucene.document.Document;import org.apache.lucene.queryParser.QueryParser;import org.apache.lucene.search.Explanation
2017-02-03 15:41:34
132
原创 LuceneInAction-近实时搜索
它使你能够使用一个打开的IndexWriter快速搜索索引的变更内容,而不必首先关闭writer或向该writer提交。在过去,由于没有这个功能,必须调用writer中commit方法,然后重新打开reader,但这个处理过程会非常耗时,因为commit方法必须对索引中所有的新文件进行同步。代码NearRealTimeTest.javaimport org.apache.lucene.util.Ve
2017-02-03 15:39:46
156
原创 LuceneInAction-实现简单的搜索功能
Lucene主要的搜索API: 类 目的 IndexSearcher 搜索引擎的门户。所有搜索都通过IndexSearcher进行,它们会调用该类中重载的search方法 Query(及其子类) 封装某种查询类型的具体子类。Query实例将被传递给IndexSearcher的search方法 QueryParser 将用户输入的(可读的)查询表达式处理成具体的Query
2017-02-03 15:37:46
274
原创 LuceneInAction-构建索引
Lucene如何对搜索内容进行建模文档和域文档是Lucene索引和搜索的原子单位。文档为包含一个或多个域的容器,而域则依次包含“真正的”被搜索的内容。每个域都有一个标识名称,该名称为一个文本值或二进制值。Lucene可以针对域进行3种操作: - 域值可以被索引(或者不被索引)。如果需要搜索一个域,则必须首先对它进行索引。被索引的域值必须是文本格式的(二进制格式的域值只能被存储而不能被索引)。在搜索
2017-02-03 15:32:19
280
原创 Python socket编程
server.py# -*- coding: utf-8 -*-import sockethost = '127.0.0.1'port = 5678s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # tcps.bind((host, port))s.listen(1)while True: clientSocket, cl
2017-02-03 12:32:54
233
原创 Python多线程编程
使用线程有两种方法,一种是创建线程要执行的函数,把这个函数传递进Thread对象里,让它来执行。# -*- coding: utf-8 -*-import threadingimport timeimport randomcount = 0mutex = threading.Lock()def thread_main(i): global count, mutex thre
2017-02-03 12:30:46
191
原创 Python产生随机数
random.randint()可以通过参数限定生成随机整数的范围。下面的程序随机生成一个1~9的整数。# -*- coding: utf-8 -*-import randomprint 'generate a random integer (1~9):%d' % random.randint(1, 9) #generate a random integer (1~9):3random.rand
2017-02-03 12:27:18
410
原创 Python处理时间
time.time()直接使用time.time()获取当前时间戳,它提供浮点型数据,易于存储与做日期间的比较。import timeprint 'The time is:', time.time() # The time is: 1309664371.7time.ctime()为了获取更易阅读,可使用time.ctime。# -*- coding: utf-8 -*-import timepri
2017-01-26 23:14:02
270
原创 Python传递函数参数
convert()函数传入一个内建函数int(),long(), 或者float()来执行转换:#!/usr/bin/env pythondef convert(func, seq): 'conv. sequence of numbers to same type' return [func(eachNum) for eachNum in seq]myseq = (123, 45.6
2017-01-26 23:07:01
243
原创 Python异常处理
1. 检测与处理异常1.1 try-except 语句try: try_suite # watch for exceptions hereexcept Exception[, reason]: except_suite # exception-handling code解释器尝试执行 try 块里的所有代码, 如果代码块完成后没有异常发生, 执行流就会忽略 except 语句继续执
2017-01-26 23:01:36
382
原创 LuceneInAction-理解索引和搜索过程的核心类
理解索引过程的核心类IndexWriter (写索引)是索引过程的核心组件。这个类负责创建新索引或者打开已有索引,以及向索引中添加、删除或更新被索引文档的信息。Directory 描述了Lucene索引的存放位置。是一个抽象类。FSDirectory是具体子类。Analyzer 文本文件在被索引之前,需要经过Analyzer处理。它负责从被索引文件中提取词汇单元,并剔除剩下的无用信息。
2017-01-26 22:01:47
189
原创 RESTful API 设计
Use RESTful URLs and actionsVerbsGET (SELECT): Retrieve a specific Resource from the Server, or a listing of Resources.POST (CREATE): Create a new Resource on the Server.PUT (UPDATE): Update a Resou
2017-01-26 20:32:28
299
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人