2013-03-12 32 views
16

Với ví dụ chức năng này:Trong python, nếu một hàm không có câu lệnh return thì nó sẽ trả về cái gì?

def writeFile(listLine,fileName): 
    '''put a list of str-line into a file named fileName''' 
    with open(fileName,'a',encoding = 'utf-8') as f: 
     for line in listLine: 
      f.writelines(line+'\r\n') 
    return True 

Liệu tuyên bố return True này làm bất cứ điều gì hữu ích?

Sự khác nhau giữa nó và không có nó là gì? Điều gì sẽ xảy ra nếu không có chức năng trả về?

+0

Hàm sẽ luôn trả về 'True' hoặc tăng lỗi, vì vậy' return' không quá hữu dụng ở đây. – Blender

+0

cảm ơn bạn! và những câu trả lời của bạn đã truyền cảm hứng cho tôi rất nhiều, tôi nghĩ rằng tôi sẽ hỏi thêm về stackoverflow và cũng làm những gì tôi có thể. –

+1

FYI, 'f.writelines (dòng + '\ r \ n')' xảy ra để hoạt động, nhưng nó vô cùng lãng phí; nó xử lý đối số như một chuỗi và viết ra từng phần tử; 'str' có thể lặp lại các ký tự của chúng, do đó, nó có hiệu quả' write'-ing từng ký tự riêng lẻ (bộ đệm giúp bạn tiết kiệm chi phí cuộc gọi hệ thống thực tế, nhưng nó vẫn còn nhiều công việc hơn). 'f.write (dòng + '\ r \ n')' sẽ nhận được kết quả tương tự, và viết dưới dạng một khối, chứ không phải ký tự theo ký tự. – ShadowRanger

Trả lời

23

Nếu hàm không chỉ định giá trị trả về, hàm trả về None.

Trong câu lệnh có điều kiện if/then, None đánh giá là Sai. Vì vậy, về lý thuyết bạn có thể kiểm tra giá trị trả về của hàm này để thành công/thất bại. Tôi nói "trong lý thuyết" bởi vì đối với mã trong câu hỏi này, chức năng không bắt hoặc xử lý các ngoại lệ và có thể yêu cầu tăng cường thêm.

+1

+1 để thực sự giải thích rằng None bằng False về mặt giá trị chân lý. –

+0

tôi xin lỗi tôi chỉ là người mới bắt đầu, tôi sẽ chăm sóc khi chức năng cần xử lý exception.by cách, tôi đã thử nghiệm rằng nếu tôi trở về không có gì, nó sẽ trả lại None.thanks –

1

Hàm luôn trả về None nếu không rõ ràng return.

0

Nếu bạn có return True ở phần cuối của các chức năng, bạn có thể nói những thứ như: a=writeFile(blah, blah)

Tuy nhiên, bởi vì nó sẽ luôn luôn được True, nó hoàn toàn vô nghĩa. Nó sẽ là tốt hơn để trở Đúng nếu tập tin đã được viết một cách chính xác, vv

Nếu bạn không gửi lại một cách rõ ràng bất cứ điều gì, giá trị sẽ được None

+0

cảm ơn cho câu trả lời ur –

+0

Tôi nghĩ rằng nó không , trên thực tế, chỉ trả về True nếu tệp được viết chính xác. – Robert

0

Nó không có ý nghĩa nhiều để có một tuyên bố lợi nhuận trên của riêng nó mà không bị phân bổ hoặc kiểm tra chức năng.

Trả về Python Không nếu không có gì được trả lại. Trong trường hợp của bạn, bạn có thể trả về true nếu tệp mở và ghi là thành công

+0

cảm ơn câu trả lời của bạn. tôi cảm thấy mát mẻ khi tôi có thể nhận được sự giúp đỡ từ ngàn dặm xa. –

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