Kutipan tunggal vs kutipan ganda dalam Python [ditutup]

718

Menurut dokumentasi, mereka cukup banyak dipertukarkan. Apakah ada alasan gaya untuk menggunakan satu di atas yang lain?

Hanya baca
sumber

Jawaban:

525

Saya suka menggunakan tanda kutip ganda di sekitar string yang digunakan untuk interpolasi atau yang merupakan pesan bahasa alami, dan tanda kutip tunggal untuk string mirip simbol, tetapi akan melanggar aturan jika string berisi kutipan, atau jika saya lupa. Saya menggunakan tanda kutip ganda berganda untuk dokumen dan literal string mentah untuk ekspresi reguler bahkan jika itu tidak diperlukan.

Sebagai contoh:

LIGHT_MESSAGES = {
    'English': "There are %(number_of_lights)s lights.",
    'Pirate':  "Arr! Thar be %(number_of_lights)s lights."
}

def lights_message(language, number_of_lights):
    """Return a language-appropriate string reporting the light count."""
    return LIGHT_MESSAGES[language] % locals()

def is_pirate(message):
    """Return True if the given message sounds piratical."""
    return re.search(r"(?i)(arr|avast|yohoho)!", message) is not None
Will Harris
sumber
4
Menarik, saya menggunakannya dengan cara yang persis sama. Saya tidak ingat pernah membaca apa pun untuk mendorong saya ke arah itu. Saya juga menggunakan tanda kutip tunggal tiga untuk string panjang yang tidak ditujukan untuk manusia, seperti html mentah. Mungkin itu ada hubungannya dengan aturan kutipan bahasa Inggris.
Mike A
12
Sebagian besar kode python mengkode seperti itu. Tidak ada aturan eksplisit, tetapi karena kita sering membaca kode seperti itu, itu menjadi kebiasaan.
e-satis
Saya bertanya-tanya apakah tanda kutip tunggal untuk hal-hal seperti simbol benar-benar berasal dari jalan pintas ekspresi kutipan di Lisp / Skema. Bagaimanapun, itu intuitif. Juga, saya sobat, jika kita mengikuti pedoman gaya PEP 8, fungsi-fungsinya harus dinamai lights_message () dan is_pirate ().
yukondude
8
Saya pikir Perl membuat perbedaan antara string yang dikutip tunggal (tanpa interpolasi) dan string yang dikutip ganda (dengan interpolasi) dan bahwa coders python mungkin telah mewarisi kebiasaan tersebut atau tidak pernah melepaskannya.
Daren Thomas
2
Saya menggunakan konvensi yang sama, ditambah saya menyalahgunakannya dengan memiliki vim menyoroti semua yang ada di dalam tanda kutip tunggal sebagai SQL.
RoundTower
96

Mengutip dokumen resmi di https://docs.python.org/2.0/ref/strings.html :

