Tulis program python untuk membaca file teks dan ganti karakter pertama dari setiap baris dengan karakter

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

Python membaca teks program sebagai poin kode Unicode; . Jika file sumber tidak dapat didekodekan, a dimunculkan

2. 1. Struktur garis

Program Python dibagi menjadi beberapa baris logis

2. 1. 1. Garis logis

Akhir 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 fisik

Garis 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 1
9, mewakili ASCII LF, adalah terminator baris)

2. 1. 3. Komentar

Komentar 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 deklarasi

Jika 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 year
1, 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 year
2), 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 eksplisit

Dua 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 year
3), 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 implisit

Ekspresi 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 kosong

Baris 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. Lekukan

Spasi 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 year
5 tidak cocok dengan level yang muncul dari tumpukan. )

2. 1. 9. Spasi putih di antara token

Kecuali 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 lainnya

Selain 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 kunci

Pengidentifikasi (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 year
7, 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 year
8 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 year
9 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 r
0

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   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">

Kode kategori Unicode yang disebutkan di atas adalah singkatan dari

  • Lu - huruf besar

  • Ll - huruf kecil

  • Lt - huruf kapital judul

  • Lm - huruf pengubah

  • Lo - surat lainnya

  • Nl - nomor surat

  • Mn - tanda tanpa spasi

  • Mc - spasi menggabungkan tanda

  • Nd - angka desimal

  • Pc - tanda baca konektor

  • Other_ID_Start - daftar karakter eksplisit di PropList. txt untuk mendukung kompatibilitas mundur

  • Other_ID_Continue - demikian juga

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 kunci

Pengidentifikasi 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 Lunak

Baru 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 r
2,
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 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 year
8 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 r
2,
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 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 year
8 sebagai nama pengidentifikasi

2. 3. 3. Kelas pengenal yang dicadangkan

Kelas 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 year
8 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 year
8. (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 dedent
6. )

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   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
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   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
0, dalam konteks apa pun, yang tidak mengikuti penggunaan yang didokumentasikan secara eksplisit, dapat rusak tanpa peringatan

identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
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. Literal

Literal adalah notasi untuk nilai konstanta dari beberapa tipe bawaan

2. 4. 1. String dan Byte literal

Literal string dijelaskan oleh definisi leksikal berikut

stringliteral   ::=  [stringprefix](shortstring | longstring)
stringprefix    ::=  "r" | "u" | "R" | "U" | "f" | "F"
                     | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring     ::=  "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring      ::=  "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::=  shortstringchar | stringescapeseq
longstringitem  ::=  longstringchar | stringescapeseq
shortstringchar ::=  <any source character except "\" or newline or the quote>
longstringchar  ::=  <any source character except "\">
stringescapeseq ::=  "\" <any source character>
bytesliteral   ::=  bytesprefix(shortbytes | longbytes)
bytesprefix    ::=  "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes     ::=  "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes      ::=  "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::=  shortbyteschar | bytesescapeseq
longbytesitem  ::=  longbyteschar | bytesescapeseq
shortbyteschar ::=  <any ASCII character except "\" or newline or the quote>
longbyteschar  ::=  <any ASCII character except "\">
bytesescapeseq ::=  "\" <any ASCII character>

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   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
5) atau tanda kutip ganda (
identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
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 year
3) digunakan untuk menghindari karakter yang memiliki arti khusus, seperti baris baru, backslash itu sendiri, atau karakter kutipan

Literal byte selalu diawali dengan

identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
8 atau
identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
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         yield
2 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         yield
3; . 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         yield
4 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         yield
5 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         yield
7 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         yield
8.

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         yield
9) 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   ::=  [stringprefix](shortstring | longstring)
stringprefix    ::=  "r" | "u" | "R" | "U" | "f" | "F"
                     | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring     ::=  "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring      ::=  "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::=  shortstringchar | stringescapeseq
longstringitem  ::=  longstringchar | stringescapeseq
shortstringchar ::=  <any source character except "\" or newline or the quote>
longstringchar  ::=  <any source character except "\">
stringescapeseq ::=  "\" <any source character>
0 atau
stringliteral   ::=  [stringprefix](shortstring | longstring)
stringprefix    ::=  "r" | "u" | "R" | "U" | "f" | "F"
                     | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring     ::=  "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring      ::=  "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::=  shortstringchar | stringescapeseq
longstringitem  ::=  longstringchar | stringescapeseq
shortstringchar ::=  <any source character except "\" or newline or the quote>
longstringchar  ::=  <any source character except "\">
stringescapeseq ::=  "\" <any source character>
1 di awalannya adalah literal string yang diformat; .
stringliteral   ::=  [stringprefix](shortstring | longstring)
stringprefix    ::=  "r" | "u" | "R" | "U" | "f" | "F"
                     | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring     ::=  "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring      ::=  "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::=  shortstringchar | stringescapeseq
