Menurut dokumentasi, mereka cukup banyak dipertukarkan. Apakah ada alasan gaya untuk menggunakan satu di atas yang lain?
Menurut dokumentasi, mereka cukup banyak dipertukarkan. Apakah ada alasan gaya untuk menggunakan satu di atas yang lain?
Jawaban:
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
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.
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 .
"
hanya memerlukan tombol shift pada keyboard QWERTY PC. Di keyboard saya, "
sebenarnya lebih mudah untuk mengetik.
Saya dengan Will:
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.
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.
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.
"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!
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'
"""This is a string with "quotes""""
memunculkan SyntaxError. Bagaimana situasi ini bisa diselesaikan? (Sama seperti dengan '''This is a string with 'quotes''''
)
'''This is a string with "quotes"'''
,.
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.
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.
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.
r
di depan string literal. Jadi print 'a\nb'
akan mencetak Anda dua baris, tetapi print r'a\nb'
akan mencetak Anda satu.
Saya memilih menggunakan tanda kutip ganda karena lebih mudah dilihat.
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 ...
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 '
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 C
atau AA BB CC
? Pilihan terakhir membuang 50% dari piksel yang tidak kosong.
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.
'
= "
/
= \
=\\
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 \k
dan \w
tidak lolos berlaku seperti \t
atau \n
atau \\
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.
os.path.join()