『Python』 python基本チュートリアル(3)-高度なメソッドの使用


序文

一般的に使用されるPythonのいくつかの高レベルの使用法を説明および整理します

  1. 『Python』 python基本チュートリアル(1)-基本的なデータ構造
  2. 『Python』 python基本チュートリアル(2)-基本的な知識の仕上げ

1つ、デコレータプロパティ

Pythonでの属性とメソッドのアクセス許可の問題。属性をプライベートとして設定することはお勧めしませんが、属性が外部に直接公開されている場合にも問題があります。たとえば、属性が外部に公開されているかどうかを確認する方法がありません。属性に割り当てられた値は有効です。以前の提案では、プロパティ名を1つのアンダースコアで始めることでした。このように、プロパティが保護されていることを意味します。プロパティに直接アクセスすることはお勧めしません。プロパティにアクセスする場合は、プロパティのゲッターを使用できます。 (アクセサ)およびセッター(修飾子))対応する操作を実行する方法。これを実行したい場合は、@ propertyラッパーを使用してgetterメソッドとsetterメソッドをラップし、プロパティへのアクセスを安全かつ便利にすることを検討できます。簡単に言うと、デコレータの役割は、既存のオブジェクトに関数を追加することです。コードは次のとおりです。

class Person(object):
def __init__(self, name, age):
    self._name = name
    self._age = age
 
# 访问器 - getter方法
@property
def name(self):
    return self._name

# 访问器 - getter方法
@property
def age(self):
    return self._age

# 修改器 - setter方法
@age.setter
def age(self, age):
    self._age = age

def play(self):
    if self._age <= 16:
        print('%s正在玩飞行棋.' % self._name)
    else:
        print('%s正在玩斗地主.' % self._name)

def main( ):
    person = Person('王大锤', 12)
    person.play( )
    person.age = 22
    person.play( )
    # person.name = '白元芳'  # AttributeError: can't set attribute

if __name__ == '__main__':
    main( )

第二に、デコレータpysnooper

コードテストに非常に便利なツール

# 安装(两种方式)
pip install pysnooper
conda install -c conda-forge pysnooper

このコードの前に@ pysnooper.snoop()が追加されているコードをテストします。

# Example:
import numpy as np
import pysnooper

@pysnooper.snoop()
def one(number):
    mat = []
    while number:
        mat.append(np.random.normal(0, 1))
        number -= 1
    return mat

one(3)

単一のブロックの効果をテストすることもできます。具体的には、https//github.com/cool-RR/PySnooperを使用します

3つ、イテレータとジェネレータ

  • ジェネレーター:ループ中に計算するメカニズム
  • イテレータ(イテレータ):next()関数を呼び出してオブジェクトを返し、次の値に進むことができます

4、マップ機能

map(function, iterable, ...)

  • map()は、提供された関数に従って指定されたシーケンスをマップします。関数を反復可能なシーケンスに適用し、関数によって出力されたシーケンスを返すことができます。
  • 最初のパラメータ関数は、パラメータシーケンスの各要素を使用して関数関数を呼び出し、各関数関数の戻り値を含む新しいリストを返します。
# 示例
mylist = list(map(upper, ['sentence', 'fragment']))
list_of_ints = list(map(int, "1234567"))

5、機能を減らす

reduce()機能map()さまざまな機能は、その入力の機能は2つの引数が必要です。reduce()このプロセスでは、最初に入力関数を使用してシーケンスの最初の2つの要素を操作し、次に得られた結果を最後の要素まで3番目の要素で操作します。

6、フィルター機能

filter() この関数の機能は、主に入力関数を介して反復可能シーケンスをフィルター処理し、フィルター条件を満たす反復可能シーケンスを返すことです。

def is_odd(n):
	return n % 2 == 0
filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
# return: [2, 4, 6, 10]

7つのソートされた関数

  • sorted()この関数は、反復可能なシーケンスのソートを完了することができます。
  • また、リスト自体にはsort()さまざまな関数が付属しており、sorted()関数は新しいリストを返します。
  • sorted()関数はキーワードkey渡して、ソート基準、reverse逆かどうかを表すパラメーターを指定できます
sorted([3, 5, -87, 0, -21], key=abs, reverse=True)	# 绝对值排序,并且为反序
# return: [-87, -21, 5, 3, 0]

8つのラムダ無名関数

一部の単純な論理関数ではlambda、無名関数式を関数定義に置き換えて使用でき、定義された関数の名前などを保存して、コードの可読性を簡素化します。

add = lambda x, y: x + y
add(1, 2)
# return: 3

注:私はまだそれを終えていません、私は忙しいです、戦いを更新し続けるために時間をかけてください...

おすすめ

転載: blog.csdn.net/libo1004/article/details/111029660
おすすめ