Chào mừng bạn đến với hướng dẫn trực tuyến về Python của Google. Khoá học này dựa trên khoá học Python nhập môn được cung cấp nội bộ. Như đã đề cập trên trang thiết lập, tài liệu này đề cập đến Python 3.
Nếu bạn đang tìm một khoá học MOOC đồng hành, hãy thử những khoá học ở Udacity và Coursera (giới thiệu về lập trình [người mới bắt đầu] hoặc giới thiệu về Python). Cuối cùng, nếu bạn đang tìm cách học trực tuyến theo tiến độ riêng mà không xem video, hãy thử những cách trong danh sách ở cuối bài đăng này. Mỗi tính năng có nội dung học tập và một trình thông dịch có tính tương tác cho Python mà bạn có thể thực hành. "Người phiên dịch" này là gì chúng tôi đề cập đến là gì? Bạn sẽ tìm hiểu trong phần tiếp theo!
Python là một ngôn ngữ động, được thông dịch (biên dịch bằng mã byte). Không có nội dung khai báo kiểu của biến, tham số, hàm hoặc phương thức trong mã nguồn. Điều này làm cho mã ngắn gọn và linh hoạt, đồng thời bạn sẽ mất bước kiểm tra loại thời gian biên dịch của mã nguồn. Python theo dõi loại của tất cả giá trị trong thời gian chạy và gắn cờ mã không có ý nghĩa khi chạy.
Một cách rất hiệu quả để xem cách hoạt động của mã Python là chạy trình thông dịch và nhập mã Python vào đó. Nếu bạn có câu hỏi như "Điều gì sẽ xảy ra nếu tôi thêm int vào list?" Chỉ cần nhập mã đó vào trình thông dịch Python là cách nhanh nhất và khả thi nhất để xem điều gì sẽ xảy ra. (Xem bên dưới để xem điều gì thực sự sẽ xảy ra!)
$ python3 ## Run the Python interpreter Python 3.X.X (XXX, XXX XX XXXX, XX:XX:XX) [XXX] on XXX Type "help", "copyright", "credits" or "license" for more information. >>> a = 6 ## set a variable in this interpreter session >>> a ## entering an expression prints its value 6 >>> a + 2 8 >>> a = 'hi' ## 'a' can hold a string just as well >>> a 'hi' >>> len(a) ## call the len() function on a string 2 >>> a + len(a) ## try something that doesn't work Traceback (most recent call last): File "", line 1, in TypeError: can only concatenate str (not "int") to str >>> a + str(len(a)) ## probably what you really wanted 'hi2' >>> foo ## try something else that doesn't work Traceback (most recent call last): File "", line 1, in NameError: name 'foo' is not defined >>> ^D ## type CTRL-d to exit (CTRL-z in Windows/DOS terminal)Hai dòng python in sau khi bạn nhập python và trước >>> câu lệnh cho bạn biết về phiên bản python bạn đang sử dụng và nơi xây dựng phiên bản đó. Miễn là nội dung đầu tiên được in ra "Python 3.", những ví dụ sau sẽ phù hợp với bạn.
Như bạn có thể thấy ở trên, bạn có thể dễ dàng thử nghiệm với các biến và toán tử. Ngoài ra, phiên dịch sẽ đưa ra hoặc "nâng lên" theo cách nói Python, lỗi thời gian chạy nếu mã cố gắng đọc một biến chưa được gán giá trị. Giống như C++ và Java, Python phân biệt chữ hoa chữ thường nên "a" và "A" là các biến khác nhau. Điểm cuối mỗi dòng đánh dấu điểm kết thúc của một câu lệnh, vì vậy, không giống như C++ và Java, Python không yêu cầu dấu chấm phẩy ở cuối mỗi câu lệnh. Nhận xét bắt đầu bằng "#" và mở rộng đến cuối dòng.
Các tệp nguồn Python sử dụng đuôi ".py" và được gọi là "mô-đun". Với mô-đun Python hello.py, cách dễ nhất để chạy mô-đun đó là bằng lệnh shell "python hello.py Alice" Lệnh gọi này sẽ gọi trình thông dịch Python để thực thi mã trong hello.py, truyền vào đó đối số dòng lệnh "Alice". Hãy xem trang tài liệu chính thức để biết tất cả các tuỳ chọn mà bạn có khi chạy Python từ dòng lệnh.
Đây là một chương trình hello.py rất đơn giản (lưu ý rằng các khối mã được phân tách nghiêm ngặt bằng dấu thụt đầu dòng thay vì dấu ngoặc nhọn - bạn sẽ tìm hiểu thêm ở phần sau!):
#!/usr/bin/python3 # import modules used here - sys is a very standard one import sys # Gather our code in a main() function def main(): print('Hello there', sys.argv[1]) # Command line args are in sys.argv[1], sys.argv[2] ... # sys.argv[0] is the script name itself and can be ignored # Standard boilerplate to call the main() function to begin # the program. if __name__ == '__main__': main()Việc chạy chương trình này từ dòng lệnh sẽ có dạng như sau:
$ python3 hello.py Guido Hello there Guido $ ./hello.py Alice ## without needing 'python3' first (Unix) Hello there AliceCác câu lệnh ngoài cùng trong tệp Python hoặc "mô-đun" sẽ được thiết lập một lần. Các câu lệnh đó chạy từ trên xuống dưới trong lần đầu tiên mô-đun được nhập vào đâu đó, thiết lập các biến và hàm của mô-đun đó. Một mô-đun Python có thể chạy trực tiếp (như trên python3 hello.py Bob) hoặc được một số mô-đun khác nhập và sử dụng. Khi tệp Python chạy trực tiếp, biến đặc biệt "__name__" được đặt thành "__main__". Do đó, thông thường, if __name__ ==... nguyên mẫu sẽ được hiển thị ở trên để gọi hàm main() khi chạy mô-đun trực tiếp, chứ không phải khi mô-đun được một số mô-đun khác nhập.
Trong một chương trình Python tiêu chuẩn, danh sách sys.argv chứa các đối số dòng lệnh theo cách tiêu chuẩn, trong đó sys.argv[0] là chính chương trình, sys.argv[1] đối số đầu tiên, v.v. Nếu biết về argc hoặc số lượng đối số, bạn chỉ cần yêu cầu giá trị này từ Python bằng len(sys.argv), giống như cách chúng ta đã làm trong mã thông dịch tương tác ở trên khi yêu cầu độ dài của chuỗi. Nhìn chung, len() có thể cho bạn biết độ dài của một chuỗi, số lượng phần tử trong danh sách và các bộ dữ liệu (một cấu trúc dữ liệu khác giống như mảng) cũng như số lượng cặp khoá-giá trị trong từ điển.
Các hàm trong Python được định nghĩa như sau:
# Defines a "repeat" function that takes 2 arguments. def repeat(s, exclaim): """ Returns the string 's' repeated 3 times. If exclaim is true, add exclamation marks. """ result = s + s + s # can also use "s * 3" which is faster (Why?) if exclaim: result = result + '!!!' return resultNgoài ra, hãy lưu ý cách các dòng tạo nên hàm hoặc câu lệnh if được nhóm lại theo cùng mức thụt lề. Chúng tôi cũng trình bày 2 cách lặp lại các chuỗi khác nhau, sử dụng toán tử + thân thiện với người dùng hơn, nhưng * cũng hữu ích vì đây là thao tác "Lặp lại" của Python toán tử, nghĩa là '-' * 10 cung cấp cho '-', một cách gọn gàng để tạo "dòng" trên màn hình. Trong phần nhận xét mã, chúng tôi gợi ý rằng * hoạt động nhanh hơn +, lý do là * tính kích thước của đối tượng kết quả một lần trong khi với +, phép tính đó được thực hiện mỗi khi + được gọi. Cả + và * đều được gọi là "quá tải" vì chúng có ý nghĩa khác nhau cho số và cho chuỗi (và các kiểu dữ liệu khác).
Từ khoá def xác định hàm có các tham số nằm trong dấu ngoặc đơn và mã được thụt lề. Dòng đầu tiên của một hàm có thể là chuỗi tài liệu ("docstring") mô tả chức năng của hàm. Chuỗi tài liệu có thể là một dòng đơn hoặc một nội dung mô tả nhiều dòng như trong ví dụ trên. (Đúng, đó là "dấu ngoặc kép", một tính năng chỉ có ở Python!) Các biến được xác định trong hàm là cục bộ của hàm đó, do đó "kết quả" trong hàm trên tách biệt với "kết quả" biến trong một hàm khác. Câu lệnh return có thể nhận một đối số, trong trường hợp đó, giá trị được trả về cho phương thức gọi.
Dưới đây là mã gọi hàm repeat() ở trên, in ra nội dung trả về:
def main(): print(repeat('Yay', False)) ## YayYayYay print(repeat('Woo Hoo', True)) ## Woo HooWoo HooWoo Hoo!!!Trong thời gian chạy, các hàm phải được xác định bằng cách thực thi "def" trước khi chúng được gọi. Thông thường, bạn nên chống lại hàm main() ở cuối tệp bằng các hàm mà hàm này gọi phía trên nó.
Một tính năng khác thường của Python là thụt lề khoảng trắng của một đoạn mã ảnh hưởng đến ý nghĩa của đoạn mã đó. Một khối logic của các câu lệnh, chẳng hạn như các câu lệnh tạo nên một hàm phải có cùng mức thụt lề, được đặt từ phần thụt đầu dòng của hàm mẹ hoặc "if" hay bất cứ thứ gì khác. Nếu một trong các dòng trong nhóm có phần thụt lề khác, thì dòng đó sẽ bị gắn cờ là lỗi cú pháp.
Việc Python sử dụng khoảng trắng ban đầu có vẻ hơi lạ, nhưng nó hợp lý và tôi thấy mình nhanh chóng quen với việc này. Tránh sử dụng THẺ vì chúng làm phức tạp đáng kể lược đồ thụt lề (chưa đề cập đến THẺ có thể mang nhiều ý nghĩa khác nhau trên các nền tảng khác nhau). Thiết lập trình chỉnh sửa của bạn để chèn dấu cách thay vì TAB cho mã Python.
Một câu hỏi phổ biến mà người mới bắt đầu hay hỏi là "Tôi nên thụt lề bao nhiêu dấu cách?" Theo hướng dẫn quy tắc Python chính thức (PEP 8), bạn nên thụt lề 4 dấu cách. (Thông tin thú vị: Nguyên tắc nội bộ của Google quy định cách thụt lề bằng 2 dấu cách!)
Python thực hiện rất ít việc kiểm tra tại thời điểm biên dịch, trì hoãn hầu hết các lượt kiểm tra kiểu, tên, v.v. trên mỗi dòng cho đến khi dòng đó chạy. Giả sử các lệnh gọi main() ở trên repeat() như sau:
def main(): if name == 'Guido': print(repeeeet(name) + '!!!') else: print(repeat(name))Câu lệnh if chứa một lỗi rõ ràng, trong đó hàm repeat() vô tình được nhập là repeeeet(). Điều thú vị trong Python ... mã này biên dịch và chạy tốt miễn là tên trong thời gian chạy không phải là "Guido". Chỉ khi một lượt chạy thực sự cố gắng thực thi repeeeet() thì hệ thống mới nhận thấy rằng không có hàm nào như vậy và phát sinh lỗi. Cũng có lỗi thứ hai trong đoạn mã này. tên chưa được chỉ định giá trị trước khi so sánh với 'Guido'. Python sẽ đưa ra 'NameError' nếu bạn cố gắng đánh giá một biến chưa được chỉ định. Đây là một số ví dụ minh hoạ rằng trong lần đầu chạy chương trình Python, một số lỗi đầu tiên mà bạn thấy sẽ là lỗi chính tả đơn giản hoặc biến chưa khởi tạo như những lỗi này. Đây là lĩnh vực mà các ngôn ngữ có hệ thống kiểu chi tiết hơn, như Java, có lợi thế ... chúng có thể phát hiện được các lỗi như vậy tại thời điểm biên dịch (nhưng tất nhiên bạn phải duy trì tất cả thông tin về kiểu đó ... đó là một sự đánh đổi).
Python 3 đã ra mắt Gợi ý về kiểu. Gợi ý kiểu giúp bạn chỉ rõ kiểu cho mỗi đối số trong một hàm cũng như loại đối tượng được hàm trả về là gì. Ví dụ: trong hàm được chú thích def is_positive(n: int) -> bool:, đối số n là một int và giá trị trả về là một bool. Chúng ta sẽ tìm hiểu ý nghĩa của các loại này ở phần sau. Tuy nhiên, gợi ý kiểu là hoàn toàn không bắt buộc. Bạn sẽ thấy ngày càng nhiều mã áp dụng các gợi ý về loại vì nếu bạn sử dụng chúng, một số trình chỉnh sửa như cider-v và VS.code có thể chạy các bước kiểm tra để xác minh rằng các hàm của bạn được gọi bằng các loại đối số phù hợp. Chúng thậm chí có thể đề xuất và xác thực các đối số khi bạn chỉnh sửa mã. Hướng dẫn này sẽ không đề cập đến các gợi ý về loại, nhưng chúng tôi muốn đảm bảo rằng bạn biết được các gợi ý này khi từng nghe về hoặc nhìn thấy chúng trong tự nhiên.
Vì các biến Python không có loại nào được nêu trong mã nguồn, nên sẽ rất hữu ích nếu bạn đặt tên có ý nghĩa cho biến để nhắc nhở bản thân về những gì đang diễn ra. Vậy nên hãy dùng "tên" nếu đó chỉ là một tên và "tên" nếu đó là danh sách tên và "bộ dữ liệu" nếu đó là một danh sách các bộ dữ liệu. Nhiều lỗi Python cơ bản xảy ra do bạn quên loại giá trị trong mỗi biến, vì vậy, hãy sử dụng tên biến (tất cả những tên bạn thực sự có) để giúp mọi thứ suôn sẻ.
Theo như cách đặt tên thực tế, một số ngôn ngữ ưu tiên dùng dấu gạch dưới cho các tên biến được tạo từ "nhiều từ", nhưng các ngôn ngữ khác lại thích camelCasing. Nhìn chung, Python ưu tiên phương thức dấu gạch dưới nhưng hướng dẫn nhà phát triển làm theo camelCasing nếu tích hợp vào mã Python hiện có đã sử dụng kiểu đó. Số lượng dễ đọc. Vui lòng đọc thêm trong phần về quy ước đặt tên trong PEP 8.
Như bạn có thể đoán, các từ khoá như "if" và "trong khi" Bạn không thể sử dụng làm tên biến. Nếu bạn làm như vậy, bạn sẽ gặp lỗi cú pháp. Tuy nhiên, hãy lưu ý không sử dụng hàm tích hợp sẵn làm tên biến. Ví dụ: trong khi "str", "list" và "print" có vẻ là tên hay, bạn sẽ ghi đè các biến hệ thống đó. Các thành phần tích hợp không phải là từ khoá. Do đó, các nhà phát triển mới Python có thể vô tình sử dụng các thành phần này.
Giả sử bạn có một mô-đun "binky.py" tệp này có chứa "def foo()". Tên đủ điều kiện của hàm foo là "binky.foo". Bằng cách này, các mô-đun Python khác nhau có thể đặt tên bất kỳ cho các hàm và biến của chúng và tên biến sẽ không xung đột - module1.foo khác với mô-đun2.foo. Trong từ vựng Python, chúng tôi sẽ nói rằng binky, mô-đun1 và mô-đun2 đều có "không gian tên" riêng của chúng, mà bạn có thể đoán là các liên kết tên biến với đối tượng.
Ví dụ: chúng tôi có tiêu chuẩn "sys" mô-đun chứa một số cơ sở hệ thống tiêu chuẩn, như danh sách argv và hàm exit(). Với câu lệnh "nhập hệ thống" sau đó, bạn có thể truy cập vào các định nghĩa trong mô-đun sys và cung cấp các định nghĩa đó theo tên đủ điều kiện, ví dụ: sys.exit(). (Có, "sys" cũng có không gian tên!)
import sys # Now can refer to sys.xxx facilities sys.exit(0)Có một biểu mẫu nhập khác giống như sau: "from sys import argv, exit". Điều đó giúp argv và exit() có sẵn theo tên ngắn; tuy nhiên, bạn nên sử dụng biểu mẫu ban đầu với các tên đủ điều kiện vì sẽ dễ dàng hơn rất nhiều trong việc xác định nguồn gốc của một hàm hoặc thuộc tính.
Có nhiều mô-đun và gói đi kèm với một bản cài đặt tiêu chuẩn của trình thông dịch Python, vì vậy, bạn không cần phải làm gì thêm để sử dụng các mô-đun và gói này. Các thư viện này được gọi chung là "Thư viện chuẩn Python". Các mô-đun/gói thường dùng bao gồm:
Bạn có thể tìm thấy tài liệu về tất cả các mô-đun và gói của Thư viện chuẩn tại http://docs.python.org/library.
Có nhiều cách để yêu cầu trợ giúp về Python.
Bên trong trình thông dịch Python, hàm help() sẽ kéo lên chuỗi tài liệu cho nhiều mô-đun, hàm và phương thức. Các chuỗi tài liệu này tương tự như javadoc của Java. Hàm dir() cho bạn biết các thuộc tính của một đối tượng là gì. Dưới đây là một số cách để gọi Help() và dir() từ trình thông dịch:
Link nội dung: https://itt.edu.vn/index.php/dieu-nao-sau-day-duoc-su-dung-de-xac-dinh-mot-khoi-ma-trong-ngon-ngu-python-a551.html