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 <= B đúng khi và chỉ khi A là tập con của B. Giá trị giáo dục của các tập hợp khá cao do tính nổi bật của chúng trong toán học và các tập hợp hữu hạn cực kỳ phổ biến trong toán học rời rạc. Ký hiệu hiểu danh sách Python cũng là một cách tự nhiên để khởi tạo các tập hợp. Ví dụ: giả sử chúng ta muốn biểu diễn tập bình phương của các số từ 1 đến 10. Về mặt toán học, chúng ta có thể viết tập hợp này theo một số cách, e. g

S = {x2. 1 <= x <= 5}hoặcS = {x2. x = 1, 2, 3, 4, 5}
or
S = {x2 : x = 1, 2, 3, 4, 5}

Trong Python, chúng ta có thể viết cái này.
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
0Biểu thức "[x**2 for x in [1,2,3,4,5]]" được gọi là cách hiểu danh sách và là cách viết tắt thuận tiện để tạo danh sách. [lưu ý 6] Phiên bản được hiển thị của bộ không theo cùng thứ tự với phiên bản đầu vào vì các bộ được triển khai trên cấu trúc dữ liệu từ điển của Python, lần lượt được triển khai dưới dạng bảng băm và do đó không có thứ tự phần tử cụ thể nào được đảm bảo. Kiểu dữ liệu danh sách của Python được sử dụng cho các chuỗi có thứ tự

Thư viện bộ sưu tập tiêu chuẩn của Java cung cấp một vài lớp tập hợp khác nhau. Chẳng hạn, đây là cách Hashset có thể được sử dụng để tính S

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
1Đầu ra là.
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
2Sử dụng các bộ sưu tập Java không quá khó và có thể nắm bắt được đối với những người mới bắt đầu lập trình. Tuy nhiên, giống như phần lớn Java, có rất nhiều chi phí, cả cần thiết và không cần thiết, và ký hiệu quá khác biệt nên khả năng tương tự với toán học là yếu nhất

4. 5 Tài liệu

Tài liệu là một chiến thắng khác cho Python. Java nổi tiếng với hàng đống tài liệu trực tuyến, hầu hết được tạo trực tiếp từ mã nguồn bằng công cụ javadoc. Tuy nhiên, đối với người mới bắt đầu, tài liệu Java có thể là một khối phức tạp kỹ thuật khó hiểu. Cần có thời gian để học cách sử dụng và đọc tài liệu Java, để biết điều gì quan trọng và điều gì không. Ngay cả đối với các lập trình viên chuyên nghiệp, luôn có một chút gián đoạn khi phải tìm kiếm các phương thức và hành vi của một lớp cụ thể. Ngược lại, hầu hết các thư viện chuẩn của Python và các hàm dựng sẵn đều đi kèm với tài liệu riêng của chúng. Chẳng hạn, để lấy danh sách tất cả các phương thức chuỗi của một chuỗi, người ta sử dụng lệnh dir như thế này

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
3Phải thừa nhận rằng đầu ra này ban đầu lộn xộn và đáng sợ đối với người mới bắt đầu ("tất cả những _ đó là gì??"), nhưng ở cuối danh sách, bạn có thể thấy tên của các phương thức chuỗi tích hợp. Thật dễ dàng để có được danh sách này đến nỗi nó nhanh chóng trở nên quen thuộc và thuận tiện. Tài liệu của một phương thức có thể được truy cập bằng cách in ra chuỗi tài liệu của nó như thế này.
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
4Python có sẵn nhiều tài liệu phong phú hơn trực tuyến tại www. con trăn. tổ chức

Một tính năng tài liệu Python đặc biệt hữu ích khác được gói gọn trong mô-đun doctest. Mô-đun này cho phép bạn cắt và dán văn bản trực tiếp từ phiên shell tương tác Python vào chuỗi tài liệu hàm, sau đó tự động chạy lại các lệnh trong phiên, kiểm tra xem đầu ra của chúng có giữ nguyên không. Chẳng hạn, chúng ta có thể viết hàm bậc hai như thế này

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
5Giá trị gấp đôi. Tài liệu bổ sung cho thấy một ví dụ đơn giản về cách sử dụng chức năng này, điều này có thể vô cùng hữu ích cho những lập trình viên muốn sử dụng nó. Ngoài ra, doctest có thể chạy trên hàm, tự động phân tích cú pháp chuỗi tài liệu, trích xuất các lệnh trình thông dịch (đứng trước chúng là ">>>"), sau đó kiểm tra xem đầu ra bằng phiên bản hiện tại của hàm có khớp không . Điều này có thể được sử dụng để thử nghiệm hồi quy đơn giản. [chú thích 7]

5. Thế giới lập trình mới

