5 fitur Python yang tidak saya ketahui - tetapi sia-sia

Python tidak diragukan lagi dapat disebut bahasa yang telah mengalami pertumbuhan signifikan dalam dekade terakhir, bahasa yang telah terbukti kuat. Saya telah membuat banyak aplikasi Python, dari peta interaktif hingga blockchains . Python memiliki banyak fitur. Sangat sulit bagi pemula untuk memahami semua ini sekaligus.



Bahkan jika Anda seorang programmer yang beralih ke Python dari bahasa lain seperti C, atau jika Anda adalah seorang ilmuwan yang dulu bekerja di MATLAB, pemrograman Python menggunakan abstraksi tingkat tinggi jelas merupakan pengalaman yang sangat istimewa. Saya ingin berbicara tentang lima yang sangat penting, menurut pendapat saya, fitur-fitur Python yang sayangnya tidak saya ketahui sebelumnya.

1. Daftar inklusi - menulis kode ringkas


Banyak yang akan menyebut mekanisme Python seperti lambda , map dan filter rahasia yang harus dipelajari oleh setiap programmer pemula. Dan meskipun saya yakin bahwa semua ini patut diketahui, dalam sebagian besar situasi di mana alat ini dapat diterapkan, saya telah menemukan fleksibilitas yang tidak memadai dari alat ini. Akibatnya, mereka jauh dari berguna seperti kelihatannya.

Lambda adalah metode untuk membuat fungsi kecil, garis tunggal untuk penggunaan tunggal. Jika suatu fungsi dipanggil berkali-kali, itu menurunkan kinerja. Tetapi pada saat yang sama, fungsi map menerapkan fungsi ke semua elemen daftar, dan filter memilih dari set elemen tertentu subset yang sesuai dengan kondisi yang ditentukan oleh pengguna.

 add_func = lambda z: z ** 2 is_odd = lambda z: z%2 == 1 multiply = lambda x,y: x*y aList = list(range(10)) print(aList) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

Daftar inklusi (pemahaman daftar) adalah desain yang ringkas dan mudah digunakan untuk membuat daftar dari daftar lain menggunakan ekspresi dan kondisi yang fleksibel. Konstruksi ini digambarkan menggunakan tanda kurung siku. Mereka termasuk ekspresi atau fungsi yang berlaku untuk setiap elemen daftar hanya jika elemen itu memenuhi kondisi tertentu. Daftar inklusi dapat berupa struktur multi-level yang berisi blok bersarang. Ini memungkinkan Anda untuk memproses daftar bersarang, memberikan lebih banyak fleksibilitas daripada menggunakan map dan filter .

Berikut ini sintaks untuk penyertaan daftar:

 [ expression(x) for x in aList if optional_condition(x) ] 

Berikut ini sebuah contoh:

 print(list(map(add_func, aList))) print([x ** 2 for x in aList]) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] print(list(filter(is_odd, aList))) print([x for x in aList if x%2 == 1]) # [1, 3, 5, 7, 9] # [1, 3, 5, 7, 9] 

2. Bekerja dengan daftar - daftar bundar


Python memungkinkan Anda untuk menggunakan indeks negatif saat bekerja dengan daftar. Perbandingan berikut ini benar:

 aList[-1] == aList[len(aList)-1] 

Ini memungkinkan, misalnya, untuk mendapatkan elemen kedua dari akhir daftar menggunakan aList[-2] . Desain serupa lainnya dimungkinkan.

Selain itu, Anda bisa mendapatkan sepotong daftar:

 aList[start:end:step] 

Di sini, elemen awal daftar termasuk dalam irisan yang dihasilkan, dan elemen terakhir tidak termasuk di dalamnya. Misalkan daftar terlihat seperti ini:

 aList = [1, 2, 3, 4, 5, 6, 7, 8, 9] 

aList[2:5] akan terlihat seperti [2, 3, 4] . Selain itu, Anda dapat "membalik" daftar menggunakan perintah aList[::-1] . Dalam kasus kami, ini akan memberi [9, 8, 7, 6, 5, 4, 3, 2, 1] . Saya menemukan solusi ini untuk tugas "membalik" daftar sangat visual dan sukses.

Anda juga dapat membongkar daftar dengan menempatkan nilai yang disimpan di dalamnya ke dalam variabel yang terpisah. Atau - "mendekomposisi" nilainya menjadi variabel yang terpisah dan daftar baru menggunakan tanda bintang:

 a, b, c, d = aList[0:4] print(f'a = {a}, b = {b}, c = {c}, d = {d}') # a = 0, b = 1, c = 2, d = 3 a, *b, c, d = aList print(f'a = {a}, b = {b}, c = {c}, d = {d}') # a = 0, b = [1, 2, 3, 4, 5, 6, 7], c = 8, d = 9 

3. fungsi zip dan enumerate - membuat kuat untuk loop


