記事のディレクトリ
序文
一般的に使用されるPythonのいくつかの高レベルの使用法を説明および整理します
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
注:私はまだそれを終えていません、私は忙しいです、戦いを更新し続けるために時間をかけてください...