[人工知能入門] Python 標準ライブラリ - タイピング (型アノテーション)、アサート アサーション、@property デコレータとセッター デコレータ、*args と **kwargs、Python クラスの組み込みメソッド __str_

[人工知能入門] Python 標準ライブラリ - タイピング (型アノテーション)、アサート アサーション、@property デコレータとセッター デコレータ、*args と **kwargs、Python クラスの組み込みメソッド __str__


1. タイピングの概要

  • ご存知のとおり、Python は型指定が弱い言語です。ほとんどの場合、関数のパラメーターの型や戻り値の型を知ることは困難です。これにより、関数がどのパラメーターを渡す必要があるか、関数が渡した後にどのような結果が返されるかを忘れてしまう可能性があります。タイピング モジュールはこの問題をうまく解決できます。
  • 入力の主な機能は次のとおりです。
  1. 開発ドキュメントに追加説明を記載しておくと、利用時に渡されるパラメータの種類や返されるパラメータの種類を理解するのに便利です。
  2. 型チェックにより、実行時のパラメータと戻り値の型の不一致が防止されます。モジュールを追加してもプログラムの実行には影響せず、正式なエラーは報告されません。Pycharm は入力をサポートしており、エラーをチェックすると黄色の警告が表示されます。
  • 文法:
def 函数名(参数名: 数据类型) -> 返回值类型:
    pass

变量名: 数据类型 = 变量值
  • 一般的なラベルの種類:
  • Union: Union[X, Y] は、変数 (パラメーター) が X 型または Y 型のいずれかであることを意味します。
  • オプション: Optional[X] は Union[X, None] と同等です。つまり、デフォルトで変数 (パラメーター) を None にすることができます。
  • タプル: 例: person: Tuple[str, int, float] = ('Mike', 22, 1.75)。person がタプルであり、その内部要素の型がそれぞれ str、int、float であることを示します。
  • リスト: 例: var: List[int or float] = [2, 3.5]、var がリストであり、その内部要素の型が int または float であることを示します; var: List[List[int]] = [[ 1, 2] 、 [2, 3]] は、明らかに組み合わせて使用​​されているだけです。
  • Dict: 例: dic: Dict[str, int]、dic が str 型のキーと int 型の値を持つ辞書であることを示します。
  • Sequence: 場合によっては、変数またはパラメーターがリスト型であるかタプル型であるかを厳密に区別する必要はありません。この場合、 Sequence と呼ばれる、より一般的な型を使用できます。その使用方法は List に似ています。

2. アサーションのアサーション

  • アサートは通常、コードのデバッグで後続のコードの正しさを判断するために使用されます。条件が満たされた場合 (正しい)、プログラムは自動的に逆方向に実行されます。条件が満たされなかった場合 (エラー)、現在のプログラムは中断され、 AssertionError を生成します。
  • 例:
a = -1
assert a < 0
assert a > 0

ここに画像の説明を挿入します

3. @property デコレータと setter デコレータ

  • 例と紹介:
  • Python は@property装饰器、setter装饰器属性として使用できる装飾されたメソッドを提供します
  • 例:内部プロパティのExam直接操作を回避し、提供されたメソッドを通じてプロパティの間接的な制御を実現するためにクラスを定義します。これはカプセル化の役割を果たし、外部に公開したくない一部のプロパティを隠します。 , ユーザーが操作するためのメソッドのみを提供しており、メソッド内でパラメータの合理性などを確認することができます。_scoreproperty装饰器、setter装饰器
class Exam(object):
    def __init__(self, score):
        self._score = score
 
    @property
    def score(self): # 属性访问
        return self._score

    @score.setter
    def score(self, val): # 属性赋值
        if val < 0:
            self._score = 0
        elif val > 100:
            self._score = 100
        else:
            self._score = val
 
if __name__ == '__main__':
	e = Exam(60)
	print(e.score)
 
	e.score = 90
	print(e.score)
 
	e.score = 200
	print(e.score)

4. *args と **kwargs

  • どちらも Python の可変個引数パラメーターです。
  • args合計はkwargs自由に変更でき、焦点は*合計にあることに注意してください**
  • *args : 在传入的参数个数未知,且不需要知道参数名称时使用,它将参数保存成一个元组,元组名为args 。
  • **kwargs : 在传入参数个数未知,但需要知道参数的名称时使用,它将数据保存成一个字典,字典名为kwargs 。
  • 例:
def args_test(data1, *args, **kwargs):
    print('data1: ',data1)
    print('args:', args)
    print('type_of_args: ', type(args))
    print('kwargs: ' , kwargs)
    print('type_of_kwargs:' ,type(kwargs))
    
args_test(1,2,3,4,5,k1=6,k2=7,k3=8)

ここに画像の説明を挿入します

5. Python クラスの組み込みメソッド __str__

  • 機能: print 関数の出力時に使用されるオブジェクトの説明情報を返します。
  • 呼び出しタイミング: print(对象) print オブジェクトを使用する場合、自動的に呼び出されます。
  • 知らせ:
  1. __str__() メソッドが定義されていない場合、オブジェクトの参照アドレスがデフォルトで出力されます。これは、メモリ内のオブジェクト変数の記憶領域のアドレスです。
  2. __str__() メソッドが定義されている場合、出力されるのはメソッドの戻り値です。
  3. __str__ メソッドは文字列データを返す必要があります。
  • 例:
class str_test():
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return 'name:%s'%self.name

name = str_test('Tom')
print(name)

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_44928822/article/details/131290633