Python是十分优美的~~
我想收集些Python语言的技巧。
我先来:
unzip函数的实现 :
zip(*a)12.03追加
我再追加一个
>>> a=[[1,2,3],[4,5,6],[7,8,9]] >>> sum(sum(a,[])) 45
Python是十分优美的~~
我想收集些Python语言的技巧。
我先来:
unzip函数的实现 :
zip(*a)12.03追加
我再追加一个
>>> a=[[1,2,3],[4,5,6],[7,8,9]] >>> sum(sum(a,[])) 45
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")
我在这里写一下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))'
3 回答3.1k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
4 回答1.9k 阅读
3 回答1.7k 阅读
1 回答1.4k 阅读✓ 已解决
这个问题不好答啊…自己觉得好的技巧,其他人可能非常常用…加上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的例子