ทำไมงูหลามจึงไม่มีความคิดเห็นหลายบรรทัด?


252

ตกลงฉันทราบว่าสตริงสามใบเสนอราคาสามารถใช้เป็นความคิดเห็นแบบหลายบรรทัดได้ ตัวอย่างเช่น,

"""Hello, I am a 
   multiline comment"""

และ

'''Hello, I am a 
   multiline comment'''

แต่ในทางเทคนิคแล้วการพูดเหล่านี้เป็นสตริง

ฉันอ่านและอ่านคู่มือสไตล์ Python แต่ฉันไม่สามารถหาคำตอบทางเทคนิคได้ว่าทำไมไม่มีการใช้งานแบบหลายบรรทัดอย่างเป็นทางการ / * * / ประเภทความคิดเห็น ฉันไม่มีปัญหาในการใช้คำพูดสามคำ แต่ฉันอยากรู้อยากเห็นเล็กน้อยเกี่ยวกับสิ่งที่นำไปสู่การตัดสินใจออกแบบนี้


8
หากคุณสามารถทำมันเป็นสตริงทำไมต้องเพิ่มวิธีการมากขึ้น?
Brody

12
เพียงแค่ต้องการที่จะเพิ่มว่ามันล้มเหลวหากสิ่งที่คุณพยายามที่จะแสดงความคิดเห็นที่เกิดขึ้นยังมีความคิดเห็น / สตริงหลายสาย และแน่นอนว่าเป็นเหตุผลที่เราต้องการพวกเขา
nycynik

50
@ S.Lott ฉันคิดว่ามันเป็นคำถามที่มีประโยชน์ เพื่อที่จะเข้าใจว่าทำไมไพ ธ อนถึงดีจึงเป็นสิ่งสำคัญที่จะต้องเข้าใจการตัดสินใจในการออกแบบที่เกิดขึ้น คำถามไม่ได้โต้แย้งหรือต่อสู้ มันอยากรู้อยากเห็น ไม่จำเป็นต้องมีความเมตตาเกี่ยวกับความอยากรู้อยากเห็น
Mark E. Haase

6
หากคุณต้องการความคิดเห็นหลายบรรทัดสำหรับ cod เพียงแค่if False:รหัส
AturSams

5
@Brody เนื่องจากมีการประมวลผลสตริง ความคิดเห็นจะถูกละเว้น มีปัญหากับการใช้สตริงเป็นความคิดเห็น แค่มองไปรอบ ๆ :)
ADTC

คำตอบ:


266

ฉันสงสัยว่าคุณจะได้คำตอบที่ดีกว่า "กุยโดไม่รู้สึกต้องการความคิดเห็นหลายบรรทัด"

Guido ได้ทวีตเกี่ยวกับสิ่งนี้:

เคล็ดลับหลาม: คุณสามารถใช้สตริงหลายบรรทัดเป็นความคิดเห็นแบบหลายบรรทัด นอกจากจะใช้เป็นเอกสารพวกเขาจะไม่สร้างรหัส! :-)


28
ดูทวีตของ Guidoในเรื่องนี้
Petr Viktorin

15
ข้อเสียอย่างหนึ่งของการผสมความคิดเห็นของสตริงและบล็อกแบบหลายบรรทัดคือ IDE ไม่มีความคิดว่าคุณต้องการอะไรจึงไม่สามารถแสดงความคิดเห็นในสไตล์ที่แตกต่างได้
Baiyan Huang

21
นอกจากนี้ยังทำให้ไม่สามารถใส่รหัสความคิดเห็นด้วยสตริงหลายบรรทัด (และอาจทำให้เกิดข้อผิดพลาดในการเยื้องหากคุณไม่ระวัง) Ew!
Mike Graham