Đã thấy một số tính năng khiến Python trở thành một ngôn ngữ hấp dẫn như vậy, bây giờ tôi muốn trình bày một lập luận về việc sử dụng Python làm ngôn ngữ lập trình đầu tiên. Bất kỳ cuộc thảo luận nào về ngôn ngữ lập trình đều có nguy cơ biến thành một cuộc chiến tôn giáo. Hầu hết các lập luận và bằng chứng là giai thoại, dựa trên kinh nghiệm và thị hiếu cụ thể của các nhà giáo dục thực hành. Điều này là tốt và xấu. Phần lớn lời khuyên mà người ta tìm thấy cho việc dạy lập trình là rất thực tế, đã được thử và kiểm tra trong lớp học. Tuy nhiên, nó cũng có thể là một quan điểm hạn hẹp, gắn liền với một kiểu lập trình không phù hợp với những tiến bộ trong phong cách lập trình và cách tiếp cận thường được sử dụng trong ngành. Một khó khăn khác là lập trình máy tính là một lĩnh vực tương đối non trẻ và những gì tạo nên phương pháp hay nhất vẫn đang được học hỏi. Sự gia tăng của "đồ vật là ưu tiên hàng đầu" có thể được coi là một nỗ lực nhằm đưa toàn bộ lợi ích của đồ vật vào lớp học. Các đối tượng và các lớp đã đi vào tiêu chuẩn của các cấu trúc lập trình cơ bản, bên cạnh các vòng lặp, danh sách và câu lệnh if. Chúng tôi đang trong quá trình sắp xếp lại các khái niệm cơ bản về lập trình

Tuy nhiên, có một sự tái định hình xã hội lớn hơn mà chúng ta cũng là một phần của. World Wide Web đã trở thành một yếu tố chính của xã hội hiện đại, có ảnh hưởng như điện thoại, ô tô hoặc truyền hình. Những học sinh trung bình vừa tốt nghiệp trung học thường sử dụng máy tính và web trong nhiều năm và nhắm đến sự nghiệp là nhà thiết kế/nhà phát triển web giờ đây có vẻ đáng nể. Bất kỳ ai sử dụng máy tính để thực hiện bất kỳ tác giả quan trọng nào, cho dù đó là trang web, bảng tính, cơ sở dữ liệu hay ngôn ngữ lập trình truyền thống, về cơ bản đều tham gia vào một dạng lập trình. Do đó, người dùng máy tính bình thường có thể trở thành người dùng và người tiêu dùng tốt hơn của công nghệ máy tính bằng cách học cách lập trình, giống như cách người dùng ô tô bình thường sẽ lái xe tốt hơn bằng cách tìm hiểu thêm về cách thức hoạt động của động cơ ô tô của họ

Đây không phải là quan điểm khoa học máy tính hoặc kỹ thuật truyền thống. Giả định ngầm định trong khoa học máy tính truyền thống là sinh viên đang hướng tới trở thành kỹ sư phần mềm hoặc muốn tham gia hàng ngày vào việc xây dựng các chương trình phần mềm lớn như hệ điều hành, cơ sở dữ liệu hoặc trình biên dịch. Đây là những công cụ cơ bản của mọi công việc lập trình, và chắc chắn là những thứ mà kỹ sư phần mềm cần biết, nhưng trong thế giới lập trình mới, không phải lập trình viên nào cũng muốn hoặc thực tế là cần phải trở thành kỹ sư phần mềm. Mọi người đều lập trình, theo nghĩa giống như mọi người lái xe hơi. Mỗi ngày, các nhà phát triển web viết đánh dấu hoặc một vài dòng mã kịch bản (ngoài ra còn làm nhiều việc khác không giống như lập trình hoặc khoa học máy tính). Quản trị viên hệ thống cần viết kịch bản và nắm vững hàng tá tùy chọn để cài đặt và định cấu hình mạng và phần mềm. Những người kinh doanh sử dụng bảng tính trông rất giống một dạng lập trình đồ họa. Cơ sở dữ liệu và công cụ tìm kiếm web có ngôn ngữ truy vấn, ngay cả khi chúng không phải là sơ đồ tính toán toàn diện, có thể được coi là một dạng lập trình hạn chế. Nhiều gói ứng dụng phức tạp thậm chí còn đi kèm với ngôn ngữ kịch bản riêng