Fungsi zip menciptakan iterator yang menggabungkan elemen dari beberapa daftar. Ini memungkinkan perayapan paralel daftar for loop dan penyortiran paralel. Anda dapat mengembalikan elemen gabungan ke keadaan normal menggunakan operator * .

Berikut adalah contoh bekerja dengan fungsi zip :

 numList = [0, 1, 2] engList = ['zero', 'one', 'two'] espList = ['cero', 'uno', 'dos'] print(list(zip(numList, engList, espList))) # [(0, 'zero', 'cero'), (1, 'one', 'uno'), (2, 'two', 'dos')] for num, eng, esp in zip(numList, engList, espList):    print(f'{num} is {eng} in English and {esp} in Spanish.') # 0 is zero in English and cero in Spanish. # 1 is one in English and uno in Spanish. # 2 is two in English and dos in Spanish. 

Namun, inilah cara mengembalikan daftar ke keadaan normal:

 Eng = list(zip(engList, espList, numList)) Eng.sort() #   engList a, b, c = zip(*Eng) print(a) print(b) print(c) # ('one', 'two', 'zero') # ('uno', 'dos', 'cero') # (1, 2, 0) 

Fungsi enumerate , pada pandangan pertama, mungkin terlihat sangat rumit, tetapi jika Anda mengatasinya, ternyata itu bisa berguna dalam banyak kasus. Ini adalah penghitung otomatis yang sering digunakan for loop. Selain itu, dalam siklus seperti itu tidak perlu untuk membuat dan menambah variabel penghitung menggunakan konstruksi seperti counter = 0 dan counter += 1 .

Fungsi zip dan enumerate adalah dua alat paling kuat yang digunakan dalam membangun loop:

 upperCase = ['A', 'B', 'C', 'D', 'E', 'F'] lowerCase = ['a', 'b', 'c', 'd', 'e', 'f'] for i, (upper, lower) in enumerate(zip(upperCase, lowerCase), 1):    print(f'{i}: {upper} and {lower}.') # 1: A and a. # 2: B and b. # 3: C and c. # 4: D and d. # 5: E and e. # 6: F and f. 

4. Generator - penggunaan memori yang efisien


Generator digunakan dalam kasus-kasus ketika diperlukan untuk melakukan perhitungan tertentu yang mengarah pada tampilan serangkaian hasil, tetapi pada saat yang sama perlu untuk menghindari alokasi memori simultan untuk menyimpan semua hasil tersebut. Dengan kata lain, generator memberikan nilai-nilai tertentu, seperti yang mereka katakan, "on the fly". Namun, mereka tidak menyimpan dalam memori nilai-nilai yang sebelumnya ditemukan oleh mereka. Akibatnya, memori digunakan hemat.

Generator sering digunakan untuk membaca file besar atau untuk membuat urutan tak terbatas menggunakan kata kunci yield . Saya sering merasa cocok untuk menggunakannya dalam proyek penelitian saya.

 def gen(n):  #     ,   >= n    while True:        yield n        n += 1       G = gen(3)   #   3 print(next(G)) # 3 print(next(G)) # 4 print(next(G)) # 5 print(next(G)) # 6 

5. Lingkungan virtual - isolasi kode


Jika Anda hanya dapat memilih satu ide dari artikel ini yang dapat Anda ingat, maka saya akan menyarankan Anda satu yang akan kita bicarakan di bagian ini. Kita berbicara tentang lingkungan virtual (lingkungan virtual).

Aplikasi python sering menggunakan banyak paket berbeda. Mereka diciptakan oleh pengembang yang berbeda, mereka berbeda dalam set dependensi yang kompleks. Dalam aplikasi tertentu, versi tertentu dari perpustakaan tertentu dapat digunakan. Namun, versi lain untuk aplikasi semacam itu tidak akan berfungsi. Tetapi bagaimana jika beberapa aplikasi menggunakan versi berbeda dari perpustakaan yang sama? Ini adalah pertanyaan yang sulit yang membawa kita pada gagasan bahwa tidak ada lingkungan universal, paket-paket yang diinstal di dalamnya sangat cocok untuk semua aplikasi. Jawaban untuk pertanyaan ini dapat disebut penggunaan lingkungan virtual.

Untuk membuat lingkungan virtual yang terisolasi satu sama lain, Anda dapat melakukan ini:

 conda create -n venv pip python=3.7 #   python source activate venv ... source deactivate 

Ringkasan


Pada artikel ini, kami telah membahas 5 fitur Python yang berguna. Yaitu, itu tentang daftar inklusi, tentang daftar siklik, tentang fungsi zip dan enumerate , tentang generator dan lingkungan virtual. Kami harap fitur ini berguna.

Pembaca yang budiman! Jika Anda bisa memberi tahu programmer pemula hanya satu fitur Python, apa yang akan Anda pilih?

Source: https://habr.com/ru/post/id482458/


All Articles