Dalam bahasa Inggris biasa: String literal dapat ditutup dengan tanda kutip tunggal (') atau kutip ganda yang cocok (").

Jadi tidak ada perbedaan. Sebagai gantinya, orang akan memberitahu Anda untuk memilih gaya mana saja yang cocok dengan konteksnya, dan untuk menjadi konsisten . Dan saya akan setuju - menambahkan bahwa tidak ada gunanya mencoba membuat "konvensi" untuk hal semacam ini karena Anda hanya akan berakhir membingungkan setiap pendatang baru.

conny
sumber
3
ya, bagi saya konsistensi adalah kuncinya, jadi saya hanya menggunakan single di mana-mana. Lebih sedikit penekanan tombol, tidak ambigu, dan konsisten.
mlissner
90

Saya dulu lebih suka ', terutama untuk '''docstrings''', seperti yang saya temukan """this creates some fluff""". Juga, 'dapat diketik tanpa Shifttombol pada keyboard Swiss Jerman saya.

Sejak saat itu saya telah berubah menggunakan tanda kutip tiga untuk """docstrings""", agar sesuai dengan PEP 257 .

Daren Thomas
sumber
2
Saya cenderung lebih suka tanda kutip tunggal, karena saya menulis kode SQL setiap hari, dan tanda kutip tunggal digunakan untuk string literal dalam T-SQL. Tapi saya menggunakan tanda kutip ganda ganda, karena docstrings terkadang dapat menggunakan sedikit bulu di dalamnya.
eksortso
4
Di mana-mana menggunakan tanda kutip sederhana untuk string memungkinkan saya menonaktifkan bagian kode sumber menggunakan tiga tanda kutip ganda - jenis '#jika 0' dan '# endif'.
redup
12
"hanya memerlukan tombol shift pada keyboard QWERTY PC. Di keyboard saya, "sebenarnya lebih mudah untuk mengetik.
e-satis
6
pada keybord saya "dan 'keduanya membutuhkan tombol shift.
Loïc Faure-Lacroix
10
Jawaban ini bertentangan dengan konvensi python; lihat PEP 257 yang mengatakan: Untuk konsistensi, selalu gunakan "" tanda kutip ganda "" "di sekitar dokumen. python.org/dev/peps/pep-0257
Buttons840
44

Saya dengan Will:

  • Kutipan ganda untuk teks
  • Kutipan tunggal untuk apa pun yang berperilaku seperti pengidentifikasi
  • Literal string mentah ganda yang dikutip untuk regexps
  • Kutipan ganda tiga kali lipat untuk dokumen

Saya akan tetap dengan itu bahkan jika itu berarti banyak yang lolos.

Saya mendapatkan nilai terbaik dari pengidentifikasi tunggal dikutip menonjol karena kutipan. Sisa praktik ada di sana hanya untuk memberikan pengidentifikasi tunggal yang dikutip itu beberapa ruang berdiri.

Garth Kidd
sumber
26

Jika string yang Anda miliki berisi satu, maka Anda harus menggunakan yang lain. Misalnya "You're able to do this",, atau 'He said "Hi!"'. Selain itu, Anda harus konsisten seperti yang Anda bisa (dalam modul, dalam paket, dalam proyek, dalam organisasi).

Jika kode Anda akan dibaca oleh orang-orang yang bekerja dengan C / C ++ (atau jika Anda beralih antara bahasa-bahasa dan Python), maka menggunakan ''untuk string karakter-tunggal, dan ""untuk string yang lebih lama dapat membantu memudahkan transisi. (Demikian juga untuk mengikuti bahasa lain yang tidak dapat dipertukarkan).

Kode Python yang saya lihat di alam cenderung "lebih disukai ', tetapi hanya sedikit. Satu-satunya pengecualian adalah yang """these"""jauh lebih umum daripada '''these''', dari apa yang saya lihat.

Tony Meyer
sumber
21

Komentar tiga kutipan adalah subtopik yang menarik dari pertanyaan ini. PEP 257 menetapkan tiga kutipan untuk string dokumen . Saya melakukan pemeriksaan cepat menggunakan Pencarian Kode Google dan menemukan bahwa tanda kutip rangkap tiga dalam Python sekitar 10x sepopuler tanda kutip tunggal rangkap - Kejadian 1,3 juta vs 131 ribu dalam kode indeks Google. Jadi dalam kasus multi-line kode Anda mungkin akan lebih akrab bagi orang-orang jika menggunakan penawaran rangkap tiga.

jblocksom
sumber
13
"If you're going to use apostrophes, 
       ^

you'll definitely want to use double quotes".
   ^

Untuk alasan sederhana itu, saya selalu menggunakan tanda kutip ganda di luar. Selalu

Berbicara tentang bulu, apa gunanya merampingkan string literal Anda dengan 'jika Anda harus menggunakan karakter melarikan diri untuk mewakili apostrof? Apakah itu menyinggung coders untuk membaca novel? Saya tidak bisa membayangkan betapa menyakitkannya kelas bahasa Inggris sekolah menengah atas untuk Anda!

Droogan
sumber
11
'Jika Anda akan "mengutip" sesuatu yang Anda pasti ingin menggunakan tanda kutip tunggal'
Paolo
Pendapat saya telah banyak berubah sejak saya menulis ini. Sekarang hanya semacam satu situasi di mana saya berpendapat bahwa saya akan menggunakan tanda kutip ganda. Yang lain akan menjadi milik Anda dalam konteks menggunakan tanda kutip tunggal. Lihat jawaban yang diterima untuk sikap saya saat ini tentang masalah ini secara lebih rinci. Saya pikir itu adalah contoh yang bagus tentang bagaimana harus disajikan kepada khalayak luas.
Droogans
7

Python menggunakan tanda kutip sesuatu seperti ini:

mystringliteral1="this is a string with 'quotes'"
mystringliteral2='this is a string with "quotes"'
mystringliteral3="""this is a string with "quotes" and more 'quotes'"""
mystringliteral4='''this is a string with 'quotes' and more "quotes"'''
mystringliteral5='this is a string with \"quotes\"'
mystringliteral6='this is a string with \042quotes\042'
mystringliteral6='this is a string with \047quotes\047'

print mystringliteral1
print mystringliteral2
print mystringliteral3
print mystringliteral4
print mystringliteral5
print mystringliteral6

Yang menghasilkan output sebagai berikut:

this is a string with 'quotes'
this is a string with "quotes"
this is a string with "quotes" and more 'quotes'
this is a string with 'quotes' and more "quotes"
this is a string with "quotes"
this is a string with 'quotes'
Michael
sumber
2
Tetapi """This is a string with "quotes""""memunculkan SyntaxError. Bagaimana situasi ini bisa diselesaikan? (Sama seperti dengan '''This is a string with 'quotes'''')
dolma33
1
Masukkan linebreak antara "tanda kutip" dan "" "
Nicolas
1
@ dolma33 Saran Nicolas akan mengubah isi string. Solusi yang lebih baik sudah ada di jawabannya: jika string Anda diakhiri dengan semacam kutipan, gunakan jenis lain dari kutipan tiga. Misalnya '''This is a string with "quotes"''',.
jpmc26
3

Saya menggunakan tanda kutip ganda secara umum, tetapi tidak untuk alasan tertentu - Mungkin hanya karena kebiasaan dari Jawa.

Saya kira Anda juga lebih cenderung ingin apostrof dalam string literal sebaris daripada Anda ingin tanda kutip ganda.

Matt Sheppard
sumber
3

Secara pribadi saya tetap dengan satu atau yang lain. Itu tidak masalah. Dan memberikan makna Anda sendiri pada salah satu kutipan itu hanya untuk membingungkan orang lain ketika Anda berkolaborasi.

schwa
sumber
2

Ini mungkin preferensi gaya lebih dari apa pun. Saya baru saja memeriksa PEP 8 dan tidak melihat adanya penawaran tunggal versus ganda.

Saya lebih suka tanda kutip tunggal karena hanya satu penekanan daripada dua. Artinya, saya tidak perlu menekan tombol shift untuk membuat kutipan tunggal.

Mike
sumber
1
PEP 8 menghubungkan ke PEP 257 dalam kalimat pertama di bawah "String Dokumentasi". Dalam PEP 257 menyatakan: Untuk konsistensi, selalu gunakan "" "tiga kutip ganda" "" di sekitar dokumen. Gunakan r "" "tanda kutip ganda rangkap" "" jika Anda menggunakan garis miring terbalik di dokumen Anda. Untuk dokumen Unicode, gunakan u "" "Unicode string tiga kutip" "". Tetap saja, saya suka tampilan bersih dari satu kutipan dan satu-satunya alasan mengapa Anda memberi.
maksimal
2

Di Perl Anda ingin menggunakan tanda kutip tunggal ketika Anda memiliki string yang tidak perlu menginterpolasi variabel atau karakter yang lolos seperti \ n, \ t, \ r, dll.

PHP membuat perbedaan yang sama dengan Perl: konten dalam tanda kutip tunggal tidak akan ditafsirkan (bahkan \ n tidak akan dikonversi), sebagai kebalikan dari tanda kutip ganda yang dapat berisi variabel untuk memiliki nilai dicetak.

Python tidak, saya takut. Secara teknis terlihat, tidak ada $ token (atau sejenisnya) untuk memisahkan nama / teks dari variabel dengan Python. Kedua fitur membuat Python lebih mudah dibaca, kurang membingungkan. Kutipan tunggal dan ganda dapat digunakan secara bergantian dalam Python.

Peterino
sumber
Untuk memperkuat apa yang Anda katakan \ n akan ditafsirkan hanya dalam tanda kutip ganda dalam PHP dan Perl, sementara dalam Python akan bekerja baik dalam tanda kutip ganda dan tunggal
stivlo
1
@stivlo: Kecuali Anda akan membuat string mentah darinya, dengan menambahkan rdi depan string literal. Jadi print 'a\nb'akan mencetak Anda dua baris, tetapi print r'a\nb'akan mencetak Anda satu.
Tadeck
1

Saya memilih menggunakan tanda kutip ganda karena lebih mudah dilihat.

Andrew Dalke
sumber
1

Saya hanya menggunakan apapun yang sesuai dengan kesukaan saya pada saat itu; akan lebih mudah untuk dapat beralih di antara keduanya sekaligus!

Tentu saja, ketika mengutip kutipan karakter, beralih di antara keduanya mungkin tidak begitu aneh ...


sumber
0

Selera tim Anda atau pedoman pengkodean proyek Anda.

Jika Anda berada dalam lingkungan multi bahasa, Anda mungkin ingin mendorong penggunaan jenis kutipan yang sama untuk string yang digunakan bahasa lain, misalnya. Selain itu, saya pribadi paling suka tampilan '

Vinko Vrsalovic
sumber
0

Sejauh yang saya tahu tidak ada. Meskipun jika Anda melihat beberapa kode, "" biasanya digunakan untuk string teks (saya kira 'lebih umum di dalam teks daripada "), dan' 'muncul di hashkeys dan hal-hal seperti itu.

Mario F
sumber
0

Saya bertujuan untuk meminimalkan piksel dan kejutan. Saya biasanya lebih suka 'untuk meminimalkan piksel, tetapi "sebaliknya jika string memiliki tanda kutip, sekali lagi untuk meminimalkan piksel. Akan tetapi, untuk dokumen, saya lebih suka """daripada '''karena yang terakhir tidak standar, tidak umum, dan karena itu mengejutkan. Jika sekarang saya memiliki banyak string di mana saya menggunakan "per logika di atas, tetapi juga satu yang bisa lolos dengan ', saya masih dapat menggunakannya "untuk mempertahankan konsistensi, hanya untuk meminimalkan kejutan.

Mungkin ada baiknya memikirkan filosofi minimisasi piksel dengan cara berikut. Apakah Anda lebih suka karakter bahasa Inggris itu seperti A B Catau AA BB CC? Pilihan terakhir membuang 50% dari piksel yang tidak kosong.

Acumenus
sumber
-1

Saya menggunakan tanda kutip ganda karena saya telah melakukannya selama bertahun-tahun di sebagian besar bahasa (C ++, Java, VB ...) kecuali Bash, karena saya juga menggunakan tanda kutip ganda dalam teks normal dan karena saya menggunakan keyboard non-Inggris (dimodifikasi) di mana kedua karakter memerlukan tombol shift.

Philipp
sumber
-4

' = "

/= \=\\

contoh:

f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")

Hasilnya sama

= >> tidak, mereka tidak sama. Satu garis miring terbalik akan keluar dari karakter. Anda hanya kebetulan keberuntungan dalam contoh bahwa karena \kdan \wtidak lolos berlaku seperti \tatau \natau \\atau\"

Jika Anda ingin menggunakan garis miring terbalik tunggal (dan menafsirkannya seperti itu), maka Anda perlu menggunakan string "mentah". Anda dapat melakukan ini dengan meletakkan ' r' di depan string

im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'

Sejauh jalur di Windows yang bersangkutan, garis miring diinterpretasikan dengan cara yang sama. Jelas string itu sendiri berbeda. Saya tidak akan menjamin bahwa mereka ditangani dengan cara ini pada perangkat eksternal.

kn3l
sumber
Omong kosong, ini sudah tua, tetapi saya tetap ingin berkomentar untuk menunjukkan bahwa menggunakan garis miring dapat bekerja untuk windows tetapi masih bergantung pada sistem. Untuk memastikan Anda bebas dari ketergantungan, gunakanos.path.join()
Adam Smith