3
ฉันได้ทำงานในหลาย ๆ สาขาที่หากรหัสของคุณมีรหัสความคิดเห็นแล้วรหัสของคุณจะถูกปฏิเสธและคุณอาจพบว่าตัวเองได้รับเชิญให้อัพเดท CV ลบรหัสที่ไม่จำเป็นออกไม่ใช่ปัญหาหากรหัสอยู่ภายใต้การควบคุมเวอร์ชันหรือใช้if False:ก่อนรหัสที่จำเป็นต้องปิดการใช้งาน
Steve Barnes

4
@SteveBarnes ยอมรับว่ากลุ่มโค้ดที่มีความคิดเห็นไม่เหมาะสมในการผลิตนั้นไม่ดี แต่ฉันไม่เข้าใจว่าทำไมถึงif Falseดีกว่า มันสามารถทำสิ่งเดียวกันได้อย่างสมบูรณ์ในขณะที่ไม่ชัดเจน (เนื่องจากไม่ชัดเจนเท่าที่เห็นว่าบล็อกของรหัสถูกปิดใช้งาน)

59

ความคิดเห็นหลายบรรทัดสามารถแตกหักได้ง่าย ถ้าคุณมีสิ่งต่อไปนี้ในโปรแกรมเครื่องคิดเลขอย่างง่าย

operation = ''
print("Pick an operation:  +-*/")
# Get user input here

ลองแสดงความคิดเห็นด้วยความคิดเห็นแบบหลายบรรทัด:

/*
operation = ''
print("Pick an operation:  +-*/")
# Get user input here
*/

โอ๊ะโอสตริงของคุณมีตัวคั่นความคิดเห็นท้ายสุด


174
สิ่งที่ดีที่สุดเกี่ยวกับคำตอบนี้คือวิธีการจัดการโดยปากกาเน้นข้อความของ SO
Nietzche-jou

73
นี่คือหนึ่งในหลาย ๆ เหตุผลที่เรามีตัวละครในการหลบหนีฉันไม่เห็นว่าเป็นเหตุผลที่ดีที่ไม่มีการสนับสนุนสำหรับความคิดเห็นแบบหลายบรรทัด
Natalie Adams

34
ฉันไม่เข้าใจตรรกะของคุณ - บางทีความคิดเห็นของฉันยังไม่ชัดเจน ถ้าเราใช้ \ เป็นตัวหนี: พิมพ์ ("เลือกการดำเนินการ: + - * \ /") "* /" จะไม่แสดงบล็อกความคิดเห็นที่สิ้นสุดอีกต่อไปตามตัวอักษร / จะถูกพิมพ์อีกต่อไป ไปข้างหน้าและทดสอบสิ่งนี้ใน C ++ ในความเป็นจริงเครื่องมือเน้นไวยากรณ์ของ SO จะแสดงว่าถูกต้อง นี่ไม่ใช่วิชาที่ซับซ้อนมันมีมานานหลายปีในภาษาอื่น ฉันขอให้คุณอัปเดตโพสต์ของคุณเพื่อรวมการใช้อักขระเลี่ยงเพื่อแสดงว่าคุณสามารถใช้ "* /" ในรหัสของคุณ
Natalie Adams

23
จะเกิดอะไรขึ้นถ้ารหัสของคุณมี '' ' oops รหัสของคุณมีตัวคั่นความคิดเห็นสุดท้าย
siamii

21
ความคิดเห็นหลายบรรทัดไม่สามารถแยกย่อยได้โดยเนื้อแท้ เป็นเพียงการติดตั้งใช้งานส่วนใหญ่ของพวกเขา (รวมถึง Python) วิธีที่ชัดเจนในการแสดงความคิดเห็นหลายบรรทัดใน Python ในใจของฉันคือให้ฉันเริ่มบล็อกความคิดเห็นด้วย#:และใช้การเยื้องเพื่อแสดงเมื่อความคิดเห็นสิ้นสุดลง มันสะอาดสอดคล้องและจัดการการซ้อนอย่างสมบูรณ์แบบ
GatesDA

34

