Pythonはこのように遊ぶことができます

7474 ワード

Pythonを使用して数年、ソースコードを研究したことはありませんが、多くの実用的なテクニックをまとめ、ここで共有します.蛇遊びは楽しい過程だ.
Pythonはこのように遊ぶことができます
                /^\/^\

              _|__|  O|

     \/     /~     \_/ \

      \____|__________/  \

             \_______      \

                     `\     \                 \

                       |     |                  \

                      /      /                    \

                     /     /                       \\

                   /      /                         \ \

                  /     /                            \  \

                /     /             _----_            \   \

               /     /           _-~      ~-_         |   |

              (      (        _-~    _--_    ~-_     _/   |

               \      ~-____-~    _-~    ~-_    ~-_-~    /

                 ~-_           _-~          ~-_       _-~   

                    ~--______-~                ~-___-~

1.外部プログラムの呼び出し
os.startfile(filename)

デフォルトのプログラムを使用してfilenameで指定したファイルを開く
2.csvを削除してファイルを書くときの余分な空白行
You need to open the file in binary b mode to take care of blank lines in Python 2. This isn't required in Python 3. So, change open('test.csv', 'w') to open('test.csv', 'wb')
3.正規表現の使用:複数の区切り文字で文字列を分割する
import re
DATA = "Hey, you - what are you doing here!?"
print re.findall(r"[\w']+", DATA)
# Prints ['Hey', 'you', 'what', 'are', 'you', 'doing', 'here']

4.文字列転送datetime
方法a:
>>> import datetime,time
>>> stringDate = "2006-05-18 19:35:00"
>>> dt = datetime.datetime.fromtimestamp(time.mktime(time.strptime(stringDate,"%Y-%m-%d %H:%M:%S")))
>>> print dt
2006-05-18 19:35:00
>>> print type(dt)

>>>
#        : http://www.sharejs.com/codes/python/835

メソッドb:datetime.strptime()を直接呼び出すこともできます.
datetime.strptime(sj, "%Y-%m-%d %H:%M:%S")

5.pipのインストール
get-pip.pyを実行すればいい!ここをクリックしてダウンロード
python get-pip.py

6.試験手順の性能
実行
python -m cProfile xxx.py

または
import cProfile
cProfile.run('foo()')

7.リスト解析(List Compreshension)
List ComprehensionはPython 2.0バージョンに追加されたもので、より効率的で簡潔なfor構造の代替品で、初心者としていくつか書いた後に手を放さず、驚きの声が使いやすい.例:元のリストのすべての要素を何らかの操作を行った後、新しいリストに値を割り当てます.forループを使用する場合、コードは次のとおりです.
oldlist = []
for item in oldlist:
    newlist.append(func(item))

List Comprehensionを使用する場合、コードは次のとおりです.
newlist = [func(item) for item in oldlist]  

3行が1行に変わり、コードの可読性が向上し、性能も向上していることが明らかになった.基本的にはC言語の速度に達することができるという.List Comprehensionはフィルタリング機能もサポートしており、リスト生成中にfor if文を適用し、非常に使いやすい.例は次のとおりです.
evens = [even for even in range(10) if even % 2 == 0]

1行だけで0から9の数字のすべての偶数が得られ、奇数がフィルタリングされます.
8.ジェネレータ式(Generator Expression)
Python 2.4にはGenerator Expressionが導入されている.機能的にはList Comprehensionに似ていますが、なぜこれに参加したのかを聞いてみましょう.Generator Expressionはより効率的であるため、リスト全体の生成を回避し、パフォーマンスとメモリ使用量を改善し、代わりにgenerator objectを返し、リスト内の各値を反復します.
さらにGenerator Expressionの使い方も簡単で、List Comprehensionの中括弧[]を小括弧()に変更します.例は以下の通りです.
newlist = (func(item) for item in oldlist)

この返されるnewlistは実はlistではなく、前述したgenerator objectであり、C++のiterに似たリストの反復器として理解できる.リスト内の各項目は、newlist.next()反復によって取得できます.List ComprehensionとGenerator Expressionは本当にPythonのハイライトで、簡潔で効率的で、必ずよく使う、時々使う、秒秒秒使う.
9.文字列の結合
a+=bという形式ではなく、'’.joinを使用して文字列接合を行います.joinはこの過程の時間複雑度が線形であることを保証し,より効率的であるからである.道理は多くの人が知っているが、多くの人は「+」を使うのが好きだ.これは本当に簡潔だからだ.実は多くの言語は文字列をつなぐ方法や対応するクラスを提供しており、良いプログラミング習慣は文字列をつなぐことから始まります.
10.None判定
インスタンス変数が空であるかどうかを判断するときは、等しいオペレータを使用せずに、常に「is」または「is not」を使用する必要があります.
11.対象タイプ判定
オブジェクトタイプの比較は、直接比較タイプの代わりにisinstance()を常に使用する必要があります.例:
if isinstance(obj, int):

ではなく
if type(obj) is type(1):

12.文字列前接尾辞判定
接頭辞または接尾辞をチェックするときに文字列をスライスしないでください.startswith()とendswith()の代わりに、それらは明確であり、エラーが少ないためです.例:
使用
if foo.startswith('bar'): 

代替
if foo[:3] == 'bar':

13.変数値交換
他の言語では、2つの変数の値を頻繁に交換します.
t=a; a=b; b=t;

しかしPythonでは、もう一つの簡単な方法があります.
a, b = b, a

そしてこの方法はもっと速く、もっとクールです.
14.異常タイプ
クラスベースの例外は、文字列ベースの例外よりも常に優れています.Exceptionベースのサブクラスを構築したほうがいいです.異常が投げ出されると、「raise ValueError(‘message’)」の代わりに「raise ValueError,‘message’」の形式が使用される.
15.文字列に数字のみが含まれていると判断する方法
Q:文字列に数字文字しか含まれていないと判断する方法A.isdigit()です.しかし、この方法は正負の番号を含む数値文字列には無効なので、より正確には:
try:
    x = int(aPossibleInt)
    … do something with x …
except ValueError:
    … do something else …

これはもっと正確で、適用性も広いです.しかし、正負の記号がないと確信している場合は、文字列のisdigit()メソッドを使用すると便利です.
正規表現も使用できます.
re.match(r’[+-]?\d+$’, ‘-1234′)

数値が大きい場合は、intタイプよりも変換速度が速い場合があります.
16.1つの数値がNaNであるか否かを判断する
math.isnan()

17.数値リスト回転文字列
例えば、a=[1,2.3,4]は直接''.join(a)ではありません.aの中には文字列ではないので、aの各項目を文字列に変換し、joinで
18.文字列のスペースをすばやく削除
"".join(s.split())

19.各進数間の変換
#        
>>> bin(10)
'0b1010'
#         
>>> hex(10)
'0xa'
#        
>>> int('1010',2)
10
#         
>>> int('0xa',16)
10
#         
>>> bin(0xa)
'0b1010'
#         
>>> hex(0b1010)
'0xa'

20.モジュールのアドレスを表示する
import a_module
print a_module.__file__

上記のコードは、範囲.pycファイルがロードされるパスです.プラットフォーム間ソリューションが必要な場合は、次のコードを使用できます.
import os
path = os.path.dirname(amodule.__file__)

21.ajaxリクエストの判定
I am using exactly this base on the 'is_ajax' method in Django:
def is_ajax(self):
    return "X-Requested-With" in self.request.headers and \
        self.request.headers['X-Requested-With'] == "XMLHttpRequest"

22.shellコマンドの実行
  • 用os.system(cmd)ただし戻り値
  • は取れない
  • os.popen(cmd)でコマンドの出力内容を得るには、read()やreadline()などの
       a=os.popen(cmd).read()
    
  • を呼び出すだけです.
  • はcommandsモジュールを使用します.実はpopenのパッケージでもあります.このモジュールには主に次の方法があります.
      commands.getstatusoutput(cmd)   (status, output).
      commands.getoutput(cmd)        
      commands.getstatus(file)   ls -ld file        ,   getoutput,        .
    
  • 23.秩序辞書
    http://www.python.org/dev/peps/pep-0372/
    24.同じファイルを読み書きする
    If you don't want to close and reopen the file, to avoid race conditions, you could truncate it:
    f = open(filename, 'r+')
    text = f.read()
    text = re.sub('foobar', 'bar', text)
    f.seek(0)
    f.write(text)
    f.truncate()
    f.close()
    

    25.ファイルをローカルにダウンロードする
    f = urllib2.urlopen(url)
    with open("code2.zip", "wb") as code:
        code.write(f.read())
    

    26.utf-8符号化されたファイルを書き込む
    import codecs
    f = codecs.open("pru_uni.txt", "w", "utf-8")
    txt = unicode("campeón
    ", "utf-8") f.write(txt) f.write(u'
    ’)f.close()

    27.ファイルサイズの取得
    os.path.getsize()関数の使用