Lima helah tersembunyi dalam Python yang mungkin anda tidak pernah dengar

PHPz
Lepaskan: 2023-04-13 14:31:03
ke hadapan
1584 orang telah melayarinya

Lima helah tersembunyi dalam Python yang mungkin anda tidak pernah dengar

Hidup ini singkat, belajar Python dengan cepat

1 ... Objek

Ya, anda membacanya dengan betul, ia adalah "... "

Dalam Python... mewakili objek bernama Ellipsis. Menurut penerangan rasmi, ia adalah nilai istimewa yang biasanya boleh digunakan sebagai pemegang tempat untuk fungsi kosong atau digunakan untuk operasi menghiris dalam Numpy.

Contohnya:

def my_awesome_function():
...
Salin selepas log masuk

bersamaan dengan:

def my_awesome_function():
Ellipsis
Salin selepas log masuk

Sudah tentu, anda juga boleh menggunakan pas atau rentetan sebagai pemegang tempat:

def my_awesome_function():
pass
Salin selepas log masuk
def my_awesome_function():
"An empty, but also awesome function"
Salin selepas log masuk

Kesan akhir mereka adalah sama.

Mari kita bincangkan bagaimana... objek memainkan peranan dalam Numpy Cipta tatasusunan matriks 3x3x3, dan kemudian dapatkan lajur kedua bagi semua matriks paling dalam:

>>> 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]]])
Salin selepas log masuk

Untuk mendapatkan. lajur kedua matriks peringkat atas, kaedah tradisional mungkin seperti ini:

>>> array[:, :, 1]
array([[ 1, 4, 7],
 [10, 13, 16],
 [19, 22, 25]])
Salin selepas log masuk

Jika anda akan menggunakan... objek, ia akan menjadi seperti ini:

>>> array[..., 1]
array([[ 1, 4, 7],
 [10, 13, 16],
 [19, 22, 25]])
Salin selepas log masuk

Perhatikan, walau bagaimanapun, bahawa ... objek hanya tersedia dalam Numpy, bukan tatasusunan terbina dalam Python.

2. Penyahmampatan objek lelaran

Penyahmampatan objek lelaran ialah ciri yang sangat mudah:

>>> a, *b, c = range(1, 11)
>>> a
1
>>> c
10
>>> b
[2, 3, 4, 5, 6, 7, 8, 9]
Salin selepas log masuk

atau:

>>> a, b, c = range(3)
>>> a
0
>>> b
1
>>> c
2
Salin selepas log masuk

Begitu juga , bukannya menulis kod seperti ini:

>>> lst = [1]
>>> a = lst[0]
>>> a
1
>>> (a, ) = lst
>>> a
1
Salin selepas log masuk

Anda boleh melakukan operasi tugasan yang lebih elegan seperti membongkar objek boleh lelar:

>>> lst = [1]
>>> [a] = lst
>>> a
1
Salin selepas log masuk

Walaupun ini kelihatan agak bodoh, tetapi ini hanya saya Secara peribadi, ia lebih elegan daripada cara penulisan sebelum ini.

3. Seni pengembangan

Terdapat pelbagai cara pelik untuk mengembangkan tatasusunan, seperti:

>>> 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]
Salin selepas log masuk

Jika anda mempunyai pemahaman tertentu tentang reduce dan lambda, adalah disyorkan untuk menggunakan Cara yang lebih elegan:

>>> from functools import reduce
>>> reduce(lambda x,y: x+y, l)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
Salin selepas log masuk

Dengan menggabungkan pengurangan dan lambda, anda boleh melakukan operasi penyambungan pada setiap sub-tatasusunan dalam tatasusunan l.

Sudah tentu, terdapat cara yang lebih ajaib:

>>> sum(l, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> # 其实相当于 [] + [1, 2, 3] + [4, 5, 6] + [7, 8, 9]
Salin selepas log masuk

Ya, dengan melakukan operasi jumlah pada tatasusunan dua dimensi, setiap elemen dalam tatasusunan dua dimensi boleh "ditambah " "Ia adalah mustahil untuk bersatu.

Dengan cara yang sama, jika anda melakukan operasi jumlah pada tatasusunan tiga dimensi, ia boleh diubah menjadi tatasusunan dua dimensi Pada masa ini, jika anda melakukan operasi jumlah pada tatasusunan dua dimensi tatasusunan, ia boleh dikembangkan menjadi tatasusunan satu dimensi.

Walaupun teknik ini hebat, saya tidak mengesyorkannya kerana kebolehbacaannya sangat lemah.

4. Underscore _ variable

Setiap kali anda menjalankan ungkapan dalam penterjemah Python, IPython atau Django Console, Python akan mengikat nilai output ke dalam pembolehubah _:

>>> nums = [1, 3, 7]
>>> sum(nums)
11
>>> _
11
>>>
Salin selepas log masuk

Oleh kerana ia adalah pemboleh ubah, anda sentiasa boleh menulis semula, atau memanipulasi ia seperti pemboleh ubah biasa:

>>> 9 + _
20
>>> a = _
>>> a
20
Salin selepas log masuk

5. digunakan di banyak tempat Sebagai tambahan kepada if else yang biasa, kita juga boleh menggunakannya dalam pengendalian gelung dan pengecualian.

Gelung

Jika anda perlu menentukan sama ada logik tertentu diproses dalam gelung, ini biasanya dilakukan:

Jika lain diperkenalkan, kita boleh menggunakan kurang satu Pembolehubah:
found = False
a = 0
while a < 10:
if a == 12:
found = True
a += 1
if not found:
print("a was never found")
Salin selepas log masuk

Pengendalian pengecualian
a = 0
while a < 10:
if a == 12:
break
a += 1
else:
print("a was never found")
Salin selepas log masuk

Kita boleh menggunakan lain dalam percubaan... kecuali... untuk menulis logik apabila pengecualian tidak ditangkap:

Dengan cara ini, jika program tidak mempunyai pengecualian, ia akan mengambil bahagian lain:
In [13]: try:
...: {}['lala']
...: except KeyError:
...: print("Key is missing")
...: else:
...: print("Else here")
...:
Key is missing
Salin selepas log masuk

Jika anda sering melakukan pengendalian pengecualian, anda akan tahu bahawa teknik ini agak mudah.
In [14]: try:
...: {'lala': 'bla'}['lala']
...: except KeyError:
...: print("Key is missing")
...: else:
...: print("Else here")
...:
Else here
Salin selepas log masuk

Atas ialah kandungan terperinci Lima helah tersembunyi dalam Python yang mungkin anda tidak pernah dengar. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:51cto.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!