Nếu chúng ta đồng ý rằng về cơ bản tất cả sinh viên nên học lập trình, thì câu hỏi đặt ra là dạy họ điều gì trong khóa học lập trình đầu tiên của họ. Đương nhiên, những sinh viên đã quyết định khóa học của mình có thể thích học một ngôn ngữ cụ thể hơn, chẳng hạn như. g. sinh viên kỹ thuật có thể muốn Matlab và C, trong khi sinh viên nghệ thuật có thể thích ngôn ngữ kịch bản được tìm thấy trong các gói đa phương tiện phổ biến. Tuy nhiên, đối với hầu hết sinh viên, phần giới thiệu có mục đích chung về lập trình không chỉ phụ thuộc vào sản phẩm của ngày là thích hợp hơn. Vấn đề với việc giới thiệu khoa học máy tính về lập trình là họ thường dạy các ngôn ngữ như Java hoặc C ++, không phải là ngôn ngữ có mục đích chung. Chắc chắn, chúng được gọi là ngôn ngữ cấp cao có mục đích chung, nhưng điều đó chỉ đúng trong ngữ cảnh công nghệ phần mềm. Chúng không phải là mục đích chung theo quan điểm của các nhà thiết kế web hoặc những người lập trình nhưng không phải là phần chính trong công việc của họ. Ý nghĩa của việc lập trình và trở thành một lập trình viên đang thay đổi ngay trước mắt chúng ta

Mặc dù các ngôn ngữ kịch bản chỉ có danh tiếng tốt hơn một chút so với BASIC trong giới khoa học máy tính, nhưng danh tiếng đó không xứng đáng với Python. Như đã đề cập trước đó, Python được ví như một phiên bản thực tế của Scheme và sự so sánh là chính xác; . Nhiều lợi thế cho việc giảng dạy Đề án cũng áp dụng cho Python. [14] Python có thêm lợi ích khi có một cộng đồng người dùng rộng lớn, sôi nổi, nhiều người trong số họ là các lập trình viên chuyên nghiệp sử dụng Python hàng ngày. Vấn đề với việc dạy Scheme cho mọi người là, bất chấp tất cả sự sang trọng của nó, một sinh viên bình thường tiếp tục làm một số loại lập trình có thể sẽ không bao giờ nhìn thấy bất cứ thứ gì giống như vậy nữa. Họ ngôn ngữ LISP (trong đó Scheme là đứa con được ưa chuộng) thực tế đang hấp hối trong thế giới lập trình thực tế và điều này có thể làm nản lòng những sinh viên đang muốn viết các chương trình giống như những chương trình mà họ đã sử dụng khi lớn lên. Sự hiện diện của một cộng đồng thường bị bỏ qua hoặc đánh giá thấp khi đánh giá các ngôn ngữ lập trình, ít nhất là trong giới học thuật

Tất cả những điều này, cộng với những lý do đã đề cập trước đó, khiến Python trở thành một lựa chọn tuyệt vời làm ngôn ngữ lập trình đầu tiên cho nhiều đối tượng học sinh. Nó rất dễ học, nó rất thực tế và nó được truyền tải với sự trợ giúp hào phóng của các khái niệm và kỹ thuật mà các nhà khoa học máy tính yêu thích. Bạn có thể đòi hỏi gì hơn ở một ngôn ngữ lập trình?

6. Python trong CS1

Mặc dù người ta có thể tin rằng sinh viên nói chung sẽ được hưởng lợi từ việc học Python, nhưng không rõ ràng rằng các nhà khoa học máy tính truyền thống sẽ được nó phục vụ tốt nhất. Bên cạnh "Tôi chưa bao giờ nghe nói về Python", một số lập luận phổ biến chống lại Python với tư cách là ngôn ngữ đầu tiên là

  • Đó là một ngôn ngữ kịch bản
  • Nó không sử dụng cú pháp C++/Java
  • Nó thiếu kiểm tra kiểu tĩnh
  • Có tương đối ít sách giáo khoa để học Python

Hai phản đối đầu tiên có thể được trả lời dễ dàng. phàn nàn rằng Python là ngôn ngữ kịch bản chỉ là gọi tên chứ không phải tranh luận. Thông thường, vấn đề này được nêu ra bởi những người có kinh nghiệm kém với các ngôn ngữ kịch bản lệnh khác như Perl hoặc TCL/Tk và họ tự động chuyển lời chỉ trích tương tự sang Python. Nhưng kinh nghiệm cho thấy Python thì khác. nó được thiết kế tốt hơn và dễ đọc hơn hầu hết các ngôn ngữ kịch bản khác. Thực tế là nó không sử dụng cú pháp C++/Java thực sự chỉ là một vấn đề nếu bạn thích cú pháp C++/Java hoặc đặt một giá trị cực kỳ cao vào việc sử dụng các mã thông báo và từ khóa cụ thể mà các ngôn ngữ này sử dụng. Python có cấu trúc khá giống với C++/Java. Nó có các biểu thức, câu lệnh, chuỗi, hàm và lớp được thể hiện gần giống như trong C++/Java, mặc dù đôi khi có các mã thông báo và quy ước khác nhau. Một lời chỉ trích phổ biến khác, chủ yếu từ những người chưa bao giờ sử dụng Python hoặc những người chỉ mới tìm hiểu về nó một thời gian ngắn, là cách nó sử dụng khoảng trắng để biểu thị các khối mã dễ bị lỗi và phi đạo đức. Tuy nhiên, kinh nghiệm cho thấy rằng đây hiếm khi là một vấn đề và trên thực tế, nó có xu hướng trở thành một tính năng cực kỳ tích cực nhằm thúc đẩy khả năng đọc mã nguồn

Vấn đề kiểm tra kiểu tĩnh là một cuộc tranh luận lớn hơn nhiều và có nhiều tranh luận cho nó, ủng hộ và phản đối. Chẳng hạn, một mặt, kiểm tra kiểu tĩnh là tốt vì nó cho phép trình biên dịch bắt lỗi sớm trong quá trình phát triển. Mặt khác, kiểm tra kiểu tĩnh làm cho một số kỹ thuật nhất định trở nên khá khó sử dụng và yêu cầu lập trình viên thiết kế trước nhiều hơn. Thiết kế phía trước chắc chắn là một điều tốt, nhưng như cái tên "tĩnh" gợi ý, bạn không thể thay đổi loại đối tượng tĩnh. Nếu bạn đang giải một bài toán trong một lĩnh vực hạn chế, được xác định rõ ràng, chẳng hạn như toán học hoặc thế giới nội tâm của các câu đố lập trình năm thứ nhất truyền thống, thì gõ tĩnh rõ ràng là một chiến thắng vì các vấn đề thường được xác định hoàn toàn và nhất quán. Trong thực tế, nhiều vấn đề lập trình thiếu sự chặt chẽ về mặt định nghĩa đó hoặc các yêu cầu thay đổi giữa chừng trong quá trình phát triển. Khả năng dễ dàng cấu trúc lại và sửa đổi một đoạn mã hiện có là cực kỳ hữu ích và quan trọng, và một ngôn ngữ được nhập động giúp điều này trở nên dễ dàng hơn nhiều. Vì lý do này, các ngôn ngữ được nhập động cũng có xu hướng là lựa chọn tốt hơn để tạo nguyên mẫu. Điều rõ ràng là sinh viên khoa học máy tính nên được làm quen với nhiều phong cách ngôn ngữ khác nhau trong suốt quá trình giáo dục của họ và điều đó nên bao gồm ngôn ngữ được nhập động

Cuối cùng, lập luận cuối cùng trong danh sách này là một lập luận thực dụng và quan trọng đối với việc áp dụng Python theo bất kỳ cách nghiêm túc nào đối với các khóa học lớn. thực sự có tương đối ít sách giáo khoa tốt để học Python. Nhưng tất nhiên, bạn chỉ cần một cuốn giáo trình cho một khóa học lập trình, và chất lượng quan trọng hơn số lượng. Có vài. Deitel & Deitel đã xuất bản một cuốn sách nặng về Python, và như thường lệ, phong cách kỹ lưỡng nhưng khô khan của Deitel dường như phân cực độc giả. [15] Cuốn sách Learning Python có thể được sử dụng như một cuốn sách giáo khoa nhập môn, nhưng nó có thể sẽ yêu cầu nhiều bài tập và ví dụ bổ sung hơn. Có một cuốn sách giáo khoa nguồn mở, miễn phí phù hợp với học sinh trung học được gọi là "Làm thế nào để suy nghĩ như một nhà khoa học máy tính". Điều này có lợi thế duy nhất là làm cho văn bản của nó có sẵn miễn phí cho bất kỳ ai muốn sửa đổi nó và do đó, văn bản có thể được điều chỉnh bởi từng người hướng dẫn. [16]

Tại sao Python là ngôn ngữ đầu tiên?

Đây là ngôn ngữ lập trình cấp cao, nghĩa là khác xa với ngôn ngữ máy, giúp người mới bắt đầu đọc và nắm bắt dễ dàng hơn . Hơn nữa, là ngôn ngữ lập trình đa năng, Python khá linh hoạt cho các loại dự án khác nhau. Python được quản lý bởi Tổ chức Phần mềm Python phi lợi nhuận.

Tôi nên học C++ hay Python như ngôn ngữ đầu tiên của mình?

Nền tảng về cú pháp C++ của bạn sẽ được đền đáp, bởi vì C++ giúp hiểu cấu trúc logic của mọi chương trình . Thực sự khó hơn rất nhiều khi bắt đầu với một ngôn ngữ lập trình khác, sau đó chuyển sang C++. Một ngôn ngữ như Python, được tối ưu hóa theo cách suy nghĩ của con người, sẽ không dạy bạn cách suy nghĩ của máy tính.