2010-05-20 23 views
9

Tôi là một lập trình viên java, nhưng giờ đây đã nhập "lĩnh vực python" cho một số công cụ mà Python hoạt động tốt hơn. Tôi khá chắc chắn một phần tốt của mã của tôi sẽ trông kỳ lạ cho một lập trình Python (ví dụ: sử dụng dấu ngoặc đơn trên mỗi nếu).Các gợi ý về khả năng đọc của Python đối với một lập trình viên Java

Tôi biết mỗi ngôn ngữ có quy ước riêng và tập hợp "thói quen". Vì vậy, từ một quan điểm dễ đọc các quy ước và thực hành là "con đường để đi" trong Java, nhưng không thực sự là "cách thức nhiệt tình" để làm công cụ?

+0

Tôi chính xác có cùng một câu hỏi trong tâm trí :) – Snehal

+0

giữ một tâm trí cởi mở ... python theo bản chất được cho là có thể đọc được ... nó sẽ rõ ràng bằng cách hiểu một số khái niệm như cắt, lambdas, trang trí, vv – Perpetualcoder

Trả lời

8

Không có câu trả lời đơn giản cho câu hỏi đó. Cần có thời gian để mã của bạn là "Pythonic". Đừng cố gắng tạo lại các thành ngữ Java bằng Python. Nó sẽ chỉ mất thời gian để học thành ngữ Python.

Hãy xem Code Like a Pythonista: Idiomatic Python, Style Guide for Python CodePython for Java Programmers (archived).

+4

I Mã thứ hai Giống như một Pythonista. –

+2

Và "Python không phải là Java". http://dirtsimple.org/2004/12/python-is-not-java.html –

3

Nơi tốt nhất để bắt đầu có lẽ là PEP-8, là hướng dẫn kiểu Python chính thức. Nó bao gồm rất nhiều điều cơ bản cho những gì được coi là tiêu chuẩn.

+0

Chỉ là tôi, hoặc có PEP-8 được tham chiếu khá thường xuyên hơn một chút trong những ngày gần đây nhất? –

+0

Nó đã được thường xuyên tham chiếu trong một thời gian khá xa như tôi đã nhìn thấy. – Amber

0

"Mọi thứ là một lớp" là một thành ngữ Java, đặc biệt không phải là một thành ngữ Python. (Hầu hết) mọi thứ đều có thể là một lớp trong Python, và nếu đó là cách thoải mái hơn cho bạn thì hãy tìm nó, nhưng Python không yêu cầu một thứ như vậy. Python không phải là một ngôn ngữ hướng đối tượng thuần túy, và trong kinh nghiệm của tôi (có giới hạn) thì tốt hơn là nên làm điều đó với trái tim.

5

Jacob Hallén đã từng quan sát thấy kiểu Python tốt nhất sau khi loại bỏ trang trí của Tufte không phải là ngôn ngữ lập trình, nhưng hiển thị thông tin trực quan): không lãng phí "mực" (pixel) hoặc "giấy" (không gian) để trang trí đơn giản. Rất nhiều sau nguyên tắc này: không có dấu ngoặc đơn thừa, không có dấu chấm phẩy, không có "hộp ascii" ngớ ngẩn trong bình luận và docstrings, không có không gian lãng phí để "sắp xếp" mọi thứ trên các hàng khác nhau, trích dẫn đơn trừ khi bạn cần báo giá gấp đôi, không \ để tiếp tục các dòng trừ khi bắt buộc, không có ý kiến ​​nào chỉ nhắc nhở người đọc về các quy tắc của ngôn ngữ (nếu người đọc không biết ngôn ngữ bạn đang gặp khó khăn ;-), v.v.

Tôi nên chỉ ra rằng một số hậu quả của "tinh thần Tufte của Python" gây nhiều tranh cãi hơn những người khác, trong cộng đồng Python. Nhưng ngôn ngữ chắc chắn tôn trọng "Tufte's Spirit" khá tốt ...

Chuyển sang "gây tranh cãi hơn" (nhưng bị xử phạt bởi Zen của Python - import this tại dấu nhắc thông dịch viên): "phẳng hơn lồng nhau", vì vậy "nhận ra ngay sau khi hợp lý" hơn là làm tổ.Hãy để tôi giải thích:

if foo: 
    return bar 
else: 
    baz = fie(fum) 
    return baz + blab 

này không phải là khủng khiếp, nhưng không phải là nó tối ưu: từ "trở lại" `` được ra khỏi '', bạn có thể lưu làm tổ:

if foo: 
    return bar 
baz = fie(fum) 
return baz + blab 

Một ví dụ sắc nét :

for item in container: 
    if interesting(item): 
    dothis(item) 
    dothat(item) 
    theother(item) 

rằng khối lớn là đôi lồng nhau là không gọn gàng ... xem xét phong cách phẳng:

for item in container: 
    if not interesting(item): 
    continue 
    dothis(item) 
    dothat(item) 
    theother(item) 

BTW, và một dành đó không phải là đặc biệt của phong cách Python độc quyền - một trong những Peeves vật cưng của tôi (trong bất kỳ ngôn ngữ, nhưng trong Thần Python Tufte ủng hộ tôi ;-):

if not something: 
    this() 
    that() 
    theother() 
else: 
    blih() 
    bluh() 
    blah() 

"nếu không muốn nói. .. else "is contorted! Hoán đổi hai nửa và mất các số not:

if something: 
    blih() 
    bluh() 
    blah() 
else: 
    this() 
    that() 
    theother() 
+4

Tìm hiểu xem 'trả về' một giá trị nửa chừng thông qua một hàm hay sử dụng câu lệnh 'else' thường khiến tôi bị tê liệt với sự do dự ... – detly

0

Cú pháp chỉ là đỉnh của tảng băng. Có một số cấu trúc ngôn ngữ khác nhau mà các lập trình viên Java cần phải biết, ví dụ: Python không cần phải sử dụng giao diện

Creating an interface and swappable implementations in python - Stack Overflow

Các thành ngữ thực sự hữu ích khác là tất cả những gì có thể được chuyển đổi sang một giá trị boolean với một ý nghĩa trực quan bằng Python. Ví dụ, để kiểm tra một mảng trống rỗng, bạn chỉ cần làm

if not my_array: 
    return 
...process my_array... 

Điều kiện đầu tiên là tương đương với Java

if ((my_array == null) || (my_array.length == 0)) { 
    return 
} 

Đây là ngoài sức tưởng tượng trong Python. Không chỉ là ngắn gọn hơn, nó cũng tránh được một lỗ hổng Java mà nhiều người không kiểm tra cả hai điều kiện một cách nhất quán. Vô số NullPointerException được ngăn chặn như là một kết quả.

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