ホームページ  >  記事  >  バックエンド開発  >  Python の隠されたトリックとは何ですか?

Python の隠されたトリックとは何ですか?

王林
王林転載
2023-04-24 11:16:07825ブラウズ

1. ... オブジェクト

はい、正しくお読みいただければ、「...」です。

Python では... という名前のオブジェクトを表します。省略記号。公式の説明によると、これは通常、空の関数のプレースホルダーとして使用したり、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:
...: {}[&#39;lala&#39;]
...: except KeyError:
...: print("Key is missing")
...: else:
...: print("Else here")
...:
Key is missing

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

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。