ข้อความที่ยกมาเป็นสามส่วนไม่ควรพิจารณาความคิดเห็นแบบหลายบรรทัด โดยการประชุมที่พวกเขาจะdocstrings พวกเขาควรอธิบายว่าโค้ดของคุณทำอะไรและจะใช้อย่างไร แต่ไม่ควรอธิบายสิ่งต่าง ๆ เช่นการใส่ความคิดเห็นลงในบล็อกของโค้ด

จากการอ้างอิงของ Guido ความคิดเห็นหลายบรรทัดใน Python เป็นเพียงความคิดเห็นบรรทัดเดียวที่ต่อเนื่องกัน (ค้นหา "บล็อกความคิดเห็น")

หากต้องการแสดงความคิดเห็นบล็อกของรหัสบางครั้งฉันใช้รูปแบบต่อไปนี้:

if False:
    # A bunch of code

6
ดูเหมือนว่ากุยโดจะทำใจเขาตั้งแต่นั้นมา
Petr Viktorin

5
เกี่ยวกับการแก้ปัญหา "if false:" สิ่งที่เป็นในงูหลามที่ทำงานกับแท็บคุณจะต้องแท็บในรหัสทั้งหมดภายใต้ "if False:" และแกะชิ้นส่วนในภายหลัง ดังนั้นคุณจะต้องสวยเก๋ด้วยโปรแกรมแก้ไขข้อความของคุณ
barlop

3
หากคุณใช้โปรแกรมแก้ไขที่ดีควรใช้เวลาเท่ากันกับ * /
AturSams

@barlop yup - เรียนรู้บรรณาธิการของคุณ! โดยทั่วไปจะสามารถทำได้ภายในไม่กี่วินาทีด้วยV}>>
Triptych

30

สิ่งนี้น่าจะกลับไปสู่แนวคิดหลักที่ว่าควรมีวิธีที่ชัดเจนในการทำงาน สไตล์ความคิดเห็นเพิ่มเติมจะเพิ่มความยุ่งยากที่ไม่จำเป็นและอาจลดความสามารถในการอ่าน


8
นั่นคือปัญหาที่ผมเชื่อ: การใช้สตริงเป็นความคิดเห็นไม่ชัดเจนและละเมิด "วิธีหนึ่งที่จะทำเป็นงานที่หลักการ" ตั้งแต่มีสองวิธีที่จะทำความคิดเห็น: #สตริงและ
GatesDA

1
แต่มันก็ไม่ได้แตกต่างจากสิ่งที่คุณมีในภาษา C-based: / * vs // ดังนั้นฉันไม่เห็นว่ามันแย่ลงอย่างมีนัยสำคัญ
Ben Roberts

//, พิจารณาว่าทำไมใครบางคนต้องการแสดงความคิดเห็นแบบหลายบรรทัด เหตุผลที่ดี: ... ฉันไม่สามารถคิดเกินจริง ๆ "ฉันไม่ต้องพิมพ์ # doohickeys เหล่านี้" และ "ฉันต้องแสดงความคิดเห็นเฉพาะนี้อย่างแม่นยำมากและวิธีที่แม่นยำนั้นไม่ได้ ไม่อนุญาตสำหรับ # ก่อนหน้า " สมมติว่ามีคนต้องการสร้างไดอะแกรม ASCII หรือวางรหัสจาวาสคริปต์เพื่อคัดลอกและวางหากมีปัญหาเกิดขึ้น วิธีหนึ่งที่ชัดเจนในการทำงานที่นี่ไม่ครอบคลุมกรณีขอบของงานนั้น ฉันเห็นด้วยแม้ว่าสไตล์ความคิดเห็นเพิ่มเติมนั้นไม่ดี
Nathan Basanese

