python技巧征集贴
天蓬老师
天蓬老师 2017-04-17 11:05:14
0
7
661

Python是十分优美的~~

我想收集些Python语言的技巧。

我先来:

unzip函数的实现 :

zip(*a)
12.03追加

我再追加一个

>>> a=[[1,2,3],[4,5,6],[7,8,9]]
>>> sum(sum(a,[]))
45
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

reply all(7)
Ty80

This question is difficult to answer... What I think is a good technique may be commonly used by others... Plus Python has a relatively simple solution to the problem...

Ternary Operator
a = True if k in l else False

List Comprehension
a = [ x for x in l if x > 0]

property decorator

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)

Add another exception capture method supported from 2.4 to 3.3, see if anyone needs it, inspired by @felix21’s example

import sys
try:
    ...
except Exception:
    t, e = sys.exc_info()[:2]
    print(e)
迷茫

I’ll add one more. Heehee

A quick way to remove duplicates from linked lists in 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()

Let’s add a pure python module pexpect, this thing is very good.

#!/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
大家讲道理

I would like to recommend a relatively new third-party library python-sh. I don’t know if it is off topic; if it is off topic, please delete this answer :)

from sh import cat, ifconfig, git
content = cat("somefile").stdout
print(ifconfig("wlan0"))
git.checkout("master")

Please see the documentation for details http://amoffat.github.com/sh/

迷茫

I will write about the singleton pattern in Python here

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
阿神

There is a very peculiar multimethod library in PyPy. Its implementation Its testing
With this library, there is no need to write visitor patterns. You can write code like this:

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))'
洪涛

The zip function is rarely used, so I am a novice.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template