Câu trả lời:
Tôi thích sử dụng dấu ngoặc kép xung quanh các chuỗi được sử dụng để nội suy hoặc là thông điệp ngôn ngữ tự nhiên và dấu ngoặc đơn cho các chuỗi giống như biểu tượng nhỏ, nhưng sẽ phá vỡ quy tắc nếu chuỗi chứa dấu ngoặc kép hoặc nếu tôi quên. Tôi sử dụng ba dấu ngoặc kép cho các tài liệu và chuỗi ký tự thô cho các biểu thức chính quy ngay cả khi chúng không cần thiết.
Ví dụ:
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
Trích dẫn các tài liệu chính thức tại https://docs.python.org/2.0/ref/strings.html :
Trong tiếng Anh đơn giản: Chuỗi ký tự có thể được đặt trong các dấu ngoặc đơn (') hoặc dấu ngoặc kép (").
Vì vậy, không có sự khác biệt. Thay vào đó, mọi người sẽ bảo bạn chọn bất kỳ phong cách nào phù hợp với bối cảnh và phải nhất quán . Và tôi đồng ý - thêm rằng thật vô nghĩa khi cố gắng đưa ra "quy ước" cho loại điều này bởi vì bạn sẽ chỉ gây nhầm lẫn cho bất kỳ người mới nào.
Tôi đã từng thích '
, đặc biệt là '''docstrings'''
, như tôi tìm thấy """this creates some fluff"""
. Ngoài ra, '
có thể được gõ mà không cần Shiftphím trên bàn phím tiếng Đức Thụy Sĩ của tôi.
Kể từ đó, tôi đã thay đổi sử dụng ba dấu ngoặc kép """docstrings"""
để tuân thủ PEP 257 .
"
chỉ cần một phím shift trên bàn phím PC QWERTY. Trên bàn phím của tôi, "
thực sự dễ dàng hơn để gõ.
Tôi với Will:
Tôi sẽ kiên trì với điều đó ngay cả khi nó có nghĩa là rất nhiều lối thoát.
Tôi nhận được giá trị cao nhất trong số các định danh trích dẫn duy nhất nổi bật vì các trích dẫn. Phần còn lại của thực tiễn là ở đó chỉ để cung cấp cho những định danh được trích dẫn duy nhất một số phòng đứng.
Nếu chuỗi bạn có chứa một chuỗi, thì bạn nên sử dụng chuỗi khác. Ví dụ "You're able to do this"
, hoặc 'He said "Hi!"'
. Ngoài ra, bạn chỉ cần nhất quán nhất có thể (trong một mô-đun, trong một gói, trong một dự án, trong một tổ chức).
Nếu những người làm việc với C / C ++ (hoặc nếu bạn chuyển đổi giữa các ngôn ngữ đó với Python) sẽ đọc mã của bạn, thì việc sử dụng ''
cho các chuỗi ký tự đơn và ""
cho các chuỗi dài hơn có thể giúp dễ dàng chuyển đổi. (Tương tự như vậy để theo các ngôn ngữ khác, nơi chúng không thể thay thế cho nhau).
Mã Python tôi đã thấy trong tự nhiên có xu hướng ủng hộ "
hơn '
, nhưng chỉ một chút. Một ngoại lệ là """these"""
phổ biến hơn nhiều so với '''these'''
, từ những gì tôi đã thấy.
Ba ý kiến trích dẫn là một chủ đề thú vị của câu hỏi này. PEP 257 chỉ định ba dấu ngoặc kép cho chuỗi doc . Tôi đã kiểm tra nhanh bằng cách sử dụng Google Code Search và thấy rằng ba dấu ngoặc kép trong Python phổ biến gấp 10 lần so với ba dấu ngoặc đơn - lần xuất hiện 1,3 triệu so với 131K trong mã chỉ mục của Google. Vì vậy, trong trường hợp nhiều dòng, mã của bạn có thể sẽ quen thuộc hơn với mọi người nếu nó sử dụng ba dấu ngoặc kép.
"If you're going to use apostrophes,
^
you'll definitely want to use double quotes".
^
Vì lý do đơn giản đó, tôi luôn sử dụng dấu ngoặc kép ở bên ngoài. Luôn luôn
Nói về lông tơ, điều gì tốt là hợp lý hóa chuỗi ký tự của bạn với 'nếu bạn sẽ phải sử dụng các ký tự thoát để biểu thị dấu nháy đơn? Nó có xúc phạm các lập trình viên để đọc tiểu thuyết? Tôi không thể tưởng tượng được lớp học tiếng Anh ở trường trung học đau đớn như thế nào đối với bạn!
Python sử dụng dấu ngoặc kép như thế này:
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
Cung cấp đầu ra sau:
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""""
làm tăng một SyntaxError. Làm thế nào tình trạng này có thể được giải quyết? (giống như với '''This is a string with 'quotes''''
)
'''This is a string with "quotes"'''
.
Tôi sử dụng dấu ngoặc kép nói chung, nhưng không vì bất kỳ lý do cụ thể nào - Có lẽ là do thói quen từ Java.
Tôi đoán bạn cũng có nhiều khả năng muốn dấu nháy đơn trong một chuỗi ký tự nội tuyến hơn là bạn muốn có dấu ngoặc kép.
Nó có lẽ là một sở thích phong cách hơn bất cứ điều gì. Tôi chỉ kiểm tra PEP 8 và không thấy bất kỳ đề cập nào về dấu ngoặc đơn so với dấu ngoặc kép.
Tôi thích dấu ngoặc đơn vì nó chỉ có một lần nhấn phím thay vì hai lần. Đó là, tôi không phải nghiền phím shift để trích dẫn.
Trong Perl, bạn muốn sử dụng các dấu ngoặc đơn khi bạn có một chuỗi không cần nội suy các biến hoặc các ký tự thoát như \ n, \ t, \ r, v.v.
PHP tạo ra sự khác biệt tương tự như Perl: nội dung trong các trích dẫn đơn sẽ không được diễn giải (thậm chí sẽ không được chuyển đổi), trái ngược với các trích dẫn kép có thể chứa các biến được in ra giá trị của chúng.
Python không, tôi sợ. Về mặt kỹ thuật, không có mã thông báo $ (hoặc tương tự) để tách tên / văn bản khỏi một biến trong Python. Cả hai tính năng làm cho Python dễ đọc hơn, ít gây nhầm lẫn hơn. Dấu ngoặc đơn và dấu ngoặc kép có thể được sử dụng thay thế cho nhau trong Python.
r
vào trước chuỗi ký tự. Vì vậy, print 'a\nb'
sẽ in cho bạn hai dòng, nhưng print r'a\nb'
sẽ in cho bạn một dòng.
Tôi chọn sử dụng dấu ngoặc kép vì chúng dễ nhìn hơn.
Tôi chỉ sử dụng bất cứ thứ gì nổi bật vào thời điểm đó; thật tiện lợi khi có thể chuyển đổi giữa hai người một cách nhanh chóng!
Tất nhiên, khi trích dẫn trích dẫn, việc chuyển đổi giữa hai người có thể không quá kỳ cục ...
Hương vị nhóm của bạn hoặc hướng dẫn mã hóa dự án của bạn.
Nếu bạn đang ở trong một môi trường đa ngôn ngữ, bạn có thể muốn khuyến khích sử dụng cùng loại trích dẫn cho các chuỗi mà ngôn ngữ khác sử dụng, chẳng hạn. Khác, cá nhân tôi thích nhất cái nhìn của '
Tôi nhằm mục đích giảm thiểu cả pixel và bất ngờ. Tôi thường thích '
để giảm thiểu pixel, nhưng "
thay vào đó, nếu chuỗi có dấu nháy đơn, một lần nữa để thu nhỏ pixel. Tuy nhiên, đối với một chuỗi, tôi thích """
hơn '''
vì cái sau không chuẩn, không phổ biến và do đó đáng ngạc nhiên. Nếu bây giờ tôi có một chuỗi các chuỗi mà tôi đã sử dụng "
theo logic trên, nhưng cũng là một chuỗi có thể thoát khỏi a '
, tôi vẫn có thể sử dụng"
nó để duy trì tính nhất quán, chỉ để giảm thiểu bất ngờ.
Có lẽ nó giúp nghĩ về triết lý tối thiểu hóa pixel theo cách sau. Bạn có muốn các ký tự tiếng Anh trông giống như A B C
hoặc AA BB CC
? Lựa chọn thứ hai lãng phí 50% số pixel không trống.
Tôi sử dụng dấu ngoặc kép vì tôi đã làm như vậy trong nhiều năm qua ở hầu hết các ngôn ngữ (C ++, Java, VB,) ngoại trừ Bash, bởi vì tôi cũng sử dụng dấu ngoặc kép trong văn bản bình thường và vì tôi đang sử dụng bàn phím không phải tiếng Anh (đã sửa đổi) cả hai ký tự đều yêu cầu phím shift.
'
= = "
/
= \
= =\\
thí dụ :
f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")
Kết quả giống nhau
= >> không, chúng không giống nhau. Một dấu gạch chéo ngược sẽ thoát khỏi các ký tự. Bạn chỉ xảy ra với may mắn trong đó ví dụ vì \k
và \w
không thoát hợp lệ như \t
hoặc \n
hoặc\\
hoặc\"
Nếu bạn muốn sử dụng dấu gạch chéo ngược đơn (và được giải thích như vậy), thì bạn cần sử dụng chuỗi "thô". Bạn có thể làm điều này bằng cách đặt một ' r
' trước chuỗi
im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'
Đối với các đường dẫn trong Windows có liên quan, các dấu gạch chéo về phía trước được diễn giải theo cùng một cách. Rõ ràng bản thân chuỗi là khác nhau mặc dù. Tôi sẽ không đảm bảo rằng họ xử lý theo cách này trên một thiết bị bên ngoài.
os.path.join()