วิธีที่เหมาะสมในการแสดงความคิดเห็นฟังก์ชั่นใน Python คืออะไร?


174

มีวิธียอมรับฟังก์ชั่นใน Python หรือไม่? ยอมรับได้ดังต่อไปนี้หรือไม่?

#########################################################
# Create a new user
#########################################################
def add(self):

คำตอบ:


318

วิธีที่ถูกต้องที่จะทำคือการให้ docstring ด้วยวิธีนี้help(add)จะคายความคิดเห็นของคุณ

def add(self):
    """Create a new user.
    Line 2 of comment...
    And so on... 
    """

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

ดู: PEP 257


10
โปรดทราบว่าไม่จำเป็นต้องยกมาเป็นสามเท่า สตริงตัวอักษรใด ๆ จะทำงาน แต่คุณสามารถใส่ข้อมูลเพิ่มเติมในสตริงหลายบรรทัด
Ignacio Vazquez-Abrams

5
แม้ว่าการประชุมกำหนดว่าควรจะยกมาสาม ฉันไม่เคยเห็น docstring ที่ไม่ใช่
Chinmay Kanchi

2
ซึ่งไม่ได้บอกว่าฉันไม่เห็นด้วย พวกเขาควรจะยกมาสามเท่า แต่คุณจะเห็นบางอย่างในป่าที่ไม่ได้
jcdyer

7
คุณยังสามารถใช้อัญประกาศเดี่ยวสามตัว (แทนที่จะเป็นเครื่องหมายคำพูดคู่สามคำ) เพื่อเปิดและปิด docstring
Craig McQueen

คุณไม่ควรเยื้องความคิดเห็นเช่นกัน?
joctee

25

ใช้ docstring ตามที่คนอื่นเขียนไปแล้ว

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


3
คำตอบนี้ค่อนข้างอ่อนแอโดยไม่ผ่านหน้าเชื่อมโยง
xaxxon

18

ใช้docstring :

สตริงตัวอักษรที่เกิดขึ้นเป็นคำสั่งแรกในโมดูลฟังก์ชั่นชั้นเรียนหรือวิธีการกำหนด docstring เช่นนั้นจะกลายเป็น__doc__คุณสมบัติพิเศษของวัตถุนั้น

โดยปกติโมดูลทั้งหมดควรมีเอกสารและฟังก์ชั่นและคลาสทั้งหมดที่ส่งออกโดยโมดูลควรมีเอกสารด้วย วิธีการสาธารณะ (รวมถึงตัว__init__สร้าง) ควรมีเอกสาร แพคเกจอาจได้รับการบันทึกไว้ใน docstring โมดูลของ__init__.pyไฟล์ในไดเรกทอรีแพคเกจ

ตัวอักษรสตริงที่เกิดขึ้นที่อื่นในรหัสหลามอาจทำหน้าที่เป็นเอกสาร พวกเขาไม่ได้รับการยอมรับจากคอมไพเลอร์ Python bytecode และไม่สามารถเข้าถึงได้เป็นคุณลักษณะวัตถุรันไทม์ (เช่นไม่ได้กำหนดให้__doc__) แต่ docstrings พิเศษสองประเภทอาจถูกดึงออกมาโดยเครื่องมือซอฟต์แวร์:

  1. สตริงตัวอักษรที่เกิดขึ้นทันทีหลังจากการมอบหมายอย่างง่ายที่ระดับบนสุดของโมดูลคลาสหรือ__init__วิธีการที่เรียกว่า "attribute docstrings"
  2. สตริงตัวอักษรที่เกิดขึ้นทันทีหลังจาก docstring อื่นเรียกว่า "docstrings เพิ่มเติม"

โปรดดูPEP 258 , "Docutils Design Specification" [2] , สำหรับคำอธิบายโดยละเอียดของคุณสมบัติและเอกสารเพิ่มเติม ...


10

