84669 orang belajar
152542 orang belajar
20005 orang belajar
5487 orang belajar
7821 orang belajar
359900 orang belajar
3350 orang belajar
180660 orang belajar
48569 orang belajar
18603 orang belajar
40936 orang belajar
1549 orang belajar
1183 orang belajar
32909 orang belajar
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函数都很少用到,所以我是个菜鸟。