3
"ฉันไม่ต้องพิมพ์ # doohickeys มากเท่านี้" นั่นเป็นเหตุผลว่าทำไมทุกภาษาจึงมีการบล็อกความคิดเห็น (/ * .. * /) เชื่อหรือไม่ แต่ฉันชอบที่จะบันทึกว่าโค้ดของฉันทำอะไร: อินพุตเอาท์พุตอัลกอริธึมที่ใช้พารามิเตอร์ ... นั่นคือข้อความจำนวนมากที่ได้รับการแก้ไขด้วย ข้อ จำกัด สำหรับความคิดเห็นบรรทัดเดียวเท่านั้นนั้นไร้สาระเพียงธรรมดา โปรดทราบว่าฉันไม่สนับสนุนวิธีการแสดงความคิดเห็นรหัส - แม้ว่ามันมักจะเป็นประโยชน์เมื่อลองวิธีการอื่นตราบใดที่เข้าใจผลข้างเคียงที่เป็นไปได้ที่รู้จักกันดี
อัลเบิร์ต Godfrind

3
อีกสิ่งหนึ่งที่ฉันไม่พอใจเกี่ยวกับหลามก็คือมันเป็นภาษาที่ออกแบบโดยมนุษย์คนเดียว สิ่งที่กุยโด้กล่าวคือความจริง ... ดังนั้นเราจึงมีสิ่งที่เข้ากันไม่ได้ระหว่างภาษาต่าง ๆ ทำไม เพราะกุยโดพูดอย่างนั้น ...
อัลเบิร์ต Godfrind

12

ทีนี้คำพูดสามคำถูกใช้เป็นความคิดเห็นหลายบรรทัดใน docstrings และมีการใช้ความคิดเห็น # รายการเป็นความคิดเห็นแบบอินไลน์และผู้ใช้ได้รับความคิดเห็น

ภาษาสคริปต์ส่วนใหญ่ไม่มีความคิดเห็นแบบหลายบรรทัดเช่นกัน อาจเป็นสาเหตุหรือไม่

ดูPEP 0008ส่วนความคิดเห็น

และดูว่าเครื่องมือแก้ไข Python ของคุณมีแป้นพิมพ์ลัดสำหรับบล็อกความคิดเห็นหรือไม่ Emacs รองรับเช่นเดียวกับ Eclipse สมมุติว่า IDEs ที่เหมาะสมส่วนใหญ่ทำ



5

ส่วนตัวสไตล์ความคิดเห็นของฉันในการพูด Java เป็นเหมือน

/*
 * My multi-line comment in Java
 */

ดังนั้นการมีความคิดเห็นแบบบรรทัดเดียวเท่านั้นจึงไม่ใช่เรื่องเลวร้ายหากสไตล์ของคุณเป็นแบบอย่างกับตัวอย่างก่อนหน้านี้เพราะในการเปรียบเทียบคุณมี

#
# My multi-line comment in Python
#

VB.NET ยังเป็นภาษาที่มีความคิดเห็นเพียงบรรทัดเดียวและโดยส่วนตัวแล้วฉันพบว่ามันน่ารำคาญเพราะความคิดเห็นจบลงด้วยการดูน้อยชอบความคิดเห็นและอื่น ๆ อีกมากมายเช่นการเสนอราคา

'
' This is a VB.NET example
'

ความคิดเห็นแบบบรรทัดเดียวเท่านั้นจบลงด้วยการใช้อักขระน้อยกว่าความคิดเห็นแบบหลายบรรทัดและมีโอกาสน้อยที่จะถูกหลบหนีโดยตัวละครหลบในคำสั่ง regex บางที? ฉันมักจะเห็นด้วยกับเน็ดว่า



4
# This
# is
# a 
# multi-line
# comment

