Kami terus menerbitkan terjemahan dari serangkaian artikel tentang persamaan dan perbedaan antara kedua bahasa.
Hari ini kita akan berbicara tentang serialisasi kamus, JSON, pelanggan tetap, kesalahan, dan pengecualian.
Artikel lain dalam seri ini:
- Bagian pertama adalah konversi tipe, operator ternary, akses ke properti dengan nama properti, kamus, daftar, string, rangkaian string.
- Artikel ini
- Bagian Tiga : Python dan JS modern: pola string (f-string), daftar membongkar, fungsi lambda, daftar iterasi, generator, set.
- Bagian keempat adalah argumen fungsi, membuat dan bekerja dengan kelas, pewarisan, pengambil setter, dan properti kelas.
Json
Saat bekerja dengan banyak API, akan lebih mudah untuk membuat serialisasi objek menjadi objek JSON untuk kemudahan transfer dan penguraian selanjutnya.
Python memiliki modul json standar:
import json json_data = json.dumps(dictionary, indent=4) dictionary = json.loads(json_data)
Di sini kita memformat JSON dengan lekukan 4 spasi.
Di JS, ada objek JSON dengan metode untuk membuat dan mem-parsing string JSON:
json_data = JSON.stringify(dictionary, null, 4); dictionary = JSON.parse(json_data);
Mengurai string dengan pelanggan tetap
Pada artikel terakhir, kami menggabungkan beberapa baris menjadi satu. Tetapi bagaimana cara membagi satu string panjang menjadi beberapa, terutama jika separator bukan karakter tunggal seperti koma, tetapi seluruh jajaran opsi yang berbeda? Di sinilah ekspresi reguler dan metode split()
datang untuk menyelamatkan.
Dalam Python, metode split()
mengacu pada pola ekspresi reguler. Berikut ini cara membagi string teks menjadi kalimat tanda baca:
import re
Di JS, metode split()
merujuk ke string:
Pencarian teratur berdasarkan pola
Ekspresi reguler sering digunakan untuk memvalidasi data dari formulir.
Misalnya, untuk memverifikasi kebenaran alamat email yang dimasukkan, itu harus dibandingkan dengan pola ekspresi reguler.
Penulis terjemahan dalam kursusbahwa memeriksa alamat dengan pelanggan tetap adalah tugas yang tidak sepele dan sedikit lebih rumit daripada metode yang diberikan dalam artikel ini
Dengan Python, tampilannya akan seperti ini:
import re
Jika bagian teks cocok dengan templat, maka menggunakan metode group()
mengembalikan seluruh bagian di mana Anda dapat memilih masing-masing grup yang ditentukan dalam templat.
0 - seluruh baris (sub) yang cocok, 1 - grup pertama, 2 - yang kedua, dll.
Jika tidak ditemukan kecocokan, objek dengan tipe None
akan dikembalikan.
Di JS, ada metode string yang match()
yang mengembalikan bagian yang cocok dari string atau null
.
Di JS, objek yang cocok terlihat seperti array. Elemen dengan indeks [0] adalah seluruh (sub) baris yang cocok, elemen 1 adalah grup pertama, ke-2 adalah yang kedua, dll. - semua sesuai dengan grup yang ditentukan dalam templat.
Terkadang, selain mencari, diperlukan untuk menentukan posisi sampel dalam teks. Ini dapat dilakukan dengan menggunakan metode search()
.
Dalam Python, metode ini merujuk pada ekspresi reguler dan mengembalikan objek yang cocok. Objek yang cocok ini memiliki metode start()
yang mengembalikan awal terjadinya substring ini di baris utama:
text = 'Say hi at hi@example.com' first_match = pattern.search(text) if first_match: start = first_match.start()
Metode JS memiliki metode search()
string search()
mengembalikan indeks awal substring. Atau -1
jika tidak ada kecocokan yang ditemukan.
text = 'Say hi at hi@example.com'; first_match = text.search(pattern); if (first_match > -1) { start = first_match;
Ganti dengan pola menggunakan ekspresi reguler
Biasanya, penggantian templat diperlukan saat Anda ingin menghapus data atau menambahkan beberapa properti ke teks. Misalnya, kita dapat mengambil garis dan membuat semua alamat email menemukan tautan:
Python memiliki metode pola sub()
regex untuk ini:
html = pattern.sub( r'<a href="mailto:\g<0>">\g<0></a>', 'Say hi at hi@example.com', )
Pengembang JS dapat menggunakan metode string replace()
:
html = 'Say hi at hi@example.com'.replace( pattern, '<a href="mailto:$&">$&</a>', );
Dengan Python, grup yang cocok tersedia sebagai \g<0>, \g<1>, \g<2>
, dll.
Di JS, seperti $&, $1, $2
, dll.
Dimungkinkan juga untuk mengganti bagian yang cocok dengan fungsi. Fungsi semacam itu berguna ketika mengganti pembungkus teks sumber atau untuk menghitung, mengumpulkan, atau mendapatkan informasi lain tentang teks. Misalnya, ketika saya menggunakan panggilan fungsi saat mengganti, saya bisa menulis penyorotan sintaksis HTML.
Mari kita ubah semua alamat email dalam HURUF MODAL.
Dalam Python, fungsi ganti mendapat objek yang cocok. Kami menggunakan metode grup () untuk melakukan tindakan dengan teks yang cocok dan mengembalikannya sebagai pengganti:
text = pattern.sub( lambda match: match.group(0).upper(), 'Say hi at hi@example.com', )
Di JS, fungsi ganti mendapatkan seluruh string yang cocok, kemunculan pertama, kedua, dll. Kami melakukan tindakan yang diperlukan dan mengembalikan garis yang dimodifikasi:
text = 'Say hi at hi@example.com'.replace( pattern, function(match, p1, p2) { return match.toUpperCase(); } );
Menangani kesalahan
Berbeda dengan Python, JavaScript berbasis browser front-end biasanya tidak digunakan untuk menulis / membaca file atau mengakses database. Oleh karena itu, try..catch
blok cukup jarang di JS dibandingkan dengan try..except
blok dalam Python.
Namun, dalam hal apa pun, penanganan kesalahan dapat dilakukan dalam skrip pengguna, dipanggil dari fungsi pustaka, dan dicegat dalam kode utama.
Dalam contoh MyException
berikut, kami akan mendefinisikan MyException
kami, MyException
dalam suatu fungsi, dan melihat bagaimana menangkapnya dan menanganinya di blok try..except..finally
:
class MyException(Exception): def __init__(self, message): self.message = message def __str__(self): return self.message def proceed(): raise MyException('Error happened!') try: proceed() except MyException as err: print('Sorry! {}'.format(err)) finally: print('Finishing')
Kode JS berikut melakukan hal yang sama - kami mendefinisikan kelas MyException
, MyException
dalam suatu fungsi, mencegat dan memprosesnya dalam try..catch..finally
blokir:
function MyException(message) { this.message = message; this.toString = function() { return this.message; } } function proceed() { throw new MyException('Error happened!'); } try { proceed(); } catch (err) { if (err instanceof MyException) { console.log('Sorry! ' + err); } } finally { console.log('Finishing'); }
Dalam kedua bahasa, kelas MyException
memiliki parameter message
dan metode untuk representasi string tergantung pada nilai message
.
Tentu saja, pengecualian harus dilemparkan / dinaikkan hanya jika terjadi kesalahan. Dan jika Anda telah mengidentifikasi kesalahan ini dalam modul Anda.
Kesimpulan
- Melakukan serialisasi ke / dari JSON cukup mudah - apa yang ada di Python, apa yang ada di JS.
- Reguler adalah alat pengolah kata yang kuat dalam kedua bahasa.
- Anda dapat membuat penggantian menggunakan fungsi.
- Untuk kasus yang lebih kompleks, Anda dapat menggunakan panggilan, intersepsi, dan penanganan kesalahan.
Seperti yang dikatakan terakhir kali, Anda dapat mencocokkan baris demi baris contoh-contoh kode yang disediakan di sini untuk memahami struktur data yang sama dan metode-metode bekerja dengan mereka: string, array, kamus, akses ke objek.
Di bagian selanjutnya, kita akan berbicara tentang pola teks, membongkar daftar, fungsi lambda, iterasi tanpa menggunakan indeks, generator, dan set.