Belgelere göre, hemen hemen değiştirilebilirler. Birini diğerinin üzerinde kullanmak için stilistik bir neden var mı?
Belgelere göre, hemen hemen değiştirilebilirler. Birini diğerinin üzerinde kullanmak için stilistik bir neden var mı?
Yanıtlar:
İnterpolasyon için kullanılan veya doğal dil mesajları olan dizelerin etrafında çift tırnak ve küçük sembol benzeri dizeler için tek tırnak kullanmayı seviyorum, ancak dizeler tırnak içeriyorsa veya unutursam kuralları kıracağım. Ihtiyaç duymasalar bile düzenli ifadeler için docstrings ve raw string literals için üçlü çift tırnak kullanıyorum.
Örneğin:
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
Https://docs.python.org/2.0/ref/strings.html adresindeki resmi dokümanlardan alıntı :
Düz İngilizce: Dize değişmezleri eşleşen tek tırnak işaretleri (') veya çift tırnak işaretleri (") içine alınabilir.
Yani fark yok. Bunun yerine, insanlar size bağlamla eşleşen stili seçmenizi ve tutarlı olmanızı söyleyecektir . Ve kabul ediyorum - bu tür bir şey için "konvansiyonlar" bulmaya çalışmanın anlamsız olduğunu ekleyerek, çünkü sadece yeni gelenleri karıştıracaksınız.
Ben tercih ederdi '
özellikle, '''docstrings'''
ben bulmak gibi """this creates some fluff"""
. Ayrıca, İsviçre Alman klavyemin anahtarı '
olmadan da yazılabilir Shift.
O zamandan beri PEP 257'ye"""docstrings"""
uymak için üçlü tırnak kullanmaya geçtim .
"
yalnızca PC QWERTY klavyesinde bir shift tuşu gerektirir. Klavyemde "
aslında yazmak daha kolay.
Will ile birlikteyim:
Çok fazla kaçış anlamına gelse bile buna bağlı kalacağım.
Tırnaklar nedeniyle öne çıkan tek tırnaklı tanımlayıcılardan en fazla değeri elde ediyorum. Uygulamaların geri kalanı, bu tek tırnaklı tanımlayıcılara ayakta durmak için vardır.
Sahip olduğunuz dize bir tane içeriyorsa, diğerini kullanmalısınız. Örneğin "You're able to do this"
,, veya 'He said "Hi!"'
. Bunun dışında, olabildiğince tutarlı olmalısınız (bir modül içinde, bir paket içinde, bir proje içinde, bir kuruluş içinde).
Kodunuz C / C ++ ile çalışan kişiler tarafından okunacaksa (veya bu diller ve Python arasında geçiş yaparsanız), ''
tek karakterli dizeler ve ""
daha uzun dizeler için kullanmak geçişi kolaylaştırmaya yardımcı olabilir. (Aynı şekilde, değiştirilemedikleri diğer dilleri takip etmek için).
Ben vahşi gördüğüm Python kodu iyilik eğilimi "
üzerinde '
ama sadece biraz. Tek istisna, gördüğümden """these"""
çok daha yaygın '''these'''
.
Üç alıntı yapılan yorumlar bu sorunun ilginç bir alt başlığıdır. PEP 257 doc dizeleri için üçlü alıntılar belirtir . Google Kod Arama'yı kullanarak hızlı bir kontrol yaptım ve Python'daki üçlü çift tırnakların üçlü tek tırnak kadar 10x kadar popüler olduğunu buldum - 1.3M vs Google dizinlerinde 131K olayları. Çok satırlı durumda, kodunuz çift çift tırnak kullanırsa muhtemelen insanlara daha tanıdık gelecektir.
"If you're going to use apostrophes,
^
you'll definitely want to use double quotes".
^
Bu basit sebepten ötürü dışarıda her zaman çift tırnak kullanıyorum. Her zaman
Kabartmadan bahsetmişken, kesme işaretlerini temsil etmek için kaçış karakterleri kullanmak zorunda kalacaksanız, dize değişmezlerinizi düzene sokmak ne işe yarar? Kodlayıcıları roman okumak rahatsız mı ediyor? Lise İngilizce dersinin senin için ne kadar acı verici olduğunu hayal edemiyorum!
Python böyle bir şey kullanır:
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
Hangi aşağıdaki çıktıyı verir:
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""""
bir SyntaxError oluşturur. Bu durum nasıl çözülebilir? (ile aynı '''This is a string with 'quotes''''
)
'''This is a string with "quotes"'''
.
Genel olarak çift tırnak kullanıyorum, ancak herhangi bir sebepten dolayı değil - Muhtemelen Java'dan alışkanlık yok.
Sanırım, satır içi değişmez bir dizede kesme işareti istemek de çift tırnak kullanmaktan daha olasıdır.
Muhtemelen her şeyden çok stilistik bir tercih. Ben sadece PEP 8 kontrol ve tek ve çift tırnak herhangi bir söz görmedim.
Tek tırnakları tercih ederim çünkü iki yerine tek bir tuş vuruşu. Yani, tek bir alıntı yapmak için shift tuşunu ezmek zorunda değilim.
Perl'de, değişkenleri veya \ n, \ t, \ r vb. Gibi kaçan karakterleri enterpolasyona gerek olmayan bir dizeniz olduğunda tek tırnak kullanmak istiyorsunuz.
PHP, Perl ile aynı ayrımı yapar: değerlerinin yazdırılması için değişkenler içerebilen çift tırnakların aksine, tek tırnaklardaki içerik yorumlanmaz (\ n dönüştürülmez).
Python korkmuyor, korkuyorum. Teknik olarak, bir adı / metni Python'daki bir değişkenten ayırmak için $ jetonu (veya benzeri) yoktur. Her iki özellik de Python'u daha okunabilir, daha az kafa karıştırıcı yapar. Tek ve çift tırnaklar Python'da birbirinin yerine kullanılabilir.
r
değişmezinin önüne ekleyerek işlenmemiş bir dize oluşturmazsanız . Böylece print 'a\nb'
size iki satır yazdırır, ancak bir satır print r'a\nb'
yazdırır.
Çift tırnak kullanmayı tercih ettim çünkü görmeleri daha kolay.
Ben sadece o zaman benim fantezi vurur ne olursa olsun kullanın; bir kapris ile ikisi arasında geçiş yapabilmek uygun!
Tabii ki, alıntı karakterlerden alıntı yaparken, ikisi arasında geçiş yapmak sonuçta çok tuhaf olmayabilir ...
Ekibinizin tadı veya projenizin kodlama yönergeleri.
Çok dilli bir ortamdaysanız, örneğin diğer dilin kullandığı dizeler için aynı türde tırnakların kullanılmasını teşvik etmek isteyebilirsiniz. Else, ben şahsen '
Hem pikselleri hem de sürprizleri en aza indirmeyi hedefliyorum. Tipik olarak '
pikselleri küçültmek için tercih ederim , ancak "
bunun yerine dize bir kesme işareti varsa, yine pikselleri küçültmek için. Bununla birlikte, bir doktora için tercih ederim """
, '''
çünkü ikincisi standart dışı, nadir ve bu nedenle şaşırtıcıdır. Şimdi "
yukarıdaki mantığa göre kullandığım bir dizi dizim varsa, ama aynı zamanda bir ile kurtulabilen bir dizim varsa, yine de tutarlılığı korumak için '
kullanabilirim "
, sadece sürprizleri en aza indirgemek için.
Belki de piksel küçültme felsefesini aşağıdaki şekilde düşünmeye yardımcı olur. İngilizce karakterlerin benzemesini A B C
ister AA BB CC
misiniz? İkinci seçenek boş olmayan piksellerin% 50'sini harcar.
'
= "
/
= \
=\\
misal :
f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")
Sonuçlar aynı
= >> hayır, aynı değiller. Tek bir ters eğik çizgi karakterlerden kaçacaktır. Sen sırf örnekte dışarı şans olur \k
ve \w
benzeri geçerli kaçar değildir \t
ya \n
ya \\
ya\"
Tek ters eğik çizgi kullanmak istiyorsanız (ve bu şekilde yorumlanmasını istiyorsanız), bir "raw" dizesi kullanmanız gerekir. Bunu r
dizenin önüne bir ' ' koyarak yapabilirsiniz
im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'
Windows'taki yollar söz konusu olduğunda, eğik çizgiler aynı şekilde yorumlanır. Açıkçası dize kendisi farklıdır. Yine de harici bir cihazda bu şekilde ele alındıklarını garanti etmem.
os.path.join()