ใช้บล็อกความคิดเห็นหรือค้นหาและแทนที่ (s / ^ / # / g) ในโปรแกรมแก้ไขของคุณเพื่อให้ได้สิ่งนี้


3

ฉันแก้ไขได้โดยการดาวน์โหลดมาโครสำหรับโปรแกรมแก้ไขข้อความ (TextPad) ที่ให้ฉันสามารถเน้นเส้นแล้วใส่ # ที่บรรทัดแรกของแต่ละบรรทัด มาโครที่คล้ายกันจะลบ # ของ บางคนอาจถามว่าทำไม multiline จำเป็น แต่มีประโยชน์เมื่อคุณพยายามที่จะ "ปิด" บล็อกของรหัสสำหรับการแก้ไขจุดบกพร่อง


1

สำหรับคนอื่นที่กำลังมองหาความคิดเห็นหลายบรรทัดใน Python การใช้รูปแบบการเสนอราคาแบบสามคนสามารถมีผลที่เป็นปัญหาได้เนื่องจากฉันเพิ่งเรียนรู้วิธีที่ยากลำบาก พิจารณาสิ่งนี้:

this_dict = {
    'name': 'Bob',

"""
This is a multiline comment in the middle of a dictionary
"""

    'species': 'Cat'
}

ความคิดเห็นหลายบรรทัดจะถูกซ่อนไว้ในสตริงถัดไปทำให้'species'คีย์ยุ่งเหยิง ดีกว่าที่จะเพียงแค่ใช้#สำหรับความคิดเห็น


0

เนื่องจาก # อนุสัญญาเป็นเรื่องทั่วไปและไม่มีอะไรที่คุณสามารถทำได้ด้วยความคิดเห็นหลายบรรทัดที่คุณไม่สามารถทำได้ด้วยความคิดเห็น # -sign มันเป็นอุบัติเหตุทางประวัติศาสตร์เช่นบรรพบุรุษของ/* ... */ความคิดเห็นจะกลับไปที่ PL / I


0

สมมติว่าพวกเขาคิดว่าไม่จำเป็น เนื่องจากมันง่ายมากที่จะพิมพ์#a commentความคิดเห็นหลายบรรทัดอาจประกอบด้วยความคิดเห็นบรรทัดเดียวจำนวนมาก

สำหรับHTMLในทางกลับกันมีความจำเป็นสำหรับผู้ใช้หลายคน มันยากที่จะพิมพ์<!--comments like this-->ต่อไป


4
นี่ไม่ใช่ประเด็น - มีกรณีการใช้งานที่ชัดเจนสำหรับทั้งบรรทัดเดี่ยวและความคิดเห็นหลายบรรทัด ฉันใช้ทั้งสองอย่างในภาษาอื่น (แม้ว่าฉันรู้ว่าผู้สอนภาษาไพ ธ อนไม่สนใจภาษาอื่น) ;)
johndodo

1
ลองทำสิ่งนี้ด้วยโค้ด 200 บรรทัดซึ่งคุณต้องถอดออกใส่กลับเข้าไปแล้วนำออกมาอีกครั้ง การพิมพ์ # 200 เริ่มต้นของจะเก่าจริงเร็ว
DragonLord

0

นี่เป็นเพียงการคาดเดา .. แต่

เนื่องจากเป็นสตริงจึงมีความหมายบางอย่าง (คอมไพเลอร์ไม่ได้กำจัดพวกเขา) ดังนั้นจึงเหมาะสมที่จะใช้เป็นเอกสาร จริง ๆ แล้วพวกเขากลายเป็นส่วนหนึ่งของASTดังนั้นการแยกเอกสารจะง่ายขึ้น


0

นอกจากนี้การแสดงความคิดเห็นหลายเป็นสุนัขตัวเมีย ขออภัยที่จะพูด แต่ไม่ว่าจะใช้ภาษาใดฉันจะไม่ใช้สิ่งเหล่านี้เพื่อจุดประสงค์ในการตรวจแก้จุดบกพร่อง สมมติว่าคุณมีรหัสเช่นนี้:

void someFunction()
{
    Something
    /*Some comments*/
    Something else
}

