Python 101 : Coding style guide

อ่านฉบับเต็มได้ที่ https://www.python.org/dev/peps/pep-0008/#code-lay-out ในเอกสารนี้เอามาเฉพาะเรื่องที่มีคนสอบถามมาบ่อย ๆ
Beautiful is better than ugly.” คำว่า Beautiful ในที่นี้หมายถึงการเขียนให้อ่านง่าย สบายตา การใช้ space, blank line ช่วยได้ เช่น

class A :    def func1(self):        pass
    def func2(self):        pass
class B :    def func1(self):        pass
    def func2(sefl):        pass
ใช้ Indentation หรือการย่อหน้า (tab หรือ space ) ในภาษา Python ใช้สิ่งนี้เป็นการบอกถึง grouping of statements (https://www.quora.com/Why-is-indentation-so-important-in-Python) เราสามารถเลือกใช้ tab หรือ space อย่างใดอย่างหนึ่งใน group of statements เดียวกัน ห้ามใช้ปนกัน (เคยใช้ได้ใน python 2 )

def calculate_sum(number_list):
    sum_list = 0
    for number in number_list:
        sum_list = sum_list + number
    return sum_list
def calculate_mean_sqaure(number_list):
    sum_squares = 0
    for number in number_list:
        sum_squares = sum_squares + number**2
    mean_squares = sum_squares / len(number_list)

    return mean_squares
ความยาวของตัวอักษร ไม่ควรเกิน 79 ตัวอักษรสำหรับ statement และ ไม่ควรเกิน 72 ตัวอักษรสำหรับ comment เป็นข้อแนะนำจาก PEP 8 ไม่ใช่กฏ หากมีความจำเป็นที่ต้องเขียนอะไรที่ยาวๆ เกินกว่านี้เขาแนะนำให้ใช้เทคนิคที่เรียกว่า hanging indent คือการเพิ่ม \n ( เคาะ Enter) หรือ \ (backslash) เช่น
my_str = “Many a times it is required to treat more than one statements in a program as a block.”
ควรเปลี่ยนเป็น
my_str = "Many a times it is required \to treat more than one statements\in a program as a block."
แต่ในกรณที่ข้อมูลอยู่ภายในวงเล็บ Python จะถือว่าข้อมูลมีความต่อเนื่องอยู่แล้ว เช่น
def function(arg_one, arg_two,  arg_three, arg_four):
    return 
จะเหมือนกับ
def function(arg_one, arg_two,
arg_three, arg_four):
return

dict_of_people_ages = {
 "ram": 25,
 "john": 29,
 "shiva": 26
} 
อ่านง่ายกว่า
dict_of_people_ages = { "ram": 25, "john": 29, "shiva": 26 }
One Line on statement การเขียนชุดคำสั่งที่มากกว่า 1 ชุดคำสั่งในหนึ่งบรรทัดทำได้แต่ไม่เป็นนิยม และไม่แนะนำ หากเราต้องการเขียนจะต้องใช้ ; คั่นระหว่างชุดคำสั่ง เช่น
print('one'); print('two')
if x == 1: print('one')
ควรเขียนเป็น
print('one')print('two')

if x == 1:    print('one')
การ Import library นิยม import เข้ามาทีละบรรทัด เช่น
import os, sys
ควรเขียนเป็น
import osimport sys
และเพื่อให้ไล่อ่านหรือ debug ง่าย ก็มีข้อแนะนำลำดับของการ import ไว้แบบนี้
  • standard libraries ควร import เข้ามาก่อน
  • related libraries ควร import ในลำดับต่อมา
  • custom libraries หรือ local libraries เอาไว้หลังสุด
และที่เห็นทำกันบ่อยแต่ก็แนะนำให้เลี่ยงคือการใช้ wild card เช่น
from library_a import *
ประเด็นก็เพื่อความสะดวกในการ debug ครับ
หากเราต้องการตรวจดูว่า style การเขียนของเราเป็นไปตามที่ควรจะเป็นไหม ก็มี tool ช่วยครับ เช่น https://pypi.org/project/pycodestyle/ หรือ ตัวที่ช่วยแก้ให้เลยก็มี คือ black ใช้การติดตั้งผ่าน pip หรือ pip3 (ประสบการณ์ส่วนตัว แก้ให้บ้าง ไม่แก้ให้บ้าง เพราะเป็นเรื่องของ style ไม่ใช่ประเด็นทางด้าน syntax หรือ logic)

Previous
Next Post »