84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
Python是十分优美的~~
我想收集些Python语言的技巧。
我先来:
unzip函数的实现 :
zip(*a)
我再追加一个
>>> a=[[1,2,3],[4,5,6],[7,8,9]] >>> sum(sum(a,[])) 45
欢迎选择我的课程,让我们一起见证您的进步~~
这个问题不好答啊…自己觉得好的技巧,其他人可能非常常用…加上python本来就对问题解法相对单一…
三目运算符a = True if k in l else False
a = True if k in l else False
List Comprehensiona = [ x for x in l if x > 0]
a = [ x for x in l if x > 0]
property decorator
property
class A: def __init__(self, name=None): self._name = name @property def name(self): return str(len(self._name)) + self._name a = A("test") print(a.name)
再补充一个从2.4到3.3都支持的exception捕捉方法,看有没有人需要,灵感来自@felix21的例子
exception
import sys try: ... except Exception: t, e = sys.exc_info()[:2] print(e)
我再加一个。嘻嘻
Python中链表去重复的快速的方式:
{}.fromkeys(mylist,0).keys()
int_list = [1, 2, 3, 4] if 2 in int_list: print "fatastic!"
import traceback def asdf(): (filename,line_number,function_name,text)=traceback.extract_stack()[-1] print function_name asdf()
再加一个纯python的模块pexpect吧,这个东西挺好的。
#!/usr/bin/python import sys import pexpect password = 'password' expect_list = ['(yes/no)', 'password:'] p = pexpect.spawn('ssh username@localhost ls') try: while True: idx = p.expect(expect_list) print p.before + expect_list[idx], if idx == 0: print "enter yes" p.sendline('yes') elif idx == 1: print "enter password" p.sendline(password) except pexpect.TIMEOUT: print >>sys.stderr, 'timeout' except pexpect.EOF: print p.before
我来推荐一个比较新的第三方库 python-sh, 不知是否离题; 如果离题还烦请删除此条答案 :)
from sh import cat, ifconfig, git content = cat("somefile").stdout print(ifconfig("wlan0")) git.checkout("master")
详情请见文档 http://amoffat.github.com/sh/
我在这里写一下Python中的单例模式
class Singleton(object): """Singleton pattern Somehow singleton in python is useless class A: class_var = object() A() == A() ==> True """ _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Singleton, cls).__new__( cls, *args, **kwargs) return cls._instance
PyPy里有一个非常奇特的multimethod库。它的实现 它的测试 有了这个库,就不用写visitor pattern了。你可以写出这样的代码:
from rpython.tool.pairtype import pairtype, pair class CodeGen(object): pass class JavaCodeGen(CodeGen): pass class LispCodeGen(CodeGen): pass class Ast(object): pass class Identifier(Ast): def __init__(self, name): self.name = name class FunctionCall(Ast): def __init__(self, func, args): self.func = func self.args = args class __extend__(pairtype(CodeGen, Identifier)): def gen((cg, ident)): return ident.name class __extend__(pairtype(JavaCodeGen, FunctionCall)): def gen((cg, funcall)): funcrepr = pair(cg, funcall.func).gen() argreprs = ', '.join(pair(cg, arg).gen() for arg in funcall.args) return '%s(%s)' % (funcrepr, argreprs) class __extend__(pairtype(LispCodeGen, FunctionCall)): def gen((cg, funcall)): listitems = [funcall.func] + funcall.args listrepr = ' '.join(pair(cg, arg).gen() for arg in listitems) return '(%s)' % listrepr # Test someast = FunctionCall(Identifier('f'), [Identifier('x'), FunctionCall(Identifier('g'), [Identifier('x')])]) assert pair(JavaCodeGen(), someast).gen() == 'f(x, g(x))' assert pair(LispCodeGen(), someast).gen() == '(f x (g x))'
zip函数都很少用到,所以我是个菜鸟。
这个问题不好答啊…自己觉得好的技巧,其他人可能非常常用…加上python本来就对问题解法相对单一…
三目运算符
a = True if k in l else False
List Comprehension
a = [ x for x in l if x > 0]
property
decorator再补充一个从2.4到3.3都支持的
exception
捕捉方法,看有没有人需要,灵感来自@felix21的例子我再加一个。嘻嘻
Python中链表去重复的快速的方式:
再加一个纯python的模块pexpect吧,这个东西挺好的。
我来推荐一个比较新的第三方库 python-sh, 不知是否离题; 如果离题还烦请删除此条答案 :)
详情请见文档 http://amoffat.github.com/sh/
我在这里写一下Python中的单例模式
PyPy里有一个非常奇特的multimethod库。它的实现 它的测试
有了这个库,就不用写visitor pattern了。你可以写出这样的代码:
zip函数都很少用到,所以我是个菜鸟。