จากนั้นคุณจะพบว่ามีบางอย่างในรหัสของคุณที่คุณไม่สามารถแก้ไขได้ด้วยตัวดีบักดังนั้นคุณจึงเริ่มการดีบั๊กด้วยตนเองโดยการคอมเม้นต์โค้ดที่เล็กลงและเล็กลงด้วยการแสดงความคิดเห็นแบบหลายบรรทัด นี่จะทำให้ฟังก์ชัน:

void someFunction()
{ /*
    Something
   /* Comments */
   Something more*/
}

นี่มันน่ารำคาญจริงๆ


3
เอ๊ะเยี่ยมมาก แต่ Python ไม่มี/*ความคิดเห็นในสไตล์
Triptych

17
ถูกต้องเนื่องจากไพ ธ อนไม่มีความคิดเห็นแบบหลายบรรทัดจริงมันเป็นตัวอย่างที่ให้ตัวอย่างยากในไพ ธ อน
martiert

2
โดยส่วนตัวฉันไม่เข้าใจปัญหา เพียงลบส่วนเสริม * / หรือใช้ // เพื่อคอมเมนต์บรรทัดเดียวหากคุณต้องการความแม่นยำ
Natalie Adams

4
มีหลายภาษา (หลายคนทำงานได้ด้วยเหตุผลใดก็ตาม) ซึ่งอนุญาตให้แสดงความคิดเห็นซ้อนกัน ค้นหา "ซ้อน" ในrosettacode.org/wiki/Commentsเพื่อค้นหาตัวอย่าง
Keith

1
ใช่มันจะน่ารำคาญที่จะใส่ความคิดเห็นหลายบรรทัดในความคิดเห็นหลายบรรทัด และในขณะที่ฉันจำเพียงเล็กน้อยของโปรแกรมของฉันในแต่ละครั้งอย่างน้อยฉันก็จำได้ว่าส่วนใดของโปรแกรมที่ฉันกำลังดูอยู่และที่ฉันได้แสดงความคิดเห็น แต่ถ้าคุณจำไม่ได้คุณก็สามารถใช้ความจริงที่ว่า IDE บางตัวทำให้ตัวเอียงเป็นความคิดเห็น อย่างไรก็ตามสำหรับฟังก์ชั่นเล็ก ๆ คุณอาจใช้คอมเม้นท์เดี่ยว ๆ ก็ได้ แต่ถ้าแสดงความคิดเห็นออกเป็นส่วนใหญ่ของโปรแกรมคุณต้องแสดงความคิดเห็นหลายบรรทัดจริงๆ หรือโปรแกรมแก้ไขข้อความที่มีคุณสมบัตินั้น
barlop

0

แสดงความคิดเห็นหลายบรรทัดโดยใช้IDLEบน:

  • Mac OS Xหลังจากเลือกรหัสที่แสดงความคิดเห็นบล็อกของรหัสด้วยCtrl+ 3และ uncomment ใช้+Ctrl4

  • ของ Windowsหลังจากเลือกรหัสที่แสดงความคิดเห็นบล็อกของรหัสที่มีCtrl+ Alt+ 3และ uncomment ใช้Ctrl+ +At4


-1

ฉันจำได้ว่าเคยอ่านเกี่ยวกับผู้ชายคนหนึ่งที่จะใส่ความคิดเห็นหลายบรรทัดของเขาลงในตัวแปรสามตัว:

x = '''
This is my
super-long mega-comment.
Wow there are a lot of lines
going on here!
'''

สิ่งนี้ใช้หน่วยความจำน้อย แต่มันให้ฟังก์ชั่นการแสดงความคิดเห็นหลายบรรทัดและผู้แก้ไขส่วนใหญ่จะเน้นไวยากรณ์ให้คุณ :)

นอกจากนี้ยังง่ายที่จะแสดงความคิดเห็นรหัสออกโดยเพียงแค่ห่อด้วย

x = '''

และ

'''

18
ลบx =และมันไม่ใช้หน่วยความจำใด ๆ
endolith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.