ตามเอกสารประกอบพวกมันค่อนข้างใช้แทนกันได้ มีเหตุผลโวหารที่จะใช้อย่างใดอย่างหนึ่งมากกว่าอื่น ๆ ?
ตามเอกสารประกอบพวกมันค่อนข้างใช้แทนกันได้ มีเหตุผลโวหารที่จะใช้อย่างใดอย่างหนึ่งมากกว่าอื่น ๆ ?
คำตอบ:
ฉันชอบใช้อัญประกาศรอบ ๆ สตริงที่ใช้สำหรับการแก้ไขหรือที่เป็นข้อความภาษาธรรมชาติและอัญประกาศเดี่ยวสำหรับสตริงที่มีลักษณะคล้ายสัญลักษณ์ขนาดเล็ก แต่จะแบ่งกฎหากสตริงมีคำพูดหรือหากฉันลืม ฉันใช้เครื่องหมายคำพูดคู่สามเท่าสำหรับ docstrings และตัวอักษรสตริงดิบสำหรับนิพจน์ทั่วไปแม้ว่าจะไม่จำเป็นก็ตาม
ตัวอย่างเช่น:
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 :
ในภาษาอังกฤษล้วน: ตัวอักษรสตริงสามารถล้อมรอบในการจับคู่คำพูดเดียว (') หรือเครื่องหมายคำพูดคู่ (")
ดังนั้นจึงไม่มีความแตกต่าง แต่คนจะบอกให้คุณเลือกแล้วแต่จำนวนใดรูปแบบที่ตรงกับบริบทและเพื่อให้สอดคล้อง และฉันก็เห็นด้วย - เสริมว่ามันไม่มีประโยชน์ที่จะพยายามคิด "การประชุม" สำหรับเรื่องแบบนี้เพราะคุณจะทำให้ผู้มาใหม่สับสน
ผมเคยชอบ'
โดยเฉพาะอย่างยิ่งสำหรับการที่ผมพบ'''docstrings'''
"""this creates some fluff"""
นอกจากนี้ยัง'
สามารถพิมพ์ได้โดยไม่ต้องShiftคีย์บนแป้นพิมพ์ภาษาสวิสเยอรมันของฉัน
ฉันมีการเปลี่ยนแปลงตั้งแต่การใช้คำพูดที่สามสำหรับ"""docstrings"""
, เพื่อให้สอดคล้องกับPEP 257
"
ต้องใช้ปุ่ม Shift บนแป้นพิมพ์ QWERTY ของพีซีเท่านั้น บนแป้นพิมพ์ฉันพิมพ์"
ได้ง่ายกว่าจริง ๆ
ฉันจะด้วย:
ฉันจะยึดติดกับสิ่งนั้นแม้ว่ามันจะมีความหมายมาก
ฉันได้รับประโยชน์สูงสุดจากตัวระบุที่ยกมาเดี่ยวโดดเด่นเพราะคำพูด ส่วนที่เหลือของการปฏิบัติจะมีเพียงเพื่อให้ตัวระบุที่ยกมาเดียวที่มีห้องยืน
หากสตริงที่คุณมีมีหนึ่งแล้วคุณควรใช้อื่น ๆ ตัวอย่างเช่น"You're able to do this"
, หรือ'He said "Hi!"'
หรือนอกเหนือจากนั้นคุณควรจะมีความสอดคล้องเท่าที่จะทำได้ (ภายในโมดูลภายในแพ็คเกจภายในโครงการภายในองค์กร)
หากรหัสของคุณจะถูกอ่านโดยผู้ที่ทำงานกับ C / C ++ (หรือถ้าคุณสลับระหว่างภาษาเหล่านั้นกับ Python) ให้ใช้''
สำหรับสตริงอักขระเดี่ยวและ""
สำหรับสตริงที่ยาวขึ้นอาจช่วยให้การเปลี่ยนแปลงง่ายขึ้น (เช่นเดียวกันสำหรับการติดตามภาษาอื่นที่ไม่สามารถใช้แทนกันได้)
รหัส Python ที่ฉันเห็นใน wild มีแนวโน้มที่จะโปรดปราน"
มากกว่า'
แต่เพียงเล็กน้อยเท่านั้น ข้อยกเว้นอย่างหนึ่งคือมัน"""these"""
เป็นเรื่องธรรมดามากกว่า'''these'''
สิ่งที่ฉันได้เห็น
ความคิดเห็นที่ยกมาเป็นสามเท่าเป็นหัวข้อย่อยที่น่าสนใจของคำถามนี้ PEP 257 ระบุคำพูดที่สามสำหรับสตริง ฉันทำการตรวจสอบอย่างรวดเร็วโดยใช้ Google Code Search และพบว่าการเสนอราคาสองเท่าใน Pythonประมาณ 10 เท่าเป็นที่นิยมเท่ากับการเสนอราคาเดียวสามครั้ง - 1.3M เทียบกับ 131K ที่เกิดขึ้นในรหัสดัชนีของ Google ดังนั้นในกรณีที่มีหลายบรรทัดรหัสของคุณอาจจะเป็นที่คุ้นเคยกับคนมากขึ้นถ้ามันใช้คำพูดสองเท่า
"If you're going to use apostrophes,
^
you'll definitely want to use double quotes".
^
ด้วยเหตุผลง่ายๆนั้นฉันมักจะใช้เครื่องหมายคำพูดคู่ด้านนอกเสมอ เสมอ
เมื่อพูดถึงปุยสิ่งที่ดีคือการทำให้ตัวอักษรสตริงของคุณเพรียวลงด้วย 'ถ้าคุณจะต้องใช้อักขระเลี่ยงเพื่อแสดงเครื่องหมายอะโพสโทรฟี? มันทำให้ผู้อ่านอ่านนิยายผิดหรือไม่? ฉันนึกไม่ออกว่าชั้นเรียนภาษาอังกฤษโรงเรียนมัธยมที่เจ็บปวดสำหรับคุณนั้นเป็นอย่างไร!
Python ใช้เครื่องหมายคำพูดแบบนี้:
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
ซึ่งให้ผลลัพธ์ต่อไปนี้:
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""""
เพิ่ม SyntaxError สถานการณ์นี้จะแก้ไขได้อย่างไร? (เช่นเดียวกับ'''This is a string with 'quotes''''
)
'''This is a string with "quotes"'''
.
ฉันใช้อัญประกาศโดยทั่วไป แต่ไม่ใช่ด้วยเหตุผลเฉพาะ - อาจเป็นเพราะนิสัยจาก Java
ฉันเดาว่าคุณมีแนวโน้มที่จะต้องการอะพอสโทรฟีในสตริงตัวอักษรแบบอินไลน์มากกว่าที่คุณจะต้องการอัญประกาศ
ส่วนตัวฉันติดกับอย่างใดอย่างหนึ่ง มันไม่สำคัญ และการให้ความหมายของคุณเองในการอ้างถึงก็เพื่อทำให้ผู้อื่นสับสนเมื่อคุณทำงานร่วมกัน
มันอาจจะเป็นที่นิยมกว่าทุกอย่างโวหาร ฉันเพิ่งตรวจสอบ PEP 8 และไม่เห็นคำพูดใด ๆ
ฉันชอบคำพูดเดียวเพราะการกดแป้นเพียงครั้งเดียวแทนที่จะเป็นสองครั้ง นั่นคือฉันไม่ต้องบดปุ่ม Shift เพื่อให้พูดอย่างเดียว
ใน Perl คุณต้องการใช้อัญประกาศเดี่ยวเมื่อคุณมีสตริงซึ่งไม่จำเป็นต้องสอดแทรกตัวแปรหรืออักขระที่ใช้ Escape เช่น \ n, \ t, \ r ฯลฯ
PHP สร้างความแตกต่างเช่นเดียวกับ Perl: เนื้อหาในเครื่องหมายคำพูดเดียวจะไม่ถูกตีความ (ไม่ใช่แม้แต่ \ n จะถูกแปลง) ซึ่งต่างกับเครื่องหมายคำพูดคู่ซึ่งสามารถมีตัวแปรที่จะพิมพ์ค่าของพวกเขา
Python ไม่ได้ฉันกลัว ในทางเทคนิคแล้วไม่มีโทเค็นของ $ token (หรือที่คล้ายกัน) เพื่อแยกชื่อ / ข้อความจากตัวแปรใน Python ฟีเจอร์ทั้งสองทำให้ Python อ่านได้ง่ายขึ้นและสับสนน้อยลง คำพูดเดี่ยวและคู่สามารถใช้แทนกันได้ใน Python
r
ด้านหน้าของสตริงตัวอักษร ดังนั้นprint 'a\nb'
จะพิมพ์สองบรรทัด แต่print r'a\nb'
จะพิมพ์หนึ่งบรรทัด
ฉันเลือกที่จะใช้เครื่องหมายคำพูดคู่เพราะง่ายต่อการมองเห็น
ฉันแค่ใช้อะไรก็ตามที่ฉันชอบในเวลา; มันสะดวกที่จะสลับไปมาระหว่างสองคนได้อย่างง่ายดาย!
แน่นอนว่าเมื่ออ้างข้อความอักขระการสลับไปมาระหว่างทั้งสองอาจไม่แปลกเลย ...
รสนิยมของทีมหรือแนวทางการเขียนโค้ดของโครงการของคุณ
หากคุณอยู่ในสภาพแวดล้อมหลายภาษาคุณอาจต้องการส่งเสริมให้ใช้อัญประกาศชนิดเดียวกันสำหรับสตริงที่ภาษาอื่นใช้เช่น อื่น ๆ ส่วนตัวฉันชอบรูปลักษณ์ที่ดีที่สุดของ '
ไม่มีเท่าที่ฉันรู้ แม้ว่าคุณจะดูรหัสบางอย่างก็ตาม "" มักใช้กับสตริงข้อความ (ฉันเดาว่า 'เป็นเรื่องธรรมดามากกว่าข้อความภายใน ") และ' 'จะปรากฏในแฮชคีย์และสิ่งต่าง ๆ เช่นนั้น
ฉันตั้งเป้าที่จะลดจำนวนพิกเซลและทำให้ประหลาดใจ โดยทั่วไปฉันต้องการ'
ลดขนาดพิกเซลให้น้อยลง แต่"
หากสตริงมีเครื่องหมายอะโพสโทรฟีให้ทำการย่อขนาดพิกเซลอีกครั้ง สำหรับ docstring ฉันชอบ"""
มากกว่า'''
เพราะอันหลังไม่ใช่เรื่องธรรมดาผิดปกติและน่าประหลาดใจ หากตอนนี้ฉันมีสตริงจำนวนหนึ่งที่ฉันใช้"
ตามตรรกะข้างต้น แต่ยังมีอีกสตริงหนึ่งที่สามารถใช้ได้กับ a '
ฉันยังอาจใช้"
มันเพื่อรักษาความมั่นคงเท่านั้นเพื่อลดความประหลาดใจ
บางทีมันอาจช่วยให้คิดถึงปรัชญาการย่อขนาดพิกเซลด้วยวิธีต่อไปนี้ คุณจะค่อนข้างที่ตัวอักษรภาษาอังกฤษดูเหมือนA B C
หรือAA BB CC
? ตัวเลือกหลังเสีย 50% ของพิกเซลที่ไม่ว่างเปล่า
ฉันใช้เครื่องหมายคำพูดคู่เพราะฉันทำมาหลายปีในภาษาส่วนใหญ่ (C ++, Java, VB …) ยกเว้น Bash เพราะฉันยังใช้เครื่องหมายคำพูดคู่ในข้อความปกติและเพราะฉันใช้แป้นพิมพ์ที่ไม่ใช่ภาษาอังกฤษ ตัวละครทั้งสองต้องการปุ่ม Shift
'
= "
/
= \
=\\
ตัวอย่าง:
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
และ\w
ไม่ได้หนีที่ถูกต้องเหมือน\t
หรือ\n
หรือ\\
หรือ\"
หากคุณต้องการใช้แบ็กสแลชเดี่ยว (และตีความให้เป็นแบ็กสแลช) คุณต้องใช้สตริง "raw" คุณสามารถทำได้โดยใส่ ' r
' ไว้ข้างหน้าสตริง
im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'
เท่าที่เส้นทางใน Windows มีความเกี่ยวข้องเครื่องหมายทับซ้ายจะถูกตีความเช่นเดียวกัน ชัดเจนสตริงตัวเองแตกต่างกัน ฉันจะไม่รับประกันว่าพวกเขาจัดการวิธีนี้ในอุปกรณ์ภายนอกแม้ว่า
os.path.join()