Python là ngôn ngữ lập trình đầu tiên

Python là ngôn ngữ lập trình kiểu động hỗ trợ lập trình hướng đối tượng và chức năng. [1] Đó là sản phẩm trí tuệ của Guido van Rossum, người bắt đầu viết Python vào cuối năm 1989 và đầu năm 1990 làm ngôn ngữ kịch bản cho hệ điều hành Amoeba. [2] Thiết kế của nó được lấy cảm hứng từ một số ngôn ngữ khác, bao gồm C, Modula-3, và đặc biệt là ngôn ngữ giáo dục ABC. [3] Van Rossum đã phát hành nó ra công chúng vào năm 1991, và kể từ đó Python đã thu hút được một nhóm người dùng đông đảo và nhiệt tình bao gồm các lập trình viên chuyên nghiệp, nhà giáo dục và nhà khoa học máy tính. Van Rossum, người được mọi người biết đến với cái tên Guido, hoặc đôi khi là BDFL ["nhà độc tài nhân từ suốt đời"], vẫn là nhà thiết kế và phát triển chính của Python. Python lấy tên từ đoàn hài kịch Monty Python, và văn hóa Python có rất nhiều tài liệu tham khảo về những diễn viên hài bất kính đó [e. g. IDLE, sau Eric Idle, là tên của IDE đi kèm với Python]

2. hương vị

Python là một ngôn ngữ tao nhã, đơn giản và thiết thực. Nó bắt đầu cuộc sống như một ngôn ngữ kịch bản và trong khi đó có lẽ vẫn là ứng dụng phổ biến nhất, nó đã được sử dụng để giải quyết nhiều vấn đề khác. Nó so sánh thuận lợi với Perl, sự khác biệt rõ ràng nhất là cú pháp rõ ràng, dễ đọc của Python; . Ngược lại, Perl thường bị chỉ trích vì cú pháp "nhiễu dòng" do có nhiều toán tử được chọn tùy tiện. Giống như Perl, Python được vận hành như một dự án mã nguồn mở lớn và thành công. [4] Nó sử dụng quy trình thiết kế hợp tác trong đó bất kỳ ai cũng có thể cung cấp một tính năng mới được viết dưới dạng "Đề xuất cải tiến Python" hoặc PEP. [5] PEP được tranh luận trên comp. lang thang. nhóm tin python hoặc trên một trong các danh sách gửi thư của nhà phát triển. Quyết định cuối cùng về việc chấp nhận PEP nào được đưa ra bởi sự đồng thuận của nhà phát triển hoặc thông qua "tuyên bố" của Guido

Không có một tính năng nào của Python khiến nó trở thành một ngôn ngữ tốt như vậy. Nó đã chọn ra nhiều tính năng tốt nhất từ ​​​​các ngôn ngữ khác và kết hợp chúng theo cách rõ ràng và đồng bộ. Một trong những khẩu hiệu của Python là "bao gồm pin". Python có thể thực hiện nhiều điều hữu ích ngay lập tức và cung cấp tất cả các công cụ và tính năng cơ bản mà các lập trình viên mong đợi ở một ngôn ngữ lập trình chính. Nó đi kèm với một IDE đồ họa [bao gồm trình chỉnh sửa tô màu từ khóa, trình gỡ lỗi và trình bao lệnh tương tác --- tất cả được viết bằng Python với mã nguồn đi kèm], thư viện Tkinter GUI, trình lược tả và nhiều công cụ khác mà hầu hết các ngôn ngữ khác yêu cầu . Không phải tất cả các công cụ này đều làm được mọi thứ mà một chuyên gia có thể cần, nhưng chúng thường làm được;

Giống như C++, Python là một ngôn ngữ đa mô hình, không bắt buộc các lập trình viên phải tuân theo một phong cách lập trình thuần túy duy nhất. Python có thể được sử dụng như một ngôn ngữ mệnh lệnh, ngôn ngữ hướng đối tượng hoặc ngôn ngữ chức năng. Trong thực tế, ba phong cách này thường được trộn lẫn theo những cách bổ sung cho nhau, cho phép lập trình viên sử dụng công cụ tốt nhất cho công việc hiện tại

