Tại sao phổ biến như vậy với Python? [đóng cửa]


54

Khác với việc bị làm phiền bởi khoảng trắng như cú pháp, tôi không phải là người ghét, tôi chỉ không có niềm đam mê với Python.

Tôi đánh giá cao thơ ca của Perl, và đã lập trình các dịch vụ web tuyệt đẹp trong bash & korn và shebang gnuplot. Tôi viết tài liệu troffvà không bận tâm đến REXX. Không tìm thấy tcl nào hữu ích hơn nhiều năm trước, nhưng vấn đề lớn về Python là gì? Tôi thấy danh sách công việc và nhiều ứng viên với điều này như một giải thưởng & danh hiệu trong hồ sơ xin việc của họ.


Tôi đoán trong thực tế, tôi đang cố gắng để cá nhân bị bán trên này, tôi chỉ không thể tìm thấy một lý do.


81
Tôi không bao giờ hiểu tại sao mọi người cảm thấy khó chịu khi thụt lề yêu cầu của Python. Tôi hy vọng bạn sẽ thụt lề mã của bạn, phải không?
Greg Hewgill

10
@GregH, tất nhiên, nhưng cú pháp của tôi sẽ được ủy quyền bởi nó? Kiểu như Makefiles?
Jé Queue

5
@Xepoch: Nhưng Makefiles không chỉ yêu cầu thụt lề, họ yêu cầu một loại thụt đầu dòng cụ thể thường không thể phân biệt được với loại khác. Nếu Makefiles cần bất kỳ thụt lề khoảng trắng nào thay vì cụ thể 0x09, bạn có thể sẽ không phản đối và có thể sẽ sử dụng thụt lề nhất quán trong chiều rộng thụt lề ưa thích của bạn. Đây là điều tương tự Python cho phép.
Greg Hewgill

31
Thơ của Perl? Nghiêm túc? Nếu bạn có vinh dự duy trì mã Perl của người khác, bạn sẽ hiểu tại sao Perl lại giảm độ phổ biến.
Grokus

6
@Greg, tôi đồng ý với bạn. Tôi đã nói điều này trước đây và tôi sẽ nói lại, bất cứ ai phàn nàn về quy tắc thụt lề của Python nên được yêu cầu duy trì mã thụt lề kém. Chỉ cần nói ...
Grokus

Câu trả lời:


61

Python là một ngôn ngữ được thiết kế tốt với cú pháp hợp lý, thư viện chuẩn toàn diện, tài liệu bên thứ ba và bao gồm xuất sắc, triển khai rộng rãi và tính trực tiếp của ngôn ngữ kiểu "scripting" (nghĩa là không có bước biên dịch rõ ràng).


36
Được thiết kế tốt? Bạn đã bao giờ nhận thấy rằng bạn có một chức năng toàn cầu được gọi là len?
thay thế

65
Có chuyện gì với len vậy? Tôi có ấn tượng bạn chỉ đọc về con trăn trong 5 phút
Kugel

5
Cá nhân, cấu trúc ngôn ngữ rất đơn giản để nắm bắt nó đã cho tôi hiểu rõ hơn về cách các ngôn ngữ nói chung hoạt động trong nội bộ. Đó là những điều nhỏ nhặt. Các hàm hạng nhất, khả năng chỉ nhập các phần có liên quan của mô-đun bên ngoài vào hiện tại, liệt kê danh sách, bộ dữ liệu, bao gồm bản thân như một tham số phương thức giúp tôi hiểu sự khác biệt giữa các hàm và phương thức (các ngôn ngữ khác chỉ ẩn sau đường). Bây giờ tôi cảm thấy khó chịu khi sử dụng các ngôn ngữ như C # vì tôi biết bằng trực giác rằng mã không dạy tôi cách thức hoạt động bên trong.
Evan Plaice

1
Làm thế nào python có thể là một ngôn ngữ được thiết kế tốt? Nó sử dụng kỳ lạ __double_underscore_names__, nó trộn lẫn alllowercasefunctionamesvới mixed_underscoremixedCamelCasetên. Nó đòi hỏi một :ở cuối defhoặc các vòng lặp. Nó sử dụng rất nhiều từ viết tắt lẻ str, dict, islice. Có vẻ như không có quy ước nào cả. Đó là một sự hỗn loạn thuần túy. Peps, pips, zens ... nó giống như một tôn giáo trăn hơn là một ngôn ngữ. Nó có thể có một vài tính năng hay nhưng không giải thích được tại sao rất nhiều người quá hào hứng với nó. Không có gì đặc biệt về pyhon. Chỉ là một sản phẩm được thiết kế kém.
t3chb0t

1
Và hack là defgì? Tại sao tôi định nghĩa một hàm với a defchứ không phải a func? Không có ngôn ngữ khác không trực quan như trăn.
t3chb0t

76

Tôi đã thấy Python là ngôn ngữ lập trình tự nhiên nhất mà tôi từng viết mã. Tôi đã mã hóa rất nhiều ngôn ngữ trước và sau Python, và ở mức độ lớn hơn hoặc ít hơn, bạn phải chiến đấu với ngôn ngữ này làm cho nó để làm những gì bạn muốn Python giảm cuộc đấu tranh này một cách ồ ạt. Eric S Raymond nói nó nhiều hơn tôi có thể ở Tại sao Python?

Là một điểm liên quan, Python duy trì sự sạch sẽ của nó ngay cả khi đang phát triển nhanh chóng. Trong hầu hết các ngôn ngữ tôi đã làm việc cùng, giới thiệu các tính năng ngôn ngữ mới giới thiệu rất nhiều nếp nhăn. Nhưng với Python, ngay cả các tính năng ngôn ngữ chính (trang trí xuất hiện trong tâm trí) luôn được thêm vào, mà không cảm thấy như những bản hack xấu xí.


8
Đến đây để nói về cơ bản này. Cú pháp chỉ cảm thấy rất tự nhiên, nó gần giống như bạn đang viết mã giả.
James Davies

2
Python nhỏ gọn: bạn có thể giữ toàn bộ bộ tính năng của nó (và ít nhất là một chỉ mục khái niệm của các thư viện của nó) trong đầu bạn.
systempuntoout

2
@ Zoomzoom83 Mã giả của tôi đã bắt đầu và kết thúc - nó không hoạt động trong python :-(
mbq

1
@mbq Và mã giả của tôi có niềng răng, nhưng đó là một câu chuyện khác;)
Chris nói Phục hồi

26

Tôi hy vọng điều này không có vẻ quá hoài nghi, nhưng IMO Python rất phổ biến vì cùng lý do chính xác là Java, C # và Objective-C. Không phải vì có bất cứ điều gì ngoạn mục về bản thân các ngôn ngữ, mà bởi vì mỗi người đều có một nhà tài trợ phù hợp có thể tạo ra nhiều quảng cáo, nhiều quảng cáo, và rất nhiều thư viện và hỗ trợ cho ngôn ngữ ưa thích của họ.


6
C # thật đặc biệt, nó có linq
Daniel Little

39
Python có một tập đoàn lớn đằng sau nó? (câu hỏi chính hãng)
Jé Queue

11
Vâng, đó là những gì tôi muốn nói. Python đã bớt "ngầu" hơn rất nhiều trước khi Google bắt đầu quan tâm đến nó.
Mason Wheeler

10
@Mason - nhưng chắc chắn, phải có một số lý do tại sao một công ty lớn như Google sẽ làm cho nó "mát mẻ"?
Jas

7
Tại sao mọi người nghĩ rằng có những nhà tài trợ của công ty python? Có ai nhận thấy kích thước của pycon so với các công ước Java / j2ee khổng lồ không? Đây là một câu chuyện của David và Goliath về tài trợ của công ty.
rox0r

11

Kinh nghiệm của tôi là những người tìm thấy niềm vui thực sự trong lập trình thường tìm kiếm một ngôn ngữ phù hợp với họ hơn những gì họ học được ở trường hoặc đại học. Về cơ bản, điều này có nghĩa là họ sẽ chuyển từ mặc định PHP / Visual Basic / C ++ / Java / C # sang một thứ gì đó kỳ lạ hơn (kinh doanh / nghề nghiệp) như Python, Ruby, Haskell và thậm chí là perl (vì nó có giá trị hack và che khuất rất lớn).

Đừng hiểu sai ý tôi, có những lập trình viên C # / VB.net rất có kinh nghiệm, họ rất tự hào và vui mừng trong công việc và mã của họ (những người StackOverflow là một ví dụ rất hay), nhưng bạn không trở thành một lập trình viên trăn chỉ vì đó là những gì họ dạy bạn ở trường; nó phải là quyết định của riêng bạn

Tôi nghĩ Jeff Atwoord đã có một bài đăng trên blog về điều này, nhưng tôi không thể tìm thấy nó. Nếu tôi tìm thấy nó, tôi sẽ cập nhật nhận xét này.


1
Python là ngôn ngữ đầu tiên được dạy ở trường tôi vào năm 101.
Morgan Herlocker

Hầu như mọi ngôn ngữ đều có một lý do để tồn tại và tốt nhất là ở một cái gì đó. Theo ý kiến ​​của tôi, điều này chỉ nói "Tôi thích nó bởi vì những người khác làm".
NtFreX

9

So với Ruby, thứ thực sự tuyệt vời và tạo ra Code Golf-off tuyệt vời, Python có triết lý cốt lõi rằng "Nên có một - và tốt nhất là chỉ có một cách - rõ ràng để làm [mọi thứ]", nghĩa là cách Python thành ngữ. Tôi đã thấy đây là một lợi thế rất lớn so với Ruby.


4
..hoặc so với Perl với một cách dường như vô tận?
Jé Queue

@Xepoch - trên thực tế, có rất thường ít hơn nhiều so với vô số tốt / đúng cách để làm mọi thứ trong Perl, và hầu hết mọi người với một đầu mối sẽ dễ dàng có thể cho bạn biết mà không cần quá nhiều bất đồng gì top 1 (hoặc ít nhất 2) là nếu bạn không tin tôi, hãy xem các câu hỏi của Perl về SO. Có, một số câu hỏi có 10 giải pháp riêng biệt. Nhưng hầu hết đều có giải pháp "đúng nhất cho hoàn cảnh".
DVK

@DVK, tôi biết, nhưng nhìn nó từ một mục tiêu thiết kế.
Jé Queue

8

Tôi bắt đầu yêu Python vì lý do tương tự mà Eric S. Raymond mô tả: hành động viết chương trình bằng Python về mặt khái niệm rất giống với suy nghĩ hành động thiết kế mã trong đầu tôi.

Học cách trở thành một lập trình viên Python giỏi giúp tôi trở thành một lập trình viên C # tốt hơn nhiều . Nó làm cho việc hiểu LINQ dễ dàng hơn nhiều, đối với một. Tôi có thể chưa bao giờ chấp nhận một kiểu như Dictionary<string, Func<T>>, hoặc cảm thấy thoải mái khi sử dụng yield return, nếu tôi chưa sử dụng các lớp và trình tạo trong Python. AOP giờ đây dễ hiểu hơn rất nhiều khi tôi đã sử dụng các trình trang trí Python. Danh sách cứ kéo dài.


6

Thứ nhất, những vấn đề rắc rối về ngôn ngữ như thụt vào cưỡng bức trong Python rất ít xảy ra nếu bản thân ngôn ngữ này có sức mạnh biểu cảm và hữu ích. Ban đầu tôi cũng bị từ chối vì nó, nhưng sớm học được cách nhìn qua nó và bây giờ thậm chí không cảm thấy đó là một trở ngại, bởi vì ngôn ngữ này dễ dàng hơn cho tôi để làm việc. Nó giống như các biến trong Perl , đó là một trò chơi ngôn ngữ vô hại và bất cứ ai thoải mái trong ngôn ngữ này đều không cảm thấy phiền vì điều đó.

Để hiểu lý do tại sao rất nhiều người nghĩ Python là tuyệt vời, chỉ cần thử và học ngôn ngữ. Những lý do chủ yếu giống như Perl. Tôi thấy tôi thích cú pháp trong Python (ví dụ: hiểu danh sách, cú pháp OOP, v.v.), nhưng điều đó thực sự chủ quan và ý kiến ​​của bạn có thể khác nhau. Tôi thích Python cho các dự án lớn hơn, trong khi tôi vẫn sử dụng Perl cho các tập lệnh nhỏ hơn.