longstringitem  ::=  longstringchar | stringescapeseq
shortstringchar ::=  <any source character except "\" or newline or the quote>
longstringchar  ::=  <any source character except "\">
stringescapeseq ::=  "\" <any source character>
_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         yield
2, tetapi tidak dengan
identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
8 atau
stringliteral   ::=  [stringprefix](shortstring | longstring)
stringprefix    ::=  "r" | "u" | "R" | "U" | "f" | "F"
                     | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring     ::=  "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring      ::=  "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::=  shortstringchar | stringescapeseq
longstringitem  ::=  longstringchar | stringescapeseq
shortstringchar ::=  <any source character except "\" or newline or the quote>
longstringchar  ::=  <any source character except "\">
stringescapeseq ::=  "\" <any source character>
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   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
5 atau
identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
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         yield
2 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         yield
3 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 year
3

Backslash dan baris baru diabaikan

(1)

bytesliteral   ::=  bytesprefix(shortbytes | longbytes)
bytesprefix    ::=  "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes     ::=  "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes      ::=  "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::=  shortbyteschar | bytesescapeseq
longbytesitem  ::=  longbyteschar | bytesescapeseq
shortbyteschar ::=  <any ASCII character except "\" or newline or the quote>
longbyteschar  ::=  <any ASCII character except "\">
bytesescapeseq ::=  "\" <any ASCII character>
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   ::=  bytesprefix(shortbytes | longbytes)
bytesprefix    ::=  "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes     ::=  "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes      ::=  "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::=  shortbyteschar | bytesescapeseq
longbytesitem  ::=  longbyteschar | bytesescapeseq
shortbyteschar ::=  <any ASCII character except "\" or newline or the quote>
longbyteschar  ::=  <any ASCII character except "\">
bytesescapeseq ::=  "\" <any ASCII character>
3

Kutipan tunggal (

identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
5)

bytesliteral   ::=  bytesprefix(shortbytes | longbytes)
bytesprefix    ::=  "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes     ::=  "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes      ::=  "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::=  shortbyteschar | bytesescapeseq
longbytesitem  ::=  longbyteschar | bytesescapeseq
shortbyteschar ::=  <any ASCII character except "\" or newline or the quote>
longbyteschar  ::=  <any ASCII character except "\">
bytesescapeseq ::=  "\" <any ASCII character>
5

Kutipan ganda (

identifier   ::=  xid_start xid_continue*
id_start     ::=  <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
id_continue  ::=  <all characters in id_start, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
xid_start    ::=  <all characters in id_start whose NFKC normalization is in "id_start xid_continue*">
xid_continue ::=  <all characters in id_continue whose NFKC normalization is in "id_continue*">
6)

bytesliteral   ::=  bytesprefix(shortbytes | longbytes)
bytesprefix    ::=  "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes     ::=  "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes      ::=  "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::=  shortbyteschar | bytesescapeseq
longbytesitem  ::=  longbyteschar | bytesescapeseq
shortbyteschar ::=  <any ASCII character except "\" or newline or the quote>
longbyteschar  ::=  <any ASCII character except "\">
bytesescapeseq ::=  "\" <any ASCII character>
7

Lonceng ASCII (BEL)

bytesliteral   ::=  bytesprefix(shortbytes | longbytes)
bytesprefix    ::=  "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes     ::=  "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes      ::=  "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::=  shortbyteschar | bytesescapeseq
longbytesitem  ::=  longbyteschar | bytesescapeseq
shortbyteschar ::=  <any ASCII character except "\" or newline or the quote>
longbyteschar  ::=  <any ASCII character except "\">
bytesescapeseq ::=  "\" <any ASCII character>
8

Backspace ASCII (BS)

bytesliteral   ::=  bytesprefix(shortbytes | longbytes)
bytesprefix    ::=  "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
shortbytes     ::=  "'" shortbytesitem* "'" | '"' shortbytesitem* '"'
longbytes      ::=  "'''" longbytesitem* "'''" | '"""' longbytesitem* '"""'
shortbytesitem ::=  shortbyteschar | bytesescapeseq
longbytesitem  ::=  longbyteschar | bytesescapeseq
shortbyteschar ::=  <any ASCII character except "\" or newline or the quote>
longbyteschar  ::=  <any ASCII character except "\">
bytesescapeseq ::=  "\" <any ASCII character>
_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>
_01

Pengembalian Kereta ASCII (CR)

# vim:fileencoding=<encoding-name>
_02

Tab Horisontal ASCII (TAB)

# vim:fileencoding=<encoding-name>
_03

Tab Vertikal ASCII (VT)