3. Ba mặt của Python

Python có lẽ là ngôn ngữ lập trình đầu tiên đạt được một điểm ngọt ngào trong lập trình cụ thể. nó hấp dẫn cả những người mới bắt đầu, các chuyên gia và các nhà khoa học máy tính

Những người mới bắt đầu học lập trình đánh giá cao sự đơn giản, tính tương tác và hương vị "bao gồm pin" của Python. Họ có thể nhanh chóng khiến Python bắt đầu làm những điều thú vị bằng cách sử dụng cấu trúc dữ liệu và cú pháp trực quan của nó. Nhờ dòng lệnh tương tác, họ nhận được nhiều phản hồi ngay lập tức và có thể nghiên cứu các lệnh riêng lẻ mà không phải lo lắng về các chương trình toàn diện. Không có chu trình chạy biên dịch mã và ban đầu không cần sử dụng tệp hoặc lớp hoặc chi phí khác thường khiến người mới bắt đầu đau đầu không cần thiết. Trong chính cộng đồng Python, giá trị sư phạm của Python được công nhận và quảng bá. [6] Hầu hết phần còn lại của bài báo này sẽ tranh luận về việc sử dụng Python trong chương trình giảng dạy CS ở cấp đại học

Nhiều lập trình viên chuyên nghiệp đang chuyển sang Python, thường là một giải pháp thay thế cho Perl hoặc các ngôn ngữ kịch bản khác. Python có các phiên bản tốt của hầu hết các thư viện mã thiết yếu cần thiết trong lập trình thực tế hàng ngày. [7] Giống như Perl, Python rất tuyệt vời để viết kịch bản và thao tác chuỗi, tuy nhiên cú pháp của nó ít khó hiểu hơn nhiều. Python có thể được học một cách nhanh chóng và đối với nhiều lập trình viên có kinh nghiệm, nỗ lực đầu tư ban đầu để học đủ về Python để sử dụng nó trong thực tế là rất nhỏ. Python đã được quảng bá bởi những người nổi tiếng về lập trình như người nổi tiếng về mã nguồn mở Eric Raymond,[8] và trưởng bộ phận chất lượng tìm kiếm của Google, Peter Norvig. [9] Nó cũng đã được sử dụng bởi các công ty [10] như IBM, Disney, NASA, Industrial Light and Magic và Zope Corporation. [chú thích 1]

Cuối cùng, ngay cả các nhà khoa học máy tính cũng có nhiều điều thích Python. Peter Norvig mô tả Python là "phiên bản thực tế [thư viện tốt hơn] của Scheme hoặc là phiên bản Perl đã được làm sạch [không có $@&%]". [11] Python kết hợp các ý tưởng lập trình chức năng như hàm bậc cao, khả năng hiểu danh sách, trình tạo đơn giản, trình vòng lặp và đối tượng. Nó có thể được sử dụng để minh họa một số phong cách lập trình khác nhau, mặc dù trong một ngôn ngữ đơn giản và nhất quán. Nhờ mã nguồn mở của Python, Python đã được sử dụng làm nền tảng cho các ngôn ngữ khác, chẳng hạn như Stackless. [12]

4. So sánh với Java

Python và Java tạo nên một so sánh thú vị, đặc biệt khi xem xét các khái niệm và ý tưởng mà chúng giới thiệu trong khóa học lập trình đầu tiên. Trong phần sau, một số tính năng và vấn đề của Python sẽ được nêu ra và so sánh với Java bằng các ví dụ mã cụ thể. Đây không phải là một sự so sánh toàn diện và phải thừa nhận rằng nó hơi thiên vị trong việc hiển thị các tính năng tốt nhất của Python

4. 1 Xin chào, thế giới

Có lẽ sự khác biệt lớn nhất giữa Python và Java, đối với người mới bắt đầu, là Python là một ngôn ngữ thông dịch cho phép đánh giá hầu hết mọi biểu thức tại dòng lệnh. Java tất nhiên là một ngôn ngữ được biên dịch, với chu trình biên dịch-chạy mã quen thuộc. Vấn đề với chu trình này là nó làm cho các chương trình đang chạy trở thành một quy trình chậm hơn và phức tạp hơn, cuối cùng làm giảm chất lượng phản hồi. Chương trình "Xin chào, thế giới" trong Python đơn giản nhất có thể

>>> print "Hello, world!"
Hello, world!
">>>" là dấu nhắc đầu vào của Python và trên dòng tiếp theo là đầu ra. Chương trình cũng có thể được viết trong một tệp để chạy dưới dạng tập lệnh. Thật dễ dàng để chạy trình thông dịch dòng lệnh hoặc thậm chí tốt hơn là môi trường tích hợp IDLE đi kèm với Python. Người mới bắt đầu không cần quan tâm đến tệp hoặc biên dịch. Họ có thể chỉ cần nhập mã và xem kết quả

Trong Java, cần nhiều chi phí hơn

class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
Các vấn đề với mã Java này rất dễ liệt kê. Nó đòi hỏi một số khái niệm phức tạp không cần thiết đối với vấn đề in một thông báo trên màn hình, e. g. các lớp, số liệu thống kê, khoảng trống, mảng và truyền tham số. Để chạy nó, cần thêm hai bước nữa. Trước tiên, nó phải được biên dịch rõ ràng, sau đó chạy trên máy ảo Java. Tất nhiên, nếu bạn đang sử dụng trình biên dịch javac đi kèm với JDK tiêu chuẩn, thì để tránh lỗi trình biên dịch, bạn cũng phải đảm bảo rằng mã được lưu trữ trong tệp có tên HelloWorld. java. Một IDE tốt [chú thích 2] có thể làm cho quá trình này trở nên đơn giản hơn, nhưng việc học một trong những IDE này, có lẽ ngoại trừ BlueJ, đưa đến những phức tạp và vấn đề mới ngoài chính ngôn ngữ đó [e. g. tệp dự án, tùy chọn cấu hình]. Vấn đề là Java là ngôn ngữ được thiết kế cho các lập trình viên chuyên nghiệp, những người có công việc hàng ngày chủ yếu là tạo, mở rộng và bảo trì các hệ thống phần mềm lớn và phức tạp. Người mới bắt đầu thiết kế Java có rất ít sự cân nhắc, ngoài việc cố gắng làm cho nó dễ sử dụng hơn C++. Mặc dù Java thực sự có thể dễ lập trình hơn C ++, nhưng thực tế đó không có nghĩa là nó là ngôn ngữ tốt nhất để lập trình nhập môn

Cần nói thêm vài lời về BlueJ IDE, được thiết kế rõ ràng để dạy Java. [13] Trang chủ BlueJ liệt kê một số vấn đề Java phổ biến và sự phức tạp mà BlueJ che giấu. BlueJ cung cấp trình sửa lỗi và công cụ thiết kế đồ họa có thể được sử dụng để cấu trúc và liên kết các lớp, thậm chí chạy các phần mã Java không phải là một phần của toàn bộ chương trình. Những gì BlueJ làm là làm cho Java đơn giản hơn và tương tác hơn cho người mới bắt đầu, các tính năng vốn đã không thể thiếu đối với Python. Một vấn đề khác với BlueJ là nó được kết hợp với cách tiếp cận lập trình "đối tượng đầu tiên" tích cực, nhấn mạnh dữ liệu hơn các thuật toán. Mặc dù "đối tượng là ưu tiên hàng đầu" là một cách tiếp cận phổ biến và hợp lý để dạy Java, nhưng không phải tất cả các nhà giáo dục đều chọn dạy thiết kế hướng đối tượng sớm như những người khác, và rất nhiều lợi ích của BlueJ không được nhận ra trong, ví dụ, một thuật toán ưu tiên

