Python学習ノート(八):常用文法

24011 ワード

  • 一、基本文法
  • 1. コード宣言
  • 2. ごみ収集
  • 二、内装タイプ
  • 1. 真値テスト
  • 2. ブール演算
  • 3. 比較
  • 4. 整数タイプのビット操作
  • 三、簡単な文
  • 1. 条件文
  • 2. forサイクル
  • 3. whileサイクル
  • 4. break文
  • 5. continue文
  • 6. pass文
  • 四、関数式プログラミングツール
  • 1. filter()
  • 2. map()
  • 3. Lambda式
  • 4. 付与文の特殊なテクニック
  • 5. 収集パラメータ
  • 五、異常
  • 1. 一部の内蔵異常
  • 2. 処理異常
  • 3. トリガ異常
  • 4. カスタム例外クラス
  • 六、モジュール
  • 1. 導入モジュール
  • 2. __name__
  • 3. dir()関数
  • 七、その他の組み込み関数(未完、継続)
  • 一、基本文法
    1.コード宣言
    '''
    # -*- coding:  -*-
    # vim:fileencoding=
    '''
    
    #  :
    # -*- coding: utf-8 -*-
    

    2.ゴミ収集
    一般に、Pythonは、使用者が変数やデータ構造で参照しないため、使用されなくなったオブジェクトを削除します.たとえば、名前バインドの値をNoneに設定すると、元のバインドの値はメモリに「ドリフト」され、名前バインドされていません.それを取得して使用することはできないので、Python解釈器はこの値を直接削除し、ゴミ収集と呼ばれます.もう1つの方法はdel文を使用することです.delを使用して削除されるのは、値ではなく名前だけです.実際、Pythonでは値を削除することはできません(削除値の問題もあまり考慮する必要はありません.ある値が使用されなくなったとき、Python解釈器がメモリの回収を担当するためです).
    二、内装タイプ
    1.真値テスト
    以下の値は、False①None②False③の任意の数値タイプのゼロとみなされます.たとえば、0、0 L、0.0、0 jです.④任意の空のシーケンス、例えば、''、()、[].⑤空のマッピング、例えば{}.⑥ユーザー定義のクラスの例、クラスが1つの__を定義した場合nonzero__()または_len__()のメソッドで、整数ゼロまたはブール値Falseを返す場合
    '''
    bool(val)
    val    False     False ,     True
    '''
    
    import math
    bool(None)      # False
    bool(0j)        # False
    bool()          # False
    bool({})        # False
    bool(math.nan)  # True
    

    2.ブール演算
    操作
    意味
    結果
    x or y
    xが偽であればyを返し,そうでなければxを返す
    0 or 2出力結果:2
    x and y
    xが偽であればxを返し,そうでなければyを返す.
    0 and 2出力結果:0
    not x
    xが偽の場合はTrueを返し、そうでない場合はFalseを返します.
    not 1出力結果:False
    3.比較
    操作
    意味
    結果
    <
    より厳密に小さい
    1<2出力結果:True
    <=
    以下
    1<=2出力結果:True
    >
    より厳密に大きい
    1>2出力結果:False
    >=
    以上
    1>=2出力結果:False
    ==
    に等しい
    1==2出力結果:False
    !=
    等しくない
    1 != 2出力結果:True
    is
    オブジェクトIDが同じかどうか
    a=b=1,a is b出力結果:True
    is not
    オブジェクトIDが異なるかどうか
    a=b=1,a is notb出力結果:False
    4.整数タイプのビット操作
    原号:第一位は符合(1はマイナス0がプラス)を表し、残りの位は値の逆符号:正数の逆符号は原号で、負数の逆符号はその原号の基礎の上で、記号の位は不変で、残りの各位は逆符号を取ります:正数の補符号は原号で、負数の補符号は逆符号の基礎の上で+1です
    [+1] = [00000001]  = [00000001]  = [00000001] 
    [-1] = [10000001]  = [11111110]  = [11111111] 
    

    操作
    意味
    結果
    x | y
    xとyの(補符号)ビットまたは(1が1であり、残りが0である)
    0 | 1 = 1,0 | -1 = -1
    x ^ y
    xとyの(符号化)ビット別または(2つの数が同じ結果は0であり、異なる結果は1である)
    0^1 = 1
    x & y
    xとyの(符号を補う)ビットと(0が0であり、残りは1である)
    0 & 1 = 0,0 & -1 = 0
    x << n
    x(補符号)左シフトnビット、右欠落補0
    1<<2=[100]補=4,−1<<2=[1111100]補=−4
    x >> n
    x(符号化)右にnビットシフトし、左に欠けている箇所に符号ビット(すなわち正数補正0、負数補正1)を補正する
    1>>2=0,-1>>2=[1111111]補=-1
    ~x
    x(補符号)ビット別逆取り
    ~1=[1111110]補=-2
    三、簡単な文
    1.条件文
    if     1:
            1……
    elif     2:
            2……
    elif     3:
            3……
    else:
            4……
    

    2.forサイクル
    for var in sequence:
           ……
       
    for var in sequence:
           1……
    else:
           2……
    

    forループはelse文を使用することができ、pythonではfor...elseはこのような意味を表し、forの中の文は普通の文と変わらず、elseの中の文はループが正常に実行された(すなわちforはbreakジャンプで中断されたものではない)場合に実行され、while...elseも同じである.
    3.whileサイクル
    while     :
            ……
    
    while     :
            1……
    else:
           2……
    

    4.break文
    break文はCと同様に,最近のforループまたはwhileループから飛び出すために用いられる.
    5.continue文
    continue文はCと同様で,次の反復を継続することを示す.
    6.pass文
    pass文は何もしません.文法的に文が必要ですが、プログラムが何もする必要がない場合に使用されます.通常、最小クラスを作成するために使用されます.
    四、関数式プログラミングツール
    1. filter()
    filter(function,sequence)が返すシーケンスはfunction(item)の結果が真の要素からなる.sequenceが文字列またはメタグループの場合、結果は同じタイプになります.そうでない場合、結果は常にリストになります.
    def f(x): return x > 0
    list(filter(f, range(-2,3)))               # [1, 2]
    

    2. map()
    map(function,sequence)は、シーケンス内の各要素に対してfunction(item)関数を呼び出し、結果のリストを返します.複数のシーケンスを転送できます.この場合、入力された関数にもシーケンス数と同じパラメータが必要であり、実行時には各シーケンスに対応する要素で関数が順次呼び出されます(あるシーケンスが他のシーケンスより短い場合はNoneで置き換えられます).
    def f(x, y): return x*2-y
    list(map(f, range(-2,3), range(1, 6)))     # [-5, -4, -3, -2, -1]
    

    3.lambda式
    Lambdaキーワードを使用して、小さな匿名関数を作成できます.構文:lambda[arg 1[,arg 2,...argn]]:expression
    list(filter(lambda x : x > 0, range(-2,3)))              # [1, 2]
    list(map(lambda x, y : x*2-y, range(-2,3), range(1, 6))) # [-5, -4, -3, -2, -1]
    

    4.付与文の特殊なテクニック
    #     
    x, y, z = 1, 2, 3
    x, y, z       # (1, 2, 3)
    x, y = y, x
    x, y, z       # (2, 1, 3)
    
    #     
    x = y = somefunction()
    #    
    y = somefunction()
    x = y
    

    5.収集パラメータ
    '''
              ,                  
    '''
    def print_params(*params):
        print params
    
    print_params('params')      # ('params',)
    print_params(1, 2, 3)       # (1, 2, 3)
    
    '''
             
    '''
    def print_params(title, *params):
        print title, params
        
    print_params(1, 2, 3)        # 1 (2, 3)
    
    '''
                ,                  ,            
    '''
    def print_params(title, *params1, **params2):
        print title, params1, params2
    
    print_params('params')       # params () {}
    print_params(1, 2, 3)        # 1 (2, 3) {}
    print_params('title', x = 1, y = 2, z = 3) # title () {'y': 2, 'x': 1, 'z': 3}
    
    '''
      
    '''
    def add(x, y):
        return x + y
    
    params = (1, 2)
    add(*params)                # 3
    
    def print_params(**params):
        print params['width'], params['height']
    
    params = {'width': 10, 'height': 20}
    print_params(**params)      # 10 20
    

    五、異常
    1.一部の内部建設異常
    クラス名
    説明
    Exception
    すべての例外のベースクラス
    AttributeError
    プロパティ参照または付与に失敗した場合に開始
    IOError
    存在しないファイル(他の状況を含む)を開こうとしたときに開始
    IndexError
    シーケンスに存在しないインデックスの使用時に開始
    KeyError
    マッピングに存在しないキーの使用時に開始
    NameError
    名前(変数)が見つからない場合に開始
    SyntaxError
    コードがエラー形式の場合に開始
    TypeError
    組み込み操作または関数がエラータイプのオブジェクトに適用されたときに開始
    ValueError
    組み込みオペレーションまたは関数は、正しいタイプのオブジェクトに適用されますが、そのオブジェクトが適切でない値を使用している場合に開始されます.
    ZeroDivisionError
    除算または型抜き操作の2番目のパラメータが0の場合に開始
    2.処理異常
    '''
            try/except  。
    try/except        try        ,    except            。
    try:
                #       
    except :
                #    try     'name'  ,name     (      )
    except  as :
                #      'name'  ,       msg
    else:
                #   try        ,else      
    '''
    
    '''
    try/finally                    。
                           ,            finally    。
    try:
        
    finally:
            #  try     
    '''
    
    try:
        a = 1/0
        print('right')
    except (ZeroDivisionError, IOError) as msg:
        print('error:', msg)
    else:
        print('else')
    finally:
        print('finally')
    #   :
    # error: division by zero
    # finally
    

    3.トリガ異常
    raise文を使用して、例外を自分でトリガーできます.
    def f( x ):
        if x < 1:
            raise Exception("low x!")
            #      ,           
    
    try:
        f(0)#     
    except Exception as msg:
        print('error:', msg)
    else:
        print('else')
    #   :error: low x!
    

    4.カスタム例外クラス
    新しい例外クラスを作成することで、独自の例外を持つことができます.例外クラスはExceptionクラスから継承されます.直接継承したり、間接的に継承したりできます.
    class MyError(Exception):
            def __init__(self, value):
                self.value = value
            def __str__(self):
                return repr(self.value)
    
    try:
       raise MyError(2*2)
    except MyError as e:
        print('error:', e.value)
    #   :error: 4
    
    raise MyError('oops!')
    #   :__main__.MyError: 'oops!'
    

    六、モジュール
    1.モジュールの導入
    import module
    from module import somefunction
    form module import *
    import module as name
    

    2. name
    モジュールでは、モジュールの名前(文字列)はグローバル変数nameの価値があります.
    import numpy
    numpy.__name__  # 'numpy'
    __name__        # '__main__'
    

    3.dir()関数
    内蔵関数dir()は、モジュールに定義されている名前を特定するために使用されます.順序付けされた文字列のリストを返します.
    dir() # ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
    

    七、その他の組み込み関数(未完、続き)