ホームページ > バックエンド開発 > Python チュートリアル > おそらく聞いたこともない Python の 5 つの隠されたトリック

おそらく聞いたこともない Python の 5 つの隠されたトリック

PHPz
リリース: 2023-04-13 14:31:03
転載
1609 人が閲覧しました

おそらく聞いたこともない Python の 5 つの隠されたトリック

人生は短いので、早く Python を学びましょう

1. ... オブジェクト

はい、読んで間違いありません。それは「...」です。 "

Python では... Ellipsis という名前のオブジェクトを表します。公式の説明によると、これは通常、空の関数のプレースホルダーとして使用したり、Numpy でのスライス操作に使用したりできる特別な値です。

例:

def my_awesome_function():
...
ログイン後にコピー

は次と同等です:

def my_awesome_function():
Ellipsis
ログイン後にコピー

もちろん、パスまたは文字列をプレースホルダとして使用することもできます:

def my_awesome_function():
pass
ログイン後にコピー
def my_awesome_function():
"An empty, but also awesome function"
ログイン後にコピー

最後の効果は同じです。

次は、Numpy でオブジェクトがどのように機能するかについて話しましょう。3x3x3 行列配列を作成し、すべての最も内側の行列の 2 番目の列を取得します:

>>> import numpy as np
>>> array = np.arange(27).reshape(3, 3, 3)
>>> array
array([[[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8]],
 [[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17]],
 [[18, 19, 20],
[21, 22, 23],
[24, 25, 26]]])
ログイン後にコピー

2 番目の列を取得するにはトップレベル行列の従来の方法は次のようになります:

>>> array[:, :, 1]
array([[ 1, 4, 7],
 [10, 13, 16],
 [19, 22, 25]])
ログイン後にコピー

... オブジェクトを使用できる場合は、次のようになります:

>>> array[..., 1]
array([[ 1, 4, 7],
 [10, 13, 16],
 [19, 22, 25]])
ログイン後にコピー

ただし、次のことに注意してください。オブジェクトは Numpy でのみ動作し、Python の組み込み配列では動作しません。

2. 反復オブジェクトの解凍

反復オブジェクトの解凍は非常に便利な機能です:

>>> a, *b, c = range(1, 11)
>>> a
1
>>> c
10
>>> b
[2, 3, 4, 5, 6, 7, 8, 9]
ログイン後にコピー

または:

>>> a, b, c = range(3)
>>> a
0
>>> b
1
>>> c
2
ログイン後にコピー

同様に、次のように記述する代わりに、このコード:

>>> lst = [1]
>>> a = lst[0]
>>> a
1
>>> (a, ) = lst
>>> a
1
ログイン後にコピー

繰り返しオブジェクトを解凍するような、より洗練された代入操作を実行することもできます:

>>> lst = [1]
>>> [a] = lst
>>> a
1
ログイン後にコピー

これは少し愚かに思えますが、私の個人的な意見では、これは前のもの 文章はよりエレガントです。

3. 拡張の技術

配列を拡張するには、たとえば次のようなさまざまな奇妙な方法があります:

>>> l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> flattened = [elem for sublist in l for elem in sublist]
>>> flattened
[1, 2, 3, 4, 5, 6, 7, 8, 9]
ログイン後にコピー

reduce と lambda についてある程度の理解がある場合、それは次のとおりです。より洗練された方法を使用することをお勧めします:

>>> from functools import reduce
>>> reduce(lambda x,y: x+y, l)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
ログイン後にコピー

reduce と lambda を組み合わせると、l 配列内の各サブ配列に対してスプライシング操作を実行できます。

もちろん、もっと魔法のような方法があります:

>>> sum(l, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> # 其实相当于 [] + [1, 2, 3] + [4, 5, 6] + [7, 8, 9]
ログイン後にコピー

はい、2 次元配列に対して合計演算を実行することで、2 次元配列内の各要素を「加算」できます。つなぎ合わせてください。

同様に、3 桁の配列に対して合計演算を行うと、2 次元の配列に変換できます。このとき、2 次元の配列に対して合計演算を行うと、配列の場合は、1 次元配列に展開できます。

この手法は優れていますが、可読性が低すぎるためお勧めしません。

4. Underscore_ 変数

Python インタープリター、IPython、または Django コンソールで式を実行するたびに、Python は出力値を _ 変数にバインドします:

>>> nums = [1, 3, 7]
>>> sum(nums)
11
>>> _
11
>>>
ログイン後にコピー

これは変数であるため、いつでも上書きすることも、通常の変数のように操作することもできます:

>>> 9 + _
20
>>> a = _
>>> a
20
ログイン後にコピー

5. else の複数の使用法

多くの人は知りませんが、else は使用できます。一般的な if else に加えて、ループや例外処理でも使用できます。

ループ

特定のロジックがループ内で処理されるかどうかを判断する必要がある場合、通常はこれが行われます:

found = False
a = 0
while a < 10:
if a == 12:
found = True
a += 1
if not found:
print("a was never found")
ログイン後にコピー

else が導入されている場合は、使用するものが 1 つ少なくなります。変数:

a = 0
while a < 10:
if a == 12:
break
a += 1
else:
print("a was never found")
ログイン後にコピー

例外処理

try...Exception... で else を使用して、例外がキャッチされなかった場合のロジックを記述することができます。ちなみに、プログラムで例外が発生しない場合は、else 分岐が実行されます。

In [13]: try:
...: {}['lala']
...: except KeyError:
...: print("Key is missing")
...: else:
...: print("Else here")
...:
Key is missing
ログイン後にコピー

例外処理を頻繁に行う場合は、この手法が非常に便利であることがわかるでしょう。

以上がおそらく聞いたこともない Python の 5 つの隠されたトリックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:51cto.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート