Hướng dẫn what is python bad at - python xấu ở điểm nào

Ảnh của Jordi Fontana trên unplash

Tôi sẽ nói một lần nữa: Python là một ngôn ngữ lập trình tồi và lý do duy nhất mà nó rất phổ biến ngày hôm nay là vì Google đã đẩy nó rất khó khăn trong thập kỷ đầu tiên của những năm 2000.

Người tạo ra Python, Guido Van Rossum, thực sự đã làm việc tại Google từ năm 2005 đến 2012. Go và Dart không quay lại sau đó (hoặc ít nhất là họ không được biết đến) và với C# trở nên phổ biến (ăn cắp Java sẽ là Java nhà phát triển)

400 cách (nhiều hoặc ít hơn) để nội suy chuỗi. Bản in này "Xin chào Robin!" 3 lần:

  • Những gì là tốt
  • Điều gì nên tốt
  • "Meh" là gì
  • Có gì tệ
  • Có gì xấu về văn hóa

Những gì là tốt

  • Một hệ sinh thái khổng lồ của các thư viện bên thứ ba tốt.
  • Nhiều kế thừa.

Điều gì nên tốt

  • Thật dễ dàng để học và đọc. Tuy nhiên, nó chỉ dễ học và đọc khi bắt đầu. Một khi bạn đã vượt qua Python "Hello World" có thể trở nên thực sự xấu xí và phản trực giác.However, it's only easy to learn and read at the start. Once you get past "Hello world" Python can get really ugly and counterintuitive.
  • Triết lý Pythonic rằng "nên có một - và tốt nhất là chỉ một - cách rõ ràng để làm điều đó." Là một người yêu thích làm việc trong các quy tắc và khuôn khổ cứng nhắc, tôi yêu triết lý này! Là một người viết Python, tôi thực sự ước Python thực sự bị mắc kẹt với triết lý này. Xem bên dưới.

"Meh" là gì

  • Gắn thụt. Một số yêu thích nó bởi vì nó thực thi tính nhất quán và một mức độ dễ đọc. Một số ghét nó bởi vì nó thực thi sự nhất quán sai. Khách quan nó không tốt cũng không xấu.
  • Gõ động. Có rất nhiều ngôn ngữ được loại động và rất nhiều ngôn ngữ được loại trừ. Loại gõ nào tốt hơn không phải là một cuộc tranh luận về Python, đó là một cuộc tranh luận lập trình chung.

