Python における 5 つの一般的ではない不可解な使用法のまとめ

1 はじめに

私は 5 年間 (2017 年から) Python でプログラミングをしてきましたが、人間の直感的な理解とは実際に異なる、Python の次のような珍しい使用法を最近まで知りませんでした。

さっそく始めましょう!

2. クラス内のプライベート変数は真のプライベート変数ではありません

次のように、例に直接進みましょう。

class Dog():
    def __init__(self, name):
        self.__name = name
    @property
    def name(self):
        return self.__name

このDogクラスでは、__nameプロパティにはgetterメソッドがありますが、setterメソッドはありません。一般的な理解によれば、ユーザーはメンバー関数を通じてプロパティの値をname()読み取ることのみができるはずですが、オブジェクトの新しい名前を直接設定することはできません。しかし、そのプライベート変数はそれほどプライベートではありません。__nameDog

dog = Dog("rocky")
print(dog.__dict__)   # {
    
    '_Dog__name': 'rocky'}

上に示したように、__dict__クラスのプロパティにはオブジェクトのすべてのプロパティが含まれています。プロパティを使用すると__dict__、どのプライベート変数やプロパティにアクセスすべきかを制御することもできます。
サンプルは次のとおりです。

dog.__dict__["_Dog__name"] = "fifi"
print(dog.name)
# fifi 

3. Python での Infinity の使用法

無限を表すためにキーを使用しますinf。コードは次のとおりです。

a = float("inf")
b = float("-inf")
print(a, b)   # inf -inf

Python では無限に大きい (そして無限に小さい) 値を作成できます。表示可能な各値は、次のように inf より小さく、-inf より大きくなります。

print(10**100000 > float("inf"))      # False
print(-(10**10000) < float("-inf"))   # False

4. クラスをデコレータとして使用できます

誰かに挨拶する簡単な関数があるとします。

def hello(name):
    return "hello " + name
print(hello("fifi"))    # hello fifi

次のようにデコレータ クラスを作成し、hello 関数を定義するときにそれを使用しましょう。

class append():
    def __init__(self, char):
        self.char = char
    def __call__(self, function):
        def inner(*args):
            return function(*args) + self.char
        return inner
@append("!")
def hello(name):
    return "hello " + name
print(hello("fifi"))    # hello fifi!

関数上でデコレータを複数回使用することもできます。

@append("?")
@append("!")
def hello(name):
    return "hello " + name
print(hello("fifi"))    # hello fifi!?

5. 変数名に漢字が使用されている

ははは、Python では中国語の文字も変数名として使用できます。次に例を示します。

= 4= 5
print(+)    # 9

この機能を Python 言語で使用したことはありませんが、使用した場合はお知らせください。ただし、あまり役立つ知識ではありません(本当に同僚を困らせたくない場合を除く)。

6. eval() を使用して文字列内の Python コードを実行します

Python組み込み関数を使用して、Python コードを文字列として実行できますeval()。コードは次のとおりです。

x = 4
y = eval("x + 10")
print(y)    # 14

より複雑な例は次のとおりです。

string = "print('hello world')"
eval(string)  # prints hello world
string = "1+2+3"
eval(string)  # returns 6

7. まとめ

私は最近まで Python におけるこれらの珍しい使用法について知りませんでした (おそらく知っているはずですが、知っています)。この記事があなたのお役に立てれば幸いです。

参考

おすすめ

転載: blog.csdn.net/sgzqc/article/details/128980638