Program Python dibaca oleh parser. Masukan ke parser adalah aliran token, yang dihasilkan oleh penganalisa leksikal. Bab ini menjelaskan bagaimana penganalisis leksikal memecah file menjadi token Show
Python membaca teks program sebagai poin kode Unicode; . Jika file sumber tidak dapat didekodekan, a dimunculkan 2. 1. Struktur garisProgram Python dibagi menjadi beberapa baris logis 2. 1. 1. Garis logisAkhir dari garis logis diwakili oleh token NEWLINE. Pernyataan tidak dapat melewati batas garis logis kecuali jika NEWLINE diizinkan oleh sintaks (mis. g. , antara pernyataan dalam pernyataan majemuk). Garis logis dibangun dari satu atau lebih garis fisik dengan mengikuti aturan penggabungan garis eksplisit atau implisit 2. 1. 2. Garis fisikGaris fisik adalah urutan karakter yang diakhiri oleh urutan akhir baris. Dalam file dan string sumber, salah satu urutan terminasi jalur platform standar dapat digunakan - formulir Unix menggunakan ASCII LF (linefeed), formulir Windows menggunakan urutan ASCII CR LF (kembali diikuti dengan umpan baris), atau formulir Macintosh lama menggunakan . Semua formulir ini dapat digunakan secara setara, apa pun platformnya. Akhir input juga berfungsi sebagai terminator implisit untuk garis fisik akhir Saat menyematkan Python, string kode sumber harus diteruskan ke API Python menggunakan konvensi C standar untuk karakter baris baru (karakter if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 19, mewakili ASCII LF, adalah terminator baris) 2. 1. 3. KomentarKomentar dimulai dengan karakter hash ( month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year_0) yang bukan merupakan bagian dari literal string, dan berakhir di akhir baris fisik. Sebuah komentar menandakan akhir dari baris logis kecuali aturan penggabungan baris implisit dipanggil. Komentar diabaikan oleh sintaks 2. 1. 4. Enkode deklarasiJika komentar di baris pertama atau kedua skrip Python cocok dengan ekspresi reguler month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year1, komentar ini diproses sebagai deklarasi penyandian; . Deklarasi pengkodean harus muncul pada barisnya sendiri. Jika ini adalah baris kedua, baris pertama juga harus merupakan baris khusus komentar. Bentuk ekspresi penyandian yang direkomendasikan adalah # -*- coding: <encoding-name> -*-
yang diakui juga oleh GNU Emacs, dan # vim:fileencoding=<encoding-name>
_yang dikenali oleh VIM Bram Moolenaar Jika tidak ada deklarasi penyandian yang ditemukan, penyandian default adalah UTF-8. Selain itu, jika byte pertama file adalah tanda urutan byte UTF-8 ( month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year2), penyandian file yang dinyatakan adalah UTF-8 (ini didukung, antara lain, oleh notepad Microsoft) Jika penyandian dideklarasikan, nama penyandian harus dikenali oleh Python (lihat ). Pengkodean digunakan untuk semua analisis leksikal, termasuk string literal, komentar, dan pengidentifikasi 2. 1. 5. Penggabungan garis eksplisitDua atau lebih garis fisik dapat digabungkan menjadi garis logis menggunakan karakter backslash ( month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year3), sebagai berikut. ketika garis fisik diakhiri dengan garis miring terbalik yang bukan bagian dari string literal atau komentar, garis tersebut digabungkan dengan yang berikut membentuk satu garis logis, menghapus garis miring terbalik dan karakter akhir baris berikut. Sebagai contoh if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 1 Baris yang diakhiri dengan garis miring terbalik tidak dapat membawa komentar. Garis miring terbalik tidak melanjutkan komentar. Garis miring terbalik tidak melanjutkan token kecuali untuk string literal (mis. e. , token selain string literal tidak dapat dipisahkan melintasi garis fisik menggunakan garis miring terbalik). Garis miring terbalik adalah ilegal di tempat lain pada baris di luar string literal 2. 1. 6. Penggabungan garis implisitEkspresi dalam tanda kurung, kurung siku, atau kurung kurawal dapat dipisahkan menjadi lebih dari satu baris fisik tanpa menggunakan garis miring terbalik. Sebagai contoh month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year_ Baris yang dilanjutkan secara implisit dapat membawa komentar. Lekukan garis lanjutan tidak penting. Baris lanjutan kosong diperbolehkan. Tidak ada token NEWLINE di antara garis kelanjutan implisit. Baris yang dilanjutkan secara implisit juga dapat muncul dalam string yang dikutip tiga kali lipat (lihat di bawah); 2. 1. 7. Garis kosongBaris logis yang hanya berisi spasi, tab, umpan formulir, dan mungkin komentar, diabaikan (mis. e. , tidak ada token NEWLINE yang dihasilkan). Selama input pernyataan interaktif, penanganan baris kosong mungkin berbeda tergantung pada implementasi loop read-eval-print. Dalam juru bahasa interaktif standar, baris logis yang sepenuhnya kosong (mis. e. satu yang bahkan tidak berisi spasi atau komentar) mengakhiri pernyataan multi-baris 2. 1. 8. LekukanSpasi putih terdepan (spasi dan tab) di awal baris logis digunakan untuk menghitung tingkat indentasi baris, yang pada gilirannya digunakan untuk menentukan pengelompokan pernyataan Tab diganti (dari kiri ke kanan) dengan satu hingga delapan spasi sehingga jumlah total karakter hingga dan termasuk penggantian adalah kelipatan delapan (ini dimaksudkan untuk menjadi aturan yang sama seperti yang digunakan oleh Unix). Jumlah total spasi sebelum karakter tidak kosong pertama kemudian menentukan lekukan baris. Lekukan tidak dapat dipisahkan menjadi beberapa garis fisik menggunakan garis miring terbalik; Lekukan ditolak karena tidak konsisten jika file sumber menggabungkan tab dan spasi dengan cara yang membuat artinya bergantung pada nilai tab dalam spasi; Catatan kompatibilitas lintas platform. karena sifat editor teks pada platform non-UNIX, tidak bijaksana menggunakan campuran spasi dan tab untuk lekukan dalam satu file sumber. Perlu juga dicatat bahwa platform yang berbeda dapat secara eksplisit membatasi level indentasi maksimum Karakter formfeed mungkin ada di awal baris; . Karakter umpan formulir yang terjadi di tempat lain di spasi putih terkemuka memiliki efek yang tidak ditentukan (misalnya, mereka dapat mengatur ulang jumlah ruang menjadi nol) Tingkat lekukan baris berurutan digunakan untuk menghasilkan token INDENT dan DEDENT, menggunakan tumpukan, sebagai berikut Sebelum baris pertama file dibaca, satu nol didorong ke tumpukan; . Angka-angka yang didorong pada tumpukan akan selalu meningkat secara ketat dari bawah ke atas. Di awal setiap baris logis, tingkat indentasi baris dibandingkan dengan bagian atas tumpukan. Jika sama, tidak ada yang terjadi. Jika lebih besar, itu didorong ke tumpukan, dan satu token INDENT dibuat. Jika lebih kecil, itu pasti salah satu angka yang muncul di tumpukan; . Di akhir file, token DEDENT dibuat untuk setiap angka yang tersisa di tumpukan yang lebih besar dari nol Berikut adalah contoh potongan kode Python yang terindentasi dengan benar (walaupun membingungkan). def perm(l): # Compute the list of all permutations of l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r_ Contoh berikut menunjukkan berbagai kesalahan indentasi def perm(l): # error: first line indented for i in range(len(l)): # error: not indented s = l[:i] + l[i+1:] p = perm(l[:i] + l[i+1:]) # error: unexpected indent for x in p: r.append(l[i:i+1] + x) return r # error: inconsistent dedent (Sebenarnya, tiga kesalahan pertama terdeteksi oleh parser; hanya kesalahan terakhir yang ditemukan oleh penganalisis leksikal — lekukan month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year5 tidak cocok dengan level yang muncul dari tumpukan. ) 2. 1. 9. Spasi putih di antara tokenKecuali di awal baris logis atau dalam literal string, spasi karakter spasi, tab, dan umpan formulir dapat digunakan secara bergantian untuk memisahkan token. Spasi kosong diperlukan di antara dua token hanya jika penggabungannya dapat ditafsirkan sebagai token yang berbeda (mis. g. , ab adalah satu token, tetapi a b adalah dua token) 2. 2. Token lainnyaSelain NEWLINE, INDENT dan DEDENT, ada kategori token berikut. pengidentifikasi, kata kunci, literal, operator, dan pembatas. Karakter spasi putih (selain terminator baris, yang dibahas sebelumnya) bukan token, tetapi berfungsi untuk membatasi token. Jika ada ambiguitas, token terdiri dari string terpanjang yang membentuk token legal, bila dibaca dari kiri ke kanan 2. 3. Pengidentifikasi dan kata kunciPengidentifikasi (juga disebut sebagai nama) dijelaskan oleh definisi leksikal berikut Sintaks pengidentifikasi dalam Python didasarkan pada lampiran standar Unicode UAX-31, dengan penjabaran dan perubahan seperti yang didefinisikan di bawah ini; Dalam rentang ASCII (U+0001. U+007F), karakter yang valid untuk pengidentifikasi sama dengan di Python 2. x. huruf besar dan kecil month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year_6 sampai month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year7, garis bawah month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year8 dan, kecuali untuk karakter pertama, digit month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year9 sampai def perm(l): # Compute the list of all permutations of l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r0 Piton 3. 0 memperkenalkan karakter tambahan dari luar rentang ASCII (lihat PEP 3131). Untuk karakter-karakter ini, klasifikasi menggunakan versi Database Karakter Unicode yang disertakan dalam modul Panjang pengidentifikasi tidak terbatas. Kasusnya signifikan identifier ::= Kode kategori Unicode yang disebutkan di atas adalah singkatan dari
Semua pengidentifikasi diubah menjadi bentuk normal NFKC saat parsing; File HTML non-normatif yang mencantumkan semua karakter pengenal yang valid untuk Unicode 14. 0. 0 dapat ditemukan di https. // www. unicode. org/Publik/14. 0. 0/ucd/DerivedCoreProperties. txt 2. 3. 1. Kata kunciPengidentifikasi berikut digunakan sebagai kata yang dicadangkan, atau kata kunci bahasa, dan tidak dapat digunakan sebagai pengidentifikasi biasa. Mereka harus dieja persis seperti yang tertulis di sini False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield 2. 3. 2. Kata Kunci LunakBaru di versi 3. 10 Beberapa pengidentifikasi hanya dicadangkan dalam konteks tertentu. Ini dikenal sebagai kata kunci lunak. Pengidentifikasi def perm(l): # Compute the list of all permutations of l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r2, def perm(l): # Compute the list of all permutations of l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r3 dan month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year8 dapat secara sintaksis bertindak sebagai kata kunci dalam konteks yang terkait dengan pernyataan pencocokan pola, tetapi perbedaan ini dilakukan pada tingkat parser, bukan saat membuat token Sebagai kata kunci lunak, penggunaannya dengan pencocokan pola dimungkinkan sambil tetap mempertahankan kompatibilitas dengan kode yang ada yang menggunakan def perm(l): # Compute the list of all permutations of l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r2, def perm(l): # Compute the list of all permutations of l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r3 dan month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year8 sebagai nama pengidentifikasi 2. 3. 3. Kelas pengenal yang dicadangkanKelas pengidentifikasi tertentu (selain kata kunci) memiliki arti khusus. Kelas-kelas ini diidentifikasi dengan pola karakter garis bawah di depan dan di belakang def perm(l): # Compute the list of all permutations of l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r_8 Tidak diimpor oleh def perm(l): # Compute the list of all permutations of l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r_9 month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year_8 Dalam pola def perm(l): # Compute the list of all permutations of l if len(l) <= 1: return [l] r = [] for i in range(len(l)): s = l[:i] + l[i+1:] p = perm(s) for x in p: r.append(l[i:i+1] + x) return r_3 dalam pernyataan, month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year8 adalah a yang menunjukkan a Secara terpisah, interpreter interaktif membuat hasil evaluasi terakhir tersedia dalam variabel month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year8. (Itu disimpan dalam modul, di samping fungsi bawaan seperti def perm(l): # error: first line indented for i in range(len(l)): # error: not indented s = l[:i] + l[i+1:] p = perm(l[:i] + l[i+1:]) # error: unexpected indent for x in p: r.append(l[i:i+1] + x) return r # error: inconsistent dedent6. ) Di tempat lain, month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year_8 adalah pengenal biasa. Ini sering digunakan untuk memberi nama item "khusus", tetapi tidak khusus untuk Python itu sendiri Catatan Nama month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year_8 sering digunakan bersamaan dengan internasionalisasi; Ini juga biasa digunakan untuk variabel yang tidak digunakan identifier ::=0 Nama yang ditentukan sistem, secara informal dikenal sebagai nama "dunder". Nama-nama ini ditentukan oleh juru bahasa dan penerapannya (termasuk perpustakaan standar). Nama sistem saat ini dibahas di bagian ini dan di tempat lain. Lebih banyak kemungkinan akan ditentukan dalam versi Python yang akan datang. Setiap penggunaan nama identifier ::=0, dalam konteks apa pun, yang tidak mengikuti penggunaan yang didokumentasikan secara eksplisit, dapat rusak tanpa peringatan identifier ::=2 Nama pribadi kelas. Nama-nama dalam kategori ini, ketika digunakan dalam konteks definisi kelas, ditulis ulang menggunakan bentuk yang rusak untuk membantu menghindari bentrokan nama antara atribut "pribadi" dari kelas dasar dan kelas turunan. Lihat bagian 2. 4. LiteralLiteral adalah notasi untuk nilai konstanta dari beberapa tipe bawaan 2. 4. 1. String dan Byte literalLiteral string dijelaskan oleh definisi leksikal berikut stringliteral ::= [ bytesliteral ::= Salah satu batasan sintaksis yang tidak ditunjukkan oleh produksi ini adalah bahwa spasi putih tidak diperbolehkan antara atau dan sisa literal. Kumpulan karakter sumber ditentukan oleh deklarasi penyandian; Dalam bahasa Inggris biasa. Kedua jenis literal dapat diapit dengan tanda kutip tunggal yang cocok ( identifier ::=5) atau tanda kutip ganda ( identifier ::=6). Mereka juga dapat dilampirkan dalam kelompok yang cocok dari tiga tanda kutip tunggal atau ganda (ini umumnya disebut sebagai string dengan tanda kutip tiga). Karakter backslash ( month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year3) digunakan untuk menghindari karakter yang memiliki arti khusus, seperti baris baru, backslash itu sendiri, atau karakter kutipan Literal byte selalu diawali dengan identifier ::=8 atau identifier ::=9; . Mereka mungkin hanya berisi karakter ASCII; Literal string dan byte dapat secara opsional diawali dengan huruf False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield2 atau False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield3; . Akibatnya, dalam literal string, False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield4 dan False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield5 lolos dalam string mentah tidak diperlakukan secara khusus. Mengingat bahwa Python 2. literal unicode mentah x berperilaku berbeda dari Python 3. x sintaks False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield_6 tidak didukung Baru di versi 3. 3. Awalan False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield7 literal byte mentah telah ditambahkan sebagai sinonim dari False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield8. Baru di versi 3. 3. Dukungan untuk literal warisan unicode ( False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield9) diperkenalkan kembali untuk menyederhanakan pemeliharaan dual Python 2. x dan 3. x basis kode. Lihat PEP 414 untuk informasi lebih lanjut. Literal string dengan stringliteral ::= [0 atau stringliteral ::= [1 di awalannya adalah literal string yang diformat; . stringliteral ::= [_0 dapat digabungkan dengan False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield2, tetapi tidak dengan identifier ::=8 atau stringliteral ::= [5, oleh karena itu string yang diformat mentah dimungkinkan, tetapi literal byte yang diformat tidak Dalam literal yang dikutip tiga kali lipat, baris baru dan tanda kutip yang tidak lolos diperbolehkan (dan dipertahankan), kecuali bahwa tiga tanda kutip yang tidak lolos berturut-turut mengakhiri literal. ("Kutipan" adalah karakter yang digunakan untuk membuka literal, mis. e. baik identifier ::=5 atau identifier ::=6. ) Kecuali jika ada False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield2 atau False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield3 awalan, escape sequence dalam string dan byte literal diinterpretasikan menurut aturan yang serupa dengan yang digunakan oleh Standar C. Urutan pelarian yang dikenali adalah Urutan pelarian Arti Catatan month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year3 Backslash dan baris baru diabaikan (1) bytesliteral ::=1 Garis miring terbalik ( month_names = ['Januari', 'Februari', 'Maart', # These are the 'April', 'Mei', 'Juni', # Dutch names 'Juli', 'Augustus', 'September', # for the months 'Oktober', 'November', 'December'] # of the year_3) bytesliteral ::=3 Kutipan tunggal ( identifier ::=5) bytesliteral ::=5 Kutipan ganda ( identifier ::=6) bytesliteral ::=7 Lonceng ASCII (BEL) bytesliteral ::=8 Backspace ASCII (BS) bytesliteral ::=_9 Umpan Formulir ASCII (FF) if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 1_9 Linefeed ASCII (LF) # vim:fileencoding=<encoding-name>
_01Pengembalian Kereta ASCII (CR) # vim:fileencoding=<encoding-name>
_02Tab Horisontal ASCII (TAB) # vim:fileencoding=<encoding-name>
_03Tab Vertikal ASCII (VT) # vim:fileencoding=<encoding-name>
_04Karakter dengan nilai oktal ooo (2,4) # vim:fileencoding=<encoding-name>
_05Karakter dengan nilai hex hh (3,4) Urutan melarikan diri hanya dikenali dalam string literal Urutan pelarian Arti Catatan # vim:fileencoding=<encoding-name>
_06Karakter bernama nama dalam database Unicode (5) # vim:fileencoding=<encoding-name>
_07Karakter dengan nilai hex 16-bit xxxx (6) # vim:fileencoding=<encoding-name>
_08Karakter dengan nilai hex 32-bit xxxxxxxx (7) Catatan
Tidak seperti Standar C, semua escape sequence yang tidak dikenali dibiarkan dalam string tidak berubah, i. e. , garis miring terbalik dibiarkan pada hasil. (Perilaku ini berguna saat melakukan debug. jika escape sequence salah ketik, keluaran yang dihasilkan lebih mudah dikenali sebagai rusak. ) Penting juga untuk dicatat bahwa escape sequence yang hanya dikenali dalam string literal termasuk dalam kategori escape yang tidak dikenal untuk byte literal
Bahkan dalam literal mentah, kutipan dapat diloloskan dengan garis miring terbalik, tetapi garis miring terbalik tetap ada di hasil; . garis miring terbalik dan kutipan ganda; . Secara khusus, literal mentah tidak dapat diakhiri dengan satu garis miring terbalik (karena garis miring terbalik akan lolos dari karakter kutipan berikut). Perhatikan juga bahwa satu garis miring terbalik diikuti oleh baris baru ditafsirkan sebagai dua karakter tersebut sebagai bagian dari literal, bukan sebagai kelanjutan baris 2. 4. 2. Penggabungan literal stringBeberapa literal string atau byte yang berdekatan (dibatasi oleh spasi putih), mungkin menggunakan konvensi kutipan yang berbeda, diizinkan, dan artinya sama dengan penggabungannya. Jadi, # vim:fileencoding=<encoding-name>
_18 sama dengan # vim:fileencoding=<encoding-name>
19. Fitur ini dapat digunakan untuk mengurangi jumlah garis miring terbalik yang diperlukan, untuk memisahkan string panjang dengan nyaman di sepanjang garis panjang, atau bahkan menambahkan komentar ke bagian string, misalnya# vim:fileencoding=<encoding-name>
_1Perhatikan bahwa fitur ini ditentukan pada level sintaksis, tetapi diimplementasikan pada waktu kompilasi. Operator '+' harus digunakan untuk menggabungkan ekspresi string pada waktu proses. Perhatikan juga bahwa penggabungan literal dapat menggunakan gaya kutipan yang berbeda untuk setiap komponen (bahkan mencampur string mentah dan string yang dikutip tiga kali), dan literal string yang diformat dapat digabungkan dengan literal string biasa 2. 4. 3. Literal string terformatBaru di versi 3. 6 Literal string berformat atau f-string adalah literal string yang diawali dengan stringliteral ::= [0 atau stringliteral ::= [1. String ini mungkin berisi kolom pengganti, yang merupakan ekspresi yang dibatasi oleh kurung kurawal # vim:fileencoding=<encoding-name>
22. Sementara literal string lainnya selalu memiliki nilai konstan, string yang diformat sebenarnya adalah ekspresi yang dievaluasi pada waktu prosesUrutan escape didekodekan seperti dalam string literal biasa (kecuali jika literal juga ditandai sebagai string mentah). Setelah decoding, tata bahasa untuk isi string tersebut adalah # vim:fileencoding=<encoding-name>
_2Bagian-bagian string di luar kurung kurawal diperlakukan secara harfiah, kecuali bahwa setiap kurung kurawal ganda # vim:fileencoding=<encoding-name>
23 atau # vim:fileencoding=<encoding-name>
24 diganti dengan kurung kurawal tunggal yang sesuai. Tanda kurung kurawal bukaan tunggal # vim:fileencoding=<encoding-name>
_25 menandai bidang pengganti, yang dimulai dengan ekspresi Python. Untuk menampilkan teks ekspresi dan nilainya setelah evaluasi, (berguna dalam proses debug), tanda sama dengan # vim:fileencoding=<encoding-name>
26 dapat ditambahkan setelah ekspresi. Bidang konversi, diawali dengan tanda seru # vim:fileencoding=<encoding-name>
27 dapat mengikuti. Penspesifikasi format juga dapat ditambahkan, diperkenalkan dengan tanda titik dua # vim:fileencoding=<encoding-name>
28. Bidang pengganti diakhiri dengan kurung kurawal penutup # vim:fileencoding=<encoding-name>
29Ekspresi dalam literal string terformat diperlakukan seperti ekspresi Python biasa yang dikelilingi oleh tanda kurung, dengan beberapa pengecualian. Ekspresi kosong tidak diperbolehkan, dan keduanya serta ekspresi penugasan # vim:fileencoding=<encoding-name>
31 harus diapit oleh tanda kurung eksplisit. Ekspresi pengganti dapat berisi jeda baris (mis. g. dalam string yang dikutip tiga kali lipat), tetapi tidak boleh berisi komentar. Setiap ekspresi dievaluasi dalam konteks di mana literal string yang diformat muncul, dalam urutan dari kiri ke kananBerubah di versi 3. 7. Sebelum Python 3. 7, ekspresi dan pemahaman yang mengandung klausa adalah ilegal dalam ekspresi dalam literal string yang diformat karena masalah dengan implementasi. Ketika tanda sama dengan # vim:fileencoding=<encoding-name>
26 diberikan, output akan memiliki teks ekspresi, # vim:fileencoding=<encoding-name>
26 dan nilai yang dievaluasi. Spasi setelah kurung kurawal # vim:fileencoding=<encoding-name>
_25, di dalam ekspresi dan setelah # vim:fileencoding=<encoding-name>
26 semuanya dipertahankan dalam output. Secara default, # vim:fileencoding=<encoding-name>
26 menyebabkan ekspresi diberikan, kecuali ada format yang ditentukan. Ketika suatu format ditentukan, itu default ke ekspresi kecuali konversi # vim:fileencoding=<encoding-name>
41 dinyatakanBaru di versi 3. 8. Tanda sama dengan # vim:fileencoding=<encoding-name>
26. Jika konversi ditentukan, hasil evaluasi ekspresi dikonversi sebelum pemformatan. Konversi # vim:fileencoding=<encoding-name>
_43 panggilan pada hasil, # vim:fileencoding=<encoding-name>
41 panggilan , dan # vim:fileencoding=<encoding-name>
47 panggilanHasilnya kemudian diformat menggunakan protokol. Penentu format diteruskan ke metode # vim:fileencoding=<encoding-name>
50 dari ekspresi atau hasil konversi. String kosong diteruskan saat penentu format dihilangkan. Hasil yang diformat kemudian dimasukkan ke dalam nilai akhir dari keseluruhan stringPenentu format tingkat atas mungkin menyertakan bidang pengganti bersarang. Bidang bersarang ini mungkin menyertakan bidang konversinya sendiri dan , tetapi mungkin tidak menyertakan bidang pengganti bersarang yang lebih dalam. Ini sama dengan yang digunakan oleh metode Literal string yang diformat dapat digabungkan, tetapi bidang pengganti tidak dapat dipisahkan menjadi literal Beberapa contoh literal string yang diformat # vim:fileencoding=<encoding-name>
_3Konsekuensi dari berbagi sintaksis yang sama dengan literal string reguler adalah bahwa karakter dalam bidang pengganti tidak boleh bertentangan dengan kutipan yang digunakan dalam literal string terformat luar # vim:fileencoding=<encoding-name>
_4Garis miring terbalik tidak diperbolehkan dalam ekspresi format dan akan menimbulkan kesalahan # vim:fileencoding=<encoding-name>
_5Untuk memasukkan nilai yang membutuhkan backslash escape, buat variabel sementara # vim:fileencoding=<encoding-name>
_6Literal string yang diformat tidak dapat digunakan sebagai dokumen, meskipun tidak menyertakan ekspresi # vim:fileencoding=<encoding-name>
_7Lihat juga PEP 498 untuk proposal yang menambahkan literal string berformat, dan , yang menggunakan mekanisme string format terkait 2. 4. 4. Literal numerikAda tiga jenis literal numerik. bilangan bulat, bilangan floating point, dan bilangan imajiner. Tidak ada literal kompleks (bilangan kompleks dapat dibentuk dengan menambahkan bilangan real dan bilangan imajiner) Perhatikan bahwa literal numerik tidak menyertakan tanda; 2. 4. 5. Literal bilangan bulatLiteral bilangan bulat dijelaskan oleh definisi leksikal berikut # vim:fileencoding=<encoding-name>
_8Tidak ada batasan untuk panjang literal integer selain dari apa yang dapat disimpan dalam memori yang tersedia Garis bawah diabaikan untuk menentukan nilai numerik literal. Mereka dapat digunakan untuk mengelompokkan digit untuk meningkatkan keterbacaan. Satu garis bawah dapat muncul di antara digit, dan setelah penentu dasar seperti # vim:fileencoding=<encoding-name>
56Perhatikan bahwa nol di depan dalam angka desimal bukan nol tidak diperbolehkan. Ini untuk disambiguasi dengan literal oktal gaya-C, yang digunakan Python sebelum versi 3. 0 Beberapa contoh literal bilangan bulat # vim:fileencoding=<encoding-name>
_9Berubah di versi 3. 6. Underscore sekarang diperbolehkan untuk tujuan pengelompokan dalam literal. 2. 4. 6. Literal titik mengambangLiteral floating point dijelaskan oleh definisi leksikal berikut if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 10 Perhatikan bahwa bagian bilangan bulat dan eksponen selalu ditafsirkan menggunakan radix 10. Misalnya, # vim:fileencoding=<encoding-name>
57 legal, dan menunjukkan angka yang sama dengan # vim:fileencoding=<encoding-name>
58. Rentang literal floating point yang diizinkan bergantung pada implementasi. Seperti dalam literal bilangan bulat, garis bawah didukung untuk pengelompokan digitBeberapa contoh literal floating point if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 1_1 Berubah di versi 3. 6. Underscore sekarang diperbolehkan untuk tujuan pengelompokan dalam literal. 2. 4. 7. Literal imajinerLiteral imajiner dijelaskan oleh definisi leksikal berikut if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 1_2 Literal imajiner menghasilkan bilangan kompleks dengan bagian nyata dari 0. 0. Bilangan kompleks direpresentasikan sebagai sepasang bilangan floating point dan memiliki batasan yang sama pada jangkauannya. Untuk membuat bilangan kompleks dengan bagian real bukan nol, tambahkan bilangan floating point ke dalamnya, mis. g. , # vim:fileencoding=<encoding-name>
_59. Beberapa contoh literal imajinerif 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 1_3 2. 5. OperatorToken berikut adalah operator if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 1_4 2. 6. PembatasToken berikut berfungsi sebagai pembatas dalam tata bahasa if 1900 < year < 2100 and 1 <= month <= 12 \ and 1 <= day <= 31 and 0 <= hour < 24 \ and 0 <= minute < 60 and 0 <= second < 60: # Looks like a valid date return 15 Periode juga dapat muncul dalam literal floating-point dan imajiner. Urutan tiga periode memiliki arti khusus sebagai literal elipsis. Bagian kedua dari daftar, operator penugasan yang ditambah, berfungsi secara leksikal sebagai pembatas, tetapi juga melakukan operasi Pencetakan karakter ASCII berikut tidak digunakan dalam Python. Kemunculannya di luar string literal dan komentar adalah kesalahan tanpa syarat Bagaimana Anda mengganti karakter pertama dari sebuah string dengan Python?replace() method untuk mengganti karakter pertama dalam sebuah string, e. g. new_str = my_str. ganti('lama', 'baru', 1). str. metode replace() dapat memberikan argumen hitungan 1 untuk hanya menggantikan kejadian pertama dari substring dalam string.
Bagaimana Anda mengganti karakter dalam file teks dengan Python?Untuk mengganti teks dalam file, kita akan membuka file dalam read-only menggunakan fungsi open(). Kemudian kita akan t=membaca dan mengganti konten dalam file teks menggunakan fungsi read() dan replace() .
Bagaimana Anda menulis ulang file teks dengan Python?01) Menggunakan Mode Akses File hanya tulis ('w')
. ) Python menyertakan fungsi tulis untuk menulis ke file. Jika file berisi konten apa pun, itu akan ditimpa sepenuhnya oleh apa pun yang Anda tulis di file yang dibuka. |