# vim:fileencoding=<encoding-name>
_04

Karakter dengan nilai oktal ooo

(2,4)

# vim:fileencoding=<encoding-name>
_05

Karakter dengan nilai hex hh

(3,4)

Urutan melarikan diri hanya dikenali dalam string literal

Urutan pelarian

Arti

Catatan

# vim:fileencoding=<encoding-name>
_06

Karakter bernama nama dalam database Unicode

(5)

# vim:fileencoding=<encoding-name>
_07

Karakter dengan nilai hex 16-bit xxxx

(6)

# vim:fileencoding=<encoding-name>
_08

Karakter dengan nilai hex 32-bit xxxxxxxx

(7)

Catatan

  1. Garis miring terbalik dapat ditambahkan di akhir baris untuk mengabaikan baris baru

    # vim:fileencoding=<encoding-name>
    
    _0

    Hasil yang sama dapat dicapai dengan menggunakan , atau tanda kurung dan

  2. Seperti dalam Standar C, hingga tiga digit oktal diterima

    Berubah di versi 3. 11. Octal lolos dengan nilai lebih besar dari

    # vim:fileencoding=<encoding-name>
    
    09 menghasilkan. Dalam versi Python yang akan datang mereka akan menjadi a dan akhirnya a.

  3. Tidak seperti di Standar C, diperlukan tepat dua digit hex

  4. Dalam literal byte, pelarian heksadesimal dan oktal menunjukkan byte dengan nilai yang diberikan. Dalam literal string, escape ini menunjukkan karakter Unicode dengan nilai yang diberikan

  5. Berubah di versi 3. 3. Dukungan untuk alias nama telah ditambahkan.

  6. Diperlukan tepat empat digit hex

  7. Setiap karakter Unicode dapat dikodekan dengan cara ini. Diperlukan tepat delapan digit hex

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

Berubah di versi 3. 6. Urutan escape yang tidak dikenali menghasilkan a. Dalam versi Python yang akan datang mereka akan menjadi a dan akhirnya a.

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 string

Beberapa 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>
_1

Perhatikan 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 terformat

Baru di versi 3. 6

Literal string berformat atau f-string adalah literal string yang diawali dengan

stringliteral   ::=  [stringprefix](shortstring | longstring)
stringprefix    ::=  "r" | "u" | "R" | "U" | "f" | "F"
                     | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring     ::=  "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring      ::=  "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::=  shortstringchar | stringescapeseq
longstringitem  ::=  longstringchar | stringescapeseq
shortstringchar ::=  <any source character except "\" or newline or the quote>
longstringchar  ::=  <any source character except "\">
stringescapeseq ::=  "\" <any source character>
0 atau
stringliteral   ::=  [stringprefix](shortstring | longstring)
stringprefix    ::=  "r" | "u" | "R" | "U" | "f" | "F"
                     | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
shortstring     ::=  "'" shortstringitem* "'" | '"' shortstringitem* '"'
longstring      ::=  "'''" longstringitem* "'''" | '"""' longstringitem* '"""'
shortstringitem ::=  shortstringchar | stringescapeseq
longstringitem  ::=  longstringchar | stringescapeseq
shortstringchar ::=  <any source character except "\" or newline or the quote>
longstringchar  ::=  <any source character except "\">
stringescapeseq ::=  "\" <any source character>
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 proses

Urutan 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>
_2

Bagian-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>
29

Ekspresi 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 kanan

Berubah 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 dinyatakan

Baru 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 panggilan

Hasilnya 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 string

Penentu 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>
_3

Konsekuensi 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>
_4

Garis miring terbalik tidak diperbolehkan dalam ekspresi format dan akan menimbulkan kesalahan

# vim:fileencoding=<encoding-name>
_5

Untuk memasukkan nilai yang membutuhkan backslash escape, buat variabel sementara

# vim:fileencoding=<encoding-name>
_6

Literal string yang diformat tidak dapat digunakan sebagai dokumen, meskipun tidak menyertakan ekspresi

# vim:fileencoding=<encoding-name>
_7

Lihat juga PEP 498 untuk proposal yang menambahkan literal string berformat, dan , yang menggunakan mekanisme string format terkait

2. 4. 4. Literal numerik

Ada 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 bulat

Literal bilangan bulat dijelaskan oleh definisi leksikal berikut

# vim:fileencoding=<encoding-name>
_8

Tidak 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>
56

Perhatikan 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>
_9

Berubah di versi 3. 6. Underscore sekarang diperbolehkan untuk tujuan pengelompokan dalam literal.

2. 4. 6. Literal titik mengambang

Literal 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 1
0

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 digit

Beberapa 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 imajiner

Literal 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 imajiner

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
_3

2. 5. Operator

Token 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. Pembatas

Token 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 1
5

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.