đó là câu trả lời cho câu hỏi của bạn. Bạn so sánh Python với Perl, bash và tcl. Có điều đó không phải là một so sánh công bằng. Các ngôn ngữ như bash được thiết kế để viết các tập lệnh nhỏ để tự động hóa các tác vụ thông thường. Một số người nghĩ Perl cũng khó sử dụng nếu mã đủ lớn (Perl được viết tốt thì không, nhưng mã được viết tốt rất khó xuất hiện trong một dự án lớn). IMHO Python khác với các ngôn ngữ 'scripting' khác ở chỗ nó mở rộng rất tốt cho các dự án lớn cũng như các script một lần nhỏ. Tôi nghĩ rằng Ruby cũng có chất lượng tương tự.


6

Triết lý mà Nhà độc tài nhân từ nên thực thi ý tưởng của ông về phong cách tốt [1], ý tưởng về lập trình tốt, ý tưởng về cách lập trình của tôi làm tôi thất vọng thường xuyên. Tôi không nghĩ như van Rossum. Tuy nhiên, ngôn ngữ của anh ta chống lại những nỗ lực thể hiện những suy nghĩ không phải là van Rossum. Suy nghĩ của ông hoạt động thực sự tốt cho nhiều lập trình viên (hầu hết?). Nhưng tôi dường như không phù hợp với mô hình của ông về cách lập trình.

Đó là lý do tại sao tôi tin rằng Perl là một ngôn ngữ cao cấp.

[1] Xem blog của anh ấy về việc loại bỏ reduce.


bạn có thể vui lòng giải thích lý luận của bạn với quá trình suy nghĩ, muốn nghe thêm.
Jé Queue

3
@Xepoch - một ngôn ngữ lập trình phục vụ như là phương tiện biểu đạt. Thành ngữ và phong cách suy nghĩ có thể được thể hiện trong một ý nghĩ liên tục từ 'phù hợp' đến 'rất khó để phù hợp'. Ví dụ, tôi không nghĩ về mặt hiểu danh sách. Họ xa lạ với cách tôi nghĩ về giải pháp vấn đề. Nhưng sự giảm bớt của Lisp là thứ gì đó chảy ra mà không gặp khó khăn gì trong tâm trí tôi. Tuy nhiên, van Rossum rõ ràng là ngược lại. Java yêu cầu tất cả mọi thứ phải ở trong các đối tượng. Vì vậy, nó trở nên rất khó để tạo ra các giải pháp không hướng đối tượng trong Java. Và như vậy -
Paul Nathan

5

Tôi nghĩ ở một mức độ nào đó Python là ngôn ngữ lập trình duy nhất bạn cần, trừ khi bạn muốn viết kernel hệ điều hành. Nó phù hợp cho việc sử dụng tương tác, hack ngẫu nhiên, quản trị hệ thống, ứng dụng khoa học, công cụ hệ điều hành, ứng dụng web, ứng dụng GUI, nhúng, v.v., nó di động, miễn phí và được sử dụng rộng rãi. Không có ngôn ngữ lập trình nào khác thực sự bao gồm tất cả các lĩnh vực đó trong thực tế. Đó là một khoản đầu tư chiến lược thực sự tốt cho một người và một công ty.


4
Không nghi ngờ Python ở đây, nhưng tôi nghĩ Perl phù hợp với mô tả của bạn ở trên khá tốt nếu không muốn nói là tốt hơn.
Jé Queue

Ruby cũng làm rất tốt điều này.
ocodo

1
Kể từ năm 2015, Python là ngôn ngữ có mục đích chung trên thực tế của máy tính khoa học. Mọi thứ khác đều là những thứ cấp thấp cổ điển (C, C ++, FORTRAN), cạnh tranh trong một vài ngóc ngách (MATLAB, Mathicala, R, Julia, Lua), chỉ được sử dụng cho thư viện và cơ sở hạ tầng (Java), công cụ tạo kịch bản ngẫu nhiên (bash , Perl) hoặc .... tốt ... không có gì ở trên.
Paul

5

