Python常用小知識点

3599 ワード

zip
In [1]: a = ['a','b']

In [2]: b = [18,19]

In [3]: dict(zip(a,b))
Out[3]: {'a': 18, 'b': 19}

辞書はキーまたは値で並べ替えられます.
In [1]: dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0}

In [2]: sorted(dic.iteritems(),key=lambda d:d[1],reverse=True)
Out[2]: [('aa', 74), ('a', 31), ('bc', 5), ('asd', 4), ('c', 3), ('d', 0)]

存在するか否かを検索する.pycファイル
# coding=utf-8
import os

res = []

for root, directory, files in os.walk('./'):
    print root

    for filename in files:
        name, suf = os.path.splitext(filename)
        if suf == '.pyc':
            res.append(os.path.join(root, filename))


print res

义齿
In [1]: a = [1, 2, 3, 4, 5, 5, 4, 3, 2, 1]

In [2]: list(set(a))
Out[2]: [1, 2, 3, 4, 5]
In [3]: new_ids = []

In [4]: for i in a:
   ...:     if i not in new_ids:
   ...:         new_ids.append(i)
   ...:

In [5]: print new_ids
[1, 2, 3, 4, 5]
In [2]: ids = [1,4,3,3,4,2,3,4,5,6,1]

In [3]: func = lambda x,y:x if y in x else x + [y]

In [4]: reduce(func,[[],] + ids)
Out[4]: [1, 4, 3, 2, 5, 6]

[1,2,3,4.....,100]を[[1,2,3],[4,5,6],[7,8,9]....]に変換する.
In [1]: res = []

In [2]: for i in range(1,100,3):
   ...:     res.append([i,i+1,i+2])
   ...:

In [3]: print res
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15], [16, 17, 18], [19, 20, 21], [22, 23, 24], [25, 26, 27], [28, 29, 30], [31, 32, 33], [34, 35, 36], [37, 38, 39], [40, 41, 42], [43, 44, 45], [46, 47, 48], [49, 50, 51], [52, 53, 54], [55, 56, 57], [58, 59, 60], [61, 62, 63], [64, 65, 66], [67, 68, 69], [70, 71, 72], [73, 74, 75], [76, 77, 78], [79, 80, 81], [82, 83, 84], [85, 86, 87], [88, 89, 90], [91, 92, 93], [94, 95, 96], [97, 98, 99]]

時間消費装飾器
# coding=utf-8


def timeCon(func):
    import time

    def wrapper(*args, **kw):
        t = time.clock()
        func(*args, **kw)
        print '%.9f' % (time.clock() - t)
    return wrapper


@timeCon
def foo():
    print 'hello world'


foo()


親メソッドの呼び出し
python3
super().__init__(name)

python2
super(Bosi,self).__init__(name)
Cat.__init__(self,name)

Python自省
自省とは、オブジェクト向けの言語で書かれたプログラムが実行時に、オブジェクトのタイプを知ることである.簡単に言えば、実行時に取得できるオブジェクトのタイプである.例えばtype()、dir()、getattr()、hasattr()、isinstance().
Pythonリロード
ご承知のとおりです.http://www.zhihu.com/question/20053359
関数のリロードは主に2つの問題を解決するためです.
  • 可変パラメータタイプ.
  • 可変パラメータ個数.

  • また、基本的な設計原則は、2つの関数がパラメータタイプとパラメータ個数が異なる以外は、その機能が完全に同じである場合にのみ、関数リロードを使用し、2つの関数の機能が実際に異なる場合には、リロードを使用するのではなく、1つの名前の異なる関数を使用するべきである.
    では、場合1では、関数機能は同じですが、パラメータタイプが異なり、pythonはどのように処理しますか?答えは処理する必要はありません.pythonは任意のタイプのパラメータを受け入れることができるので、関数の機能が同じであれば、異なるパラメータタイプはpythonで同じコードである可能性が高く、2つの異なる関数を作る必要はありません.
    では、場合2では、関数機能は同じですが、パラメータの個数が異なり、pythonはどのように処理しますか?答えはデフォルトのパラメータであることを知っています.欠落しているパラメータをデフォルトパラメータに設定すると、問題が解決します.関数の機能が同じだと仮定すると、欠けているパラメータは結局必要です.
    はい、状況1と状況2に解決策があるため、pythonは関数の再ロードを必要としません.
    Pythonの私有化
  • xx:公有変数
  • _x:単一の前置き下線、プライベート属性またはメソッド、from somemodule import*はインポートを禁止し、クラスオブジェクトとサブクラスは
  • にアクセスできます.
  • __xx:二重前置き下線で、サブクラスの属性命名と衝突しないようにし、外部から直接アクセスできない(名前が変更されたのでアクセスできない)
  • _xx_:二重前後下線、ユーザー名空間の魔法オブジェクトまたは属性.例:init_ , __ 自分でこのような名前を発明しないでください.
  • xx_:Pythonキーワードとの競合を回避するための下線