หลักการของการแสดงความคิดเห็นที่ดีมีความเป็นส่วนตัว แต่นี่คือแนวทางบางประการ:

  • ความคิดเห็นเกี่ยวกับฟังก์ชันควรอธิบายถึงเจตนาของฟังก์ชั่นไม่ใช่การใช้งาน
  • สรุปสมมติฐานใด ๆ ที่ฟังก์ชันของคุณทำเกี่ยวกับสถานะของระบบ ถ้ามันใช้ตัวแปรทั่วโลก (tsk, tsk) รายการเหล่านั้น
  • ระวังมากเกินไปศิลปะ ASCII การมีแฮชที่มีสายยาวอาจทำให้อ่านง่ายขึ้น แต่มันอาจสร้างความรำคาญให้กับเมื่อความคิดเห็นเปลี่ยนไป
  • ใช้ประโยชน์จากคุณสมบัติด้านภาษาที่มี 'เอกสารอัตโนมัติ' เช่น docstrings ใน Python, POD ใน Perl และ Javadoc ใน Java

7
ไม่มีอะไรเกี่ยวกับเรื่องนี้เลย Python มีความชัดเจนมากเกี่ยวกับการใช้ความคิดเห็น Docstring

@ folly lollipop ฉันขอขอบคุณความคิดเห็น แต่คุณจะทราบว่าจุดสุดท้ายของฉันทำให้จุดที่แน่นอน บางทีคำถามของ OP เป็นเพียงกลไกของการแสดงความคิดเห็นใน Python แต่ฉันไม่คิดว่าคำตอบของฉันรับประกันการลงคะแนน
Dancrumb

7

อ่านเกี่ยวกับการใช้docstringsในรหัสหลามของคุณ

ตามระเบียบของdocstring Python :

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

จะไม่มีกฎทองคำ แต่ให้ความเห็นที่มีความหมายกับนักพัฒนาคนอื่น ๆ ในทีมของคุณ (ถ้าคุณมี) หรือแม้แต่กับตัวคุณเองเมื่อคุณกลับมาใช้มันอีกหกเดือน


5

ฉันจะไปหาเอกสารการปฏิบัติที่ทำงานร่วมกับเครื่องมือเอกสารเช่นสฟิงซ์

ขั้นตอนแรกคือการใช้docstring:

def add(self):
 """ Method which adds stuff
 """

2

ฉันจะไปอีกขั้นมากกว่าแค่พูดว่า "ใช้ docstring" เลือกเครื่องมือสร้างเอกสารเช่น pydoc หรือ epydoc (ฉันใช้ epydoc ใน pyparsing) และใช้ไวยากรณ์มาร์กอัปที่เครื่องมือดังกล่าวรู้จัก เรียกใช้เครื่องมือนั้นบ่อยครั้งขณะที่คุณทำการพัฒนาเพื่อระบุช่องโหว่ในเอกสารของคุณ ในความเป็นจริงคุณอาจได้รับประโยชน์จากการเขียนเอกสารสำหรับสมาชิกของชั้นเรียนก่อนที่จะดำเนินการชั้นเรียน


2

ใช้docstrings

นี่คือการประชุมที่แนะนำในตัวในPyCharmสำหรับความคิดเห็นคำอธิบายฟังก์ชัน:

def test_function(p1, p2, p3):
    """
    my function does blah blah blah

    :param p1: 
    :param p2: 
    :param p3: 
    :return: 
    """

ไม่ควรที่จะเยื้อง (หลังจากสายด้วยdef) (ไม่ใช่คำถามเชิงโวหาร)
Peter Mortensen

0

ขณะที่ฉันเห็นว่าเรื่องนี้ไม่ควรที่จะแสดงความคิดเห็น แต่ docstring เป็นส่วนใหญ่ (ทั้งหมด?) คำตอบที่แนะนำให้ผมต้องการที่จะเพิ่มnumpydoc (เป็นคู่มือสไตล์ docstring)

หากคุณทำสิ่งนี้คุณสามารถ (1) สร้างเอกสารโดยอัตโนมัติและ (2) คนรู้จักและอ่านรหัสของคุณได้ง่ายขึ้น


0

คุณสามารถใช้สามคำพูดเพื่อทำมัน

คุณสามารถใช้เครื่องหมายคำพูดเดี่ยว:

def myfunction(para1,para2):
  '''
  The stuff inside the function
  '''

หรือเครื่องหมายคำพูดคู่:

def myfunction(para1,para2):
  """
  The stuff inside the function
  """
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.