2014-12-04 16 views
11

Tôi đã tự hỏi liệu có thực hành tốt nhất hay không để tách các đoạn mã bằng Python. Trong MATLAB, ví dụ, hai dấu hiệu bình luận (%%) tạo một phần mã. Tại thời điểm này, tôi đang làm:Các phần riêng biệt trong Python

#### 
## Import libraries 
#### 

import _mssql #Binary here: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql 

#### 
## Connect to db + Query the data 
#### 

q_file = open ("query.txt", "r") 
query = q_file.read().replace('\n', '') 

##Connect to the database 
conn = _mssql.connect(server='', user='', 
         password='', database='') 

##Query the database 
conn.execute_query(query) 
for row in conn: 
    print(row) 

#### 
## Data filtering 
#### 

[...] 
+0

bạn có thể sử dụng dấu ngoặc kép .. ' "" ""' – ThePredator

+4

Nói chung tôi cảm thấy rằng khi bạn cần phải phân chia mô-đun của bạn vào chương khác nhau, đó có nghĩa là nó trở nên quá lớn và cần phải được chia ra qua các tập tin khác nhau một lúc trước đó. – RemcoGerlich

+1

Hoặc bạn đang quá bình luận. –

Trả lời

1

Lên trên mức module sử dụng, thực hiện phần riêng biệt trong các module tương ứng của họ, sau đó đề cập đến những người ở của bạn chính:

import random 
import time 

if time.time() > random.random(): 
    pass 

mức Tiếp (tùy chọn, không nên lạm dụng) sử dụng lớp

class Foo: 
    def function1(): 
     pass 

class Bar: 
    def function2(): 
     pass 

mức Tiếp, những gì bạn cần, chức năng sử dụng

def connect(...): 
    filename = ... 
    params = ...(filename) 
    return mysql.connect(*params) 

def mainloop(...): 
    for xx in connect(): 
     pass 

cấp phụ khối sử dụng

def foo(path=None, port=None): 
    if not path: 
     filename = ... 
     path = ...(filename) 

    if not port: 
     foobar = ... 
     port = ...(foobar) 

    xxx.connect(path, port) 

Subsublevel sử dụng dòng trống và bình luận của

def foo(...): 
    bar.bar() 

    assert path # <-- this is essentially a comment 
    smth_with(path) 
    some_other() 
    data = xxx.yyy() 

    assert data 
    foo = blahblah 
    bar = lambda: blahblah 
    filtered = filter(yada, data) 

    # data is clean at this point # <-- an actual comment 
    for x, y in data: 
     foo.bar.baz() 

suy nghĩ cuối cùng lớn khối bình luận như trong chương trình OQ "c mùi ode. " Bạn có quyền bắt đầu tự hỏi cách sắp xếp mã của mình tại thời điểm này :)

+1

Bạn không hiển thị chuỗi tài liệu ở cấp tệp, mô-đun, lớp và chức năng. Đó là điều cần thiết cho bất kỳ nỗ lực sử dụng mã nào. – tripleee

+0

Bạn chính xác, nhưng thiếu sót đã được dự định. OQ liên quan đến việc tách mã thành các đoạn, và tôi cảm thấy docstring có thể gây hiểu lầm, vì tôi có ý kiến ​​rằng chỉ nên có một chuỗi tài liệu cho mỗi mô-đun, một chuỗi cho mỗi lớp, một cho mỗi hàm; do đó, chuỗi ký tự không thể được sử dụng để tách hai đoạn mã. –

1

Python hoàn toàn tự nhiên cung cấp cấu trúc mô-đun và chuỗi tài liệu cho mọi cấp cấu trúc.

Nhận xét của bạn thường sẽ thuộc về tên hàm hoặc mô tả phương pháp. Sau đó, mã đọc tự nhiên. (Một số nhận xét hiển nhiên là vô dụng, như "Thư viện nhập".)

""" 
Perform stuff. Obviously this documentation should be more specific in reality. 
""" 

import _mssql #Binary here: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pymssql 


def run_query(filename): 
    """ 
    Open connection to database, run the query in the file, and 
    return rows as a list. 
    """ 
    rows = [] 

    q_file = open (filename, "r") 
    query = q_file.read().replace('\n', '') 

    conn = _mssql.connect(server='', user='', 
         password='', database='') 

    conn.execute_query(query) 
    for row in conn: 
     rows.append(row) 

    return rows 

def filter(rows): 
    """ 
    Filter a list of rows: Remove any rows containing 'Albuquerque'. 
    """ 
    # .... 

results = filter(run_query("query.txt")) 

Xem thêm PEP 257 để hướng dẫn nỗ lực tài liệu của bạn.

Các vấn đề liên quan