2014-04-29 14 views
6

Vì vậy, tôi hiểu rằng nếu tôi làm như sauBa ngoặc kép trong python

print """ Anything I 
      type in here 
      works. Multiple LINES woohoo!""" 

Nhưng nếu đây là kịch bản python của tôi

""" This is my python Script. Just this much """ 

không điều trên làm gì? Nó được lấy làm bình luận? Tại sao nó không phải là một lỗi cú pháp?

Tương tự như vậy, nếu tôi làm

"This is my Python Script. Just this. Even with single quotes." 

như thế nào hai kịch bản trên giải thích?

Cảm ơn

Trả lời

10

Các dấu ngoặc kép ba ''' hay """ nhiều cách khác nhau chỉ đại diện cho chuỗi. Lợi thế của dấu ngoặc kép là nó có thể mở rộng nhiều dòng và đôi khi phục vụ như docstrings.

Lý do:

"hadfasdfas"

không tăng bất kỳ lỗi là vì python chỉ đơn giản là tạo ra chuỗi và sau đó không gán nó vào bất cứ điều gì. Đối với trình thông dịch python, nó hoàn toàn ổn nếu bạn có một câu lệnh vô nghĩa trong mã của bạn miễn là không có lỗi cú pháp hoặc ngữ nghĩa

Hy vọng điều đó sẽ hữu ích.

2

Chuỗi chỉ được đánh giá và thông dịch viên nhận thấy nó không được gán cho bất kỳ thứ gì, ném nó đi.

Nhưng ở một số nơi đặc biệt, chuỗi này được thực gán cho __doc__ tài sản của mục:

def func(arg): 
    """ 
    Does stuff. This string will be evaluated and assigned to func.__doc__. 
    """ 
    pass 

class Test: 
    """ 
    Same for Test.__doc__ 
    """ 
    pass 

Ở phía trên của module.py:

""" 
module does stuff. this will be assigned to module.__doc__ 
""" 
def func(): 
... 
+2

Thực ra trong tài liệu, nó được gắn với 'func .__ doc__' – wim

+0

Vâng, tôi đã bỏ lỡ điều đó. Cảm ơn – MadeOfAir

1

Ngoài @ sshashank124 câu trả lời tôi phải thêm rằng chuỗi được trích dẫn ba cũng được sử dụng trong thử nghiệm https://docs.python.org/2/library/doctest.html

Vì vậy, hãy xem xét đoạn mã này:

def some_function(x, y): 
"""This function should simply return sum of arguments. 
It should throw an error if you pass string as argument 

>>> some_function(5, 4) 
9 
>>> some_function(-5, 4) 
-1 
>>> some_function("abc", 4) 
Traceback (most recent call last): 
    ... 
ValueError: arguments must numbers 
""" 
if type(x, str) or type(y, str): 
    raise ValueError("arguments must numbers") 
else: 
    return x + y 

if __name__ == "__main__": 
    import doctest 
    doctest.testmod() 

Nếu bạn nhập mô-đun cực nhỏ này, bạn sẽ nhận được hàm some_function.
Nhưng nếu bạn gọi tập lệnh này trực tiếp từ trình bao, các thử nghiệm được đưa ra trong chuỗi được trích dẫn ba sẽ được đánh giá và báo cáo sẽ được in ra đầu ra.

Vì vậy, chuỗi được trích dẫn ba có thể được coi là giá trị của chuỗi loại, dưới dạng nhận xét, dưới dạng docstrings và là vùng chứa cho unittests.

+0

Tôi không nhận được nó, vì vậy chính xác những gì xảy ra khi tôi chạy kịch bản này. Đối với một, tôi không chắc chắn những gì sẽ là giá trị cho x và y? Bạn có thể vui lòng xây dựng. Cảm ơn – Kraken

+0

Nếu bạn lưu tệp dưới dạng tệp có phần mở rộng '.py' như' some_module.py', nó sẽ trở thành một mô-đun. Nếu bạn nhập nó thì '__name__ == '__main __" 'là' Sai' để không có ma thuật xảy ra. Nhưng nếu bạn gọi nó từ shell, tức là'python some_module.py' hai dòng cuối cùng được thực thi. Trong trường hợp này, 'doctest.testmod()' sẽ quét docstring để gỡ bỏ Python. Vì vậy, nó tìm thấy '>>>' có nghĩa là 'thực thi'. Trong đoạn trích đầu tiên của tôi, các cuộc gọi unittest là 'some_function (5, 4)'. Kết quả mong đợi của cuộc gọi này được đặt ở dòng tiếp theo. Đôi khi ngoại lệ được mong đợi như trong unittest thứ ba. Kiểm tra thành công nếu kết quả như mong đợi. – ElmoVanKielmo

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