Từ năm 2004, tôi đã sử dụng Python để phát triển:

  • GUI
  • Các đoạn mã theo dõi kịch bản với các ràng buộc Python đến C ++
  • Hệ thống xây dựng tự động đa nền tảng
  • Kiểm tra kịch bản
  • Công cụ mục đích chung để giải quyết các vấn đề hàng ngày của bạn
  • Trang web và ứng dụng web

Quay trở lại năm 2004, Python là ngôn ngữ được lựa chọn vì các tập lệnh Python có thể di động trên Windows, Linux và Mac với rất ít sửa đổi.


4
Để trích dẫn một nhận xét từ câu trả lời khác nhau: "Không nghi ngờ Python ở đây, nhưng tôi nghĩ Perl phù hợp với mô tả của bạn ở trên khá tốt nếu không muốn nói là tốt hơn".
DVK

4

Đối với tôi Python đã là một người bạn thân yêu. Đó là một ngôn ngữ kịch bản và tạo mẫu tốt. Những điều quan trọng tôi có thể nghĩ đến là:

  • Cú pháp rõ ràng, rất đơn giản và dễ hiểu
  • Đa mô hình, sử dụng nó như một ngôn ngữ bắt buộc? Chắc chắn rồi. OOP? Không vấn đề gì. Nó cũng có một số tính năng ngôn ngữ chức năng nhẹ, ví dụ lambda, hiểu danh sách, v.v.
  • Đối với các nhu cầu tính toán cơ bản, nó có hỗ trợ riêng cho các cấu trúc dữ liệu thiết yếu, mảng, bộ dữ liệu, từ điển (mảng kết hợp), tập hợp, v.v.
  • Các tính năng khác có thể làm cho một lập trình viên rất năng suất, ví dụ như gõ vịt, phản xạ, lập trình meta, trang trí, máy phát điện, v.v.
  • Hỗ trợ thư viện phong phú

lambda bị hỏng trong trăn.
Paul Nathan

@Paul Sẽ không hại gì khi đưa ra một liên kết để sao lưu ý kiến ​​của bạn.
Piotr Dobrogost

@Piotr: docs.python.org/reference/expressions.html#lambda Không thể chứa các câu lệnh. Điều đó vi phạm ý tưởng toán học của một hàm ẩn danh.
Paul Nathan

Điều đó không có nghĩa là lambda không bị phá vỡ?
rox0r

4

Nó thanh lịch và thực sự dễ học, và một khi bạn đã quen thuộc với các loại cơ bản của nó (đặc biệt là danh sách), năng suất của bạn không có giới hạn. Nó hoàn hảo cho các thuật toán tạo mẫu hoặc để viết chúng bằng ngôn ngữ giống như mã giả mà cuối cùng có thể đặt trực tiếp trên máy và nó thực sự là ngôn ngữ kịch bản để thực hiện các công việc lặp đi lặp lại hoặc thực hiện các thao tác gây phiền nhiễu trên các tệp. Tôi sử dụng nó như một ngôn ngữ keo để làm cho các quy trình con giao tiếp với nhau: không mạnh bằng bash cho một số nhiệm vụ dễ dàng, nhưng CÁCH dễ dàng hơn nếu bạn cần thực hiện nhiều hơn chỉ một dòng mã.

Và sau đó nó không phân biệt giữa các hàm và chương trình con, bạn biết ý tôi là gì.


3

Nhiều người yêu Python tôi thấy chỉ chuyển từ môi trường xung quanh C và rất ấn tượng với những thứ như "Hello "+ "World""Hello World". Vì vậy, tôi muốn nói rằng đây là ngôn ngữ kịch bản đầu tiên không thu thập được bí truyền / thẻ cụ thể và do đó lan rộng ra giữa những người tử vì đạo như lửa trong một khu rừng khô. Và vì vậy, thời trang được tạo ra bây giờ sống một mình.


2

Bây giờ lại đặt lại câu hỏi rằng tôi đã bớt mệt hơn một chút:

Python là ngôn ngữ tôi thấy đặc biệt phù hợp với các nhiệm vụ lập trình khoa học, đây là một trong những nơi mà sự phổ biến của nó đang tăng lên khá mạnh mẽ. Một vài lý do tại sao:

  • Hỗ trợ cộng đồng khá mạnh có nghĩa là có một số thư viện mạnh và Python hoạt động như một sự thay thế hợp lý cho MATLAB và một số ngôn ngữ phổ biến khác trong lĩnh vực đó.
  • Nó đóng tốt với C khi bạn làm cần tốc độ, nhưng thường tốc độ không phải là thực sự là cần thiết, vì vậy tính chất giải thích Python không phải là tất cả những gì lớn của một thỏa thuận.
  • Tôi đã thấy nó là một ngôn ngữ khá dễ tiếp cận mà không có một số lượng lớn những gì, đối với người ngoài, cảm thấy như các quy tắc cú pháp tùy ý kỳ lạ. Thật nhanh chóng để dịch giữa mã giả và Python.
  • "Lấy nó hoặc để nó OOP". Rất nhiều dự án lập trình khoa học không được hưởng lợi nhiều từ OOP. Một số làm. Thật tuyệt khi có một ngôn ngữ có thể nhảy giữa hai người một cách dễ dàng.
  • Hỗ trợ đa nền tảng mạnh mẽ. Đặc biệt là những gì tôi làm việc hiếm khi liên quan đến GUI, tôi hoàn toàn có thể dựa vào việc có thể gửi một chương trình Python cho người khác mà không cần lo lắng về việc họ đang chạy hệ điều hành nào.

Nó không phải là ngôn ngữ lập trình cuối cùng, nhưng là ngôn ngữ "Vâng, tôi có thể có một công cụ để giải quyết bất kỳ vấn đề nào xảy ra", đó có thể là lý do tại sao nó đang được yêu thích tại thời điểm này.


Bên cạnh tất cả các mục khác mà bạn đã liệt kê, tôi nghĩ một trong những mục quan trọng nhất là "Tôi hoàn toàn có thể dựa vào việc có thể gửi chương trình Python cho người khác mà không cần lo lắng về việc hệ điều hành họ đang chạy." Điều này cũng rất thuận lợi khi bạn không muốn bị mắc kẹt với loại hệ điều hành.
Tarik

1

Python là ngôn ngữ rất 'webby' trong cả hai khung có sẵn (Django, Zope, v.v.) và trong các thư viện có thể nhập dễ dàng, một lần nữa bao gồm nhiều chức năng web.

Đối với các nhà phát triển web thực hiện chuyển từ chỉ một kỹ năng HTML, CSS + JS (giai thoại là một nguồn lớn các lập trình viên mới trong vài năm qua), tôi nghĩ rằng điều này làm cho nó trở thành một đề xuất rất hấp dẫn (ditto Ruby).

Ngoài ra, Google không phải là Microsoft ....


Java không phải là MS, vì vậy nếu lý luận của bạn là chính xác, họ sẽ chuyển sang Java chứ không phải python. Phải có một lý do khác nhau.
rox0r

0

Tôi nghĩ một trong những lý do chính là 90% google được làm từ Python.

Tuy nhiên, Python cũng là một ngôn ngữ lập trình mạnh mẽ, dễ học. Nó có cấu trúc dữ liệu cấp cao hiệu quả và cách tiếp cận đơn giản nhưng hiệu quả để lập trình hướng đối tượng. Cú pháp tao nhã và kiểu gõ động của Python, cùng với bản chất được giải thích của nó, làm cho nó trở thành một ngôn ngữ lý tưởng để viết kịch bản và phát triển ứng dụng nhanh chóng trong nhiều lĩnh vực trên hầu hết các nền tảng.

Trình thông dịch Python và thư viện tiêu chuẩn mở rộng có sẵn miễn phí ở dạng nguồn hoặc nhị phân cho tất cả các nền tảng chính từ trang web Python, http://www.python.org/ , và có thể được phân phối miễn phí. Cùng một trang web cũng chứa các bản phân phối và con trỏ tới nhiều mô-đun, chương trình và công cụ Python miễn phí của bên thứ ba và tài liệu bổ sung.

Trình thông dịch Python dễ dàng được mở rộng với các hàm và kiểu dữ liệu mới được triển khai trong C hoặc C ++ (hoặc các ngôn ngữ khác có thể gọi được từ C). Python cũng thích hợp làm ngôn ngữ mở rộng cho các ứng dụng tùy biến.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.