Có gì tệ

  • 400 cách (nhiều hoặc ít hơn) để nội suy chuỗi. Bản in này "Xin chào Robin!" 3 lần:

    user = {'name': "Robin"}
    print(f"Hello {user['name']}!")
    print("Hello {name}!".format(**user))
    print("Hello %(name)s!" % user)
    

    Nếu có một trường hợp sử dụng độc đáo và rõ ràng cho mỗi trường hợp này thì đó sẽ là một điều, nhưng không có.

  • 69 Các chức năng cấp cao nhất mà bạn phải ghi nhớ. Giải thích của GVR nghe có vẻ hay, nhưng thực tế nó làm mọi thứ trở nên khó hiểu.

  • map không trả lại danh sách, mặc dù toàn bộ điểm của hàm ánh xạ là tạo một danh sách từ một danh sách khác. Thay vào đó, nó trả về một đối tượng map, điều này khá vô dụng vì nó thiếu append,

    if user.isSignedIn then user.greet else error
    
    0, v.v.

  • Danh sách toàn diện được tổ chức như một bổ sung tuyệt vời gần đây cho Python. Mọi người nói rằng họ có thể đọc được. Điều đó đúng với các ví dụ đơn giản (ví dụ:

    if user.isSignedIn then user.greet else error
    
    2) nhưng không đúng sự thật cho các ví dụ phức tạp hơn một chút (ví dụ:
    if user.isSignedIn then user.greet else error
    
    3). Tôi phấn cái này lên đến ...

  • Thứ tự kỳ lạ trong các biểu thức ternary/một dòng. Hầu hết các ngôn ngữ đều tuân theo một thứ tự nhất quán trong đó trước tiên bạn khai báo các điều kiện, sau đó bạn thực hiện các công cụ dựa trên các điều kiện đó:first you declare conditions, then you do stuff based the on those conditions:

    if user.isSignedIn then user.greet else error
    
    for user in signedInUsers do user.greet
    

    Python làm điều này theo thứ tự ngược lại:

    user.greet if user.isSignedIn else error
    
    [user.greet for user in signedInUsers]
    

    Điều này là tốt cho các ví dụ đơn giản. Thật tệ cho logic phức tạp hơn vì trước tiên bạn phải tìm thấy giữa biểu thức trước khi bạn thực sự có thể hiểu những gì bạn đang đọc.

  • Cú pháp cho bộ dữ liệu. Nếu bạn viết một tuple một mục

    if user.isSignedIn then user.greet else error
    
    4 nhưng hãy quên dấu phẩy kéo dài, thì đó không còn là một bản biểu thức nào nữa. Đây là một sai lầm thực sự dễ dàng để thực hiện. Xem xét sự khác biệt duy nhất giữa các bộ dữ liệu và danh sách là tính đột biến, sẽ có ý nghĩa hơn nhiều khi sử dụng cùng một cú pháp
    if user.isSignedIn then user.greet else error
    
    5 làm danh sách, không yêu cầu dấu phẩy kéo dài và thêm phương thức
    if user.isSignedIn then user.greet else error
    
    6 hoặc
    if user.isSignedIn then user.greet else error
    
    7. Nói về...

  • Không có cách nào để tạo ra

    if user.isSignedIn then user.greet else error
    
    8 hoặc các đối tượng phức tạp bất biến.

  • Biểu thức thông thường đòi hỏi rất nhiều nồi hơi:

    re.compile(r"regex", re.I | re.M)
    

    So với JavaScript hoặc Ruby:

    /regex/ig
    
  • Các cú pháp theo nghĩa đen của chuỗi ngớ ngẩn:

    if user.isSignedIn then user.greet else error
    
    9,
    for user in signedInUsers do user.greet
    
    0,
    for user in signedInUsers do user.greet
    
    1,
    for user in signedInUsers do user.greet
    
    2.

  • Nhiều thuộc tính "ma thuật" __double-underscore__ mà bạn chỉ cần ghi nhớ.

  • Bạn không thể bắt được tất cả các lỗi và tin nhắn của họ trong một câu. Thay vào đó, bạn phải sử dụng một cái gì đó như

    for user in signedInUsers do user.greet
    
    3. Tất nhiên, bạn không nên có tất cả trong sản xuất, nhưng trong phát triển, nó rất hữu ích, vì vậy bước phụ không trực quan này gây khó chịu.

Có gì xấu về văn hóa

Hầu hết các lập trình viên sẽ thừa nhận những lời chỉ trích về ngôn ngữ yêu thích của họ. Thay vào đó, những người theo chủ nghĩa Python sẽ nói, "Bạn không hiểu Python."

Hầu hết các lập trình viên sẽ nói một đoạn mã là xấu nếu nó không hiệu quả hoặc khó đọc. Những người theo chủ nghĩa Python sẽ nói một đoạn mã là xấu nếu "nó không đủ pythonic." Điều này cũng hữu ích như ai đó nói rằng sở thích của bạn trong âm nhạc là xấu vì "nó không đủ văn hóa."

Pythonists có một chút phức tạp ưu việt.

Hạn chế Python là gì?

Lỗi thời gian chạy: Một trong những nhược điểm chính của ngôn ngữ này là thiết kế của nó có nhiều vấn đề.Các lập trình viên Python phải đối mặt với một số vấn đề liên quan đến thiết kế ngôn ngữ.Ngôn ngữ này đòi hỏi nhiều thử nghiệm hơn và nó cũng có lỗi chỉ hiển thị khi chạy điều này là do ngôn ngữ được gõ động.: One of the major drawbacks of this language is that its design has numerous issues. Python programmers face several issues regarding the design of the language. This language requires more testing and also it has errors that only show up at runtime this is because the language is dynamically typed.

Điểm mạnh và điểm yếu của Python là gì?

Bảng so sánh cho những ưu điểm và nhược điểm của Python.