4. 2 khoảng trắng

Một trong những tính năng khác thường nhất của Python, ít nhất là đối với các lập trình viên có kinh nghiệm, là việc Python sử dụng thụt đầu dòng để chỉ ra các khối mã. Java sử dụng "{" và "}" để đánh dấu rõ ràng phần đầu và phần cuối của khối mã, nhưng Python dựa vào khoảng trắng. Ưu điểm chính là trình biên dịch giúp thực thi thụt đầu dòng thích hợp, khiến việc viết mã thụt lề kém khó hơn bình thường. Trong các ngôn ngữ khác, thụt đầu dòng là một nghệ thuật mà học sinh phải học mà không cần ít hoặc không tự động hóa. Trong Python, đó là một phần nội tại của ngôn ngữ. Ví dụ, đây là phiên bản Python của tìm kiếm tuyến tính

def search[x, seq]:
    """ Returns true if x is seq, and false
    otherwise.
    """
    for item in seq:
        if x == item:
            return 1   # 1 means true
    return 0  # 0 means false
Ví dụ: nếu dòng "for" bị dịch chuyển sang trái một vài khoảng trắng thì sẽ xảy ra lỗi cú pháp. Cũng lưu ý rằng một ". " được sử dụng để chỉ ra sự bắt đầu của một khối mã. Điều này xuất phát từ kinh nghiệm với ngôn ngữ ABC, cho thấy rằng ". " làm cho nó dễ dàng hơn để nhận ra các khối. Dấu ngoặc kép """ ở trên cùng là một cách thuận tiện để viết các chuỗi nhiều dòng trong Python và thường được sử dụng cho các chuỗi tài liệu

4. 3 Cấu trúc dữ liệu tích hợp

Ngoài các kiểu số cơ bản, Python cung cấp ba cấu trúc dữ liệu tích hợp phổ biến. chuỗi, danh sách và từ điển. Chuỗi và danh sách đủ đơn giản và phổ biến để được giới thiệu vào ngày đầu tiên hoặc ngày thứ hai của khóa học lập trình Python. Chúng hỗ trợ ký hiệu cắt linh hoạt có thể trích xuất bất kỳ chuỗi con hoặc danh sách con nào. Ví dụ

>>> lst = [1, "cat", 4, "a", "dog"]
>>> lst[0]
1
>>> lst[2:4]
[4, 'a']
>>> lst[2:]
[4, 'a', 'dog']
>>> lst[:4]
[1, 'cat', 4, 'a']
>>> lst[-1]
'dog'
>>> lst[:-2]
[1, 'cat', 4]
Lưu ý các chỉ số tiêu cực trong hai ví dụ cuối cùng. Chúng đề cập đến các mục ở cuối bên phải của danh sách, và mặc dù lúc đầu không bình thường, nhưng điều này hóa ra lại là một ký hiệu tiện dụng. Các chuỗi được lập chỉ mục theo cùng một cách và trên thực tế, bất kỳ lớp nào đủ giống một chuỗi đều có thể sử dụng cùng một ký hiệu cắt

Java có thể thực hiện các thao tác tương tự bằng cách sử dụng Vector hoặc bất kỳ lớp nào triển khai giao diện Danh sách. Ví dụ

import java.util.Vector;

public class ListManipulation {

  public static void main[String[] args] {
    Vector lst = new Vector[];
    lst.add[new Integer[1]];
    lst.add["cat"];
    lst.add[new Integer[4]];
    lst.add["a"];
    lst.add["dog"];

    System.out.println[lst.get[0]]; 
    System.out.println[lst.subList[2, 4]];
    System.out.println[lst.subList[2, lst.size[]]];
    System.out.println[lst.subList[0, 4]];
    System.out.println[lst.get[lst.size[] - 1]];
    System.out.println[lst.subList[0, lst.size[] - 2]];
  }
  
} // ListManipulation
Đầu ra.
1
[4, a]
[4, a, dog]
[1, cat, 4, a]
dog
[1, cat, 4]
Không cần phải nói, cách tiếp cận của Java dài dòng hơn và kém thanh lịch hơn của Python

Từ điển Python chỉ phức tạp hơn một chút so với danh sách. Từ điển là một tập hợp các cặp khóa/giá trị được lưu trữ dưới dạng bảng băm. Giống như danh sách, chúng có ký hiệu theo nghĩa đen của riêng chúng, e. g

>>> dict = {1: "car", "nose": "hat", 34: [1, 2, 3]}
tạo một từ điển trong đó, chẳng hạn, 1 là khóa cho giá trị "ô tô". Truy cập một giá trị là đơn giản.
>>> dict["nose"]
'hat' 
Java có một số lựa chọn để triển khai từ điển. Chẳng hạn, đây là một chương trình cơ bản tương đương sử dụng Hashmap.
import java.util.HashMap;
import java.util.Vector;

public class Dictionary {
  
  public static void main[String[] args] {
    HashMap dict = new HashMap[];
    dict.put[new Integer[1], "car"];

    dict.put["nose", "hat"];

    Vector lst = new Vector[];
    lst.add[new Integer[1]];
    lst.add[new Integer[2]];
    lst.add[new Integer[3]];
    dict.put[new Integer[34], lst];

    System.out.println["dict = " + dict];
  }
  
} // Dictionary
Đầu ra sau đây được tạo ra.
dict = {34=[1, 2, 3], 1=car, nose=hat}
Nói chung, Python cấp đặc quyền cho chuỗi, danh sách và từ điển, trong khi Java chỉ cấp đặc quyền cho chuỗi. Trên thực tế, Java dưới các đặc quyền kiểu nguyên thủy như ints và doubles, buộc lập trình viên phải sử dụng các đối tượng bao bọc xấu xí và bất tiện. [lưu ý 3] Vì danh sách và từ điển là các loại tích hợp sẵn, nên Python cung cấp một ký hiệu nghĩa đen hữu ích cho chúng, giúp đơn giản hóa rất nhiều việc tạo, hiểu và sử dụng chúng. Khi tạo các ví dụ trên, tôi đã quen thuộc với Java và Python như nhau, có nhiều kinh nghiệm hơn với Java. Tuy nhiên, về tổng thể, các ví dụ Java có thể mất thời gian tạo ra lâu hơn từ 5 đến 10 lần so với các ví dụ Python. Đọc tài liệu, tạo mã và dành thời gian xử lý các lỗi nhỏ [e. g. viết Hashmap thay vì HashMap] cộng lại

4. 4 Sức mạnh tổng hợp toán học

Mặc dù Python không tinh tế về mặt toán học như Maple hay Matlab, nhưng nó hoạt động giống toán học thông thường hơn Java theo cách mà những người mới bắt đầu sẽ đánh giá cao. Ví dụ: trong Java, số nguyên là các giá trị 32 bit hữu hạn với giá trị tối thiểu và tối đa. Các lập trình viên mới bắt đầu thường ngạc nhiên khi biết rằng số học của Java không hoàn toàn giống với số học mà họ được dạy ở trường tiểu học. Đoạn mã Java sau đây cuối cùng sẽ dừng lại vì biến tăng dần cuối cùng đạt đến giá trị int tối đa và sau đó bao quanh một giá trị âm

class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
0Mã cụ thể này chỉ là một sự tò mò, nhưng các số nguyên có giá trị hữu hạn là một giới hạn thực sự mà các lập trình viên phải luôn ghi nhớ. Tuy nhiên, Python sử dụng các số nguyên chính xác tùy ý theo mặc định [các giá trị 32 bit được sử dụng khi các số đủ nhỏ]. Điều đó có nghĩa là mã Python tương đương với đoạn mã trên sẽ lặp lại mãi mãi [hoặc cho đến khi máy tính của bạn hết thời gian hoặc bộ nhớ].
class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
1Thực tế hơn, điều này có nghĩa là những người mới bắt đầu không cần phải lo lắng về việc chạm sàn hoặc trần của các số nguyên. Số học số nguyên hoạt động theo cách chúng được dạy ở trường. Tất nhiên, tất cả các lập trình viên cuối cùng cũng sẽ hiểu cách sử dụng số học hữu hạn, nhưng Python ban đầu cho phép bạn bỏ qua điều này

Các số dấu phẩy động giá trị thực trong Python về cơ bản hoạt động giống như trong Java. Tuy nhiên, Python cung cấp hỗ trợ tích hợp cho số học phức tạp. Chẳng hạn, để tính căn bậc hai của -1, bạn có thể sử dụng hàm căn bậc hai toán học phức tạp

class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
2Hậu tố "j" đại diện cho căn bậc hai của -1 và có thể được sử dụng trong các biểu thức số. Ví dụ, chúng ta có thể tính nghiệm của phương trình bậc hai bằng cách sử dụng hàm sau.
class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
3 Toán tử ** có nghĩa là lũy thừa. Dưới đây là một số chạy mẫu.
class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
4Dấu ngoặc ngoài của kết quả là do hàm bậc hai trả về các giá trị của nó dưới dạng một bộ và các số phức luôn được viết với dấu ngoặc xung quanh. Một tính năng nhỏ nhưng hay khác của Python là nó diễn giải các bất đẳng thức như "a < b < c" theo cách mong đợi. Một biểu thức như "a < b < c" là bất hợp pháp trong Java,[chú ý 4] buộc bạn phải dịch nó thành
class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
5Trong Python, không cần dịch như vậy.
class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
6Đôi khi ký hiệu này có thể làm cho các thuật toán rõ ràng hơn nhiều so với đối tác Java của chúng. Chẳng hạn, giả sử bạn có bốn biến số nguyên mà bạn muốn sắp xếp theo thứ tự tăng dần, với hạn chế bổ sung là bạn không được sử dụng mảng hoặc vùng chứa. [chú ý 5] Chúng ta có thể viết một phiên bản của bubblesort để giải quyết vấn đề này, đây là một bài tập hay kết hợp các vòng lặp, câu lệnh if và biến. Đây là cách nó có thể được thực hiện trong Python.
class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
7Lưu ý rằng Python hỗ trợ nhiều nhiệm vụ. Một biểu thức chẳng hạn như "x, y = 1,2" gán 1 cho x và 2 cho y, song song. Sau đó, bạn có thể hoán đổi hai biến bằng cách viết "x,y = y,x". Hàm xuất các giá trị đã cho dưới dạng một bộ.
class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
8Tương đương với Java phức tạp hơn vì Java không có cách nào dễ dàng để hoán đổi các biến nguyên thủy và các phương thức không thể trả về nhiều giá trị. Một tương đương hợp lý là đây.
class HelloWorld {
  public static void main[String[] args]
  {
    System.out.println["Hello, world!"];
  }
} 
9Một lần nữa, giải pháp Python có ít chi phí hơn nhiều và cho phép lập trình viên tập trung rõ ràng hơn vào nhiệm vụ họ muốn đạt được, thay vì vào các chi tiết của ngôn ngữ lập trình

Gần đây hơn [Python 2. 3 trở lên], Python đã thêm cấu trúc dữ liệu được thiết lập tiêu chuẩn. Các bộ Python đại diện cho các bộ sưu tập hữu hạn không có thứ tự của các đối tượng riêng biệt và hỗ trợ tất cả các thao tác tập hợp quen thuộc. Python cho phép nạp chồng toán tử, vì vậy nếu A và B là các tập hợp, thì, chẳng hạn, A. B là hợp của chúng và A

Chủ Đề