Rumah > Artikel > pembangunan bahagian belakang > Apakah helah tersembunyi Python?
Ya, anda membacanya dengan betul, ia adalah "..."
Dalam Python... mewakili Objek bernama Elipsis. 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(): ...
bersamaan dengan:
def my_awesome_function(): Ellipsis
Sudah tentu, anda juga boleh menggunakan pas atau rentetan sebagai pemegang tempat:
def my_awesome_function(): pass
def my_awesome_function(): "An empty, but also awesome function"
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]]])
Untuk mendapatkan. lajur kedua matriks peringkat atas, kaedah tradisional mungkin seperti ini:
>>> array[:, :, 1] array([[ 1, 4, 7], [10, 13, 16], [19, 22, 25]])
Jika anda akan menggunakan... objek, ia akan menjadi seperti ini:
>>> array[..., 1] array([[ 1, 4, 7], [10, 13, 16], [19, 22, 25]])
Perhatikan, walau bagaimanapun, bahawa ... objek hanya berfungsi dengan Numpy, bukan tatasusunan terbina dalam Python.
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]
atau:
>>> a, b, c = range(3) >>> a 0 >>> b 1 >>> c 2
Begitu juga , bukannya menulis kod seperti ini:
>>> lst = [1] >>> a = lst[0] >>> a 1 >>> (a, ) = lst >>> a 1
Anda boleh melakukan operasi tugasan yang lebih elegan seperti membongkar objek boleh lelar:
>>> lst = [1] >>> [a] = lst >>> a 1
Walaupun ini kelihatan agak bodoh, tetapi ini hanya saya Secara peribadi, ia lebih elegan daripada cara penulisan sebelum ini.
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]
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]
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]
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.
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 >>>
Oleh kerana ia adalah pembolehubah, anda boleh mengatasinya pada bila -bila masa, atau mengendalikannya seperti pembolehubah biasa:
>>> 9 + _ 20 >>> a = _ >>> a 20
Gelung
found = False a = 0 while a < 10: if a == 12: found = True a += 1 if not found: print("a was never found")Pengendalian pengecualian
a = 0 while a < 10: if a == 12: break a += 1 else: print("a was never found")
In [13]: try: ...: {}['lala'] ...: except KeyError: ...: print("Key is missing") ...: else: ...: print("Else here") ...: Key is missing
Atas ialah kandungan terperinci Apakah helah tersembunyi Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!