Fprintf trăn

Cuốn sách Lập trình Python này được O2 Education sưu tầm và chia sẻ lại, chứ không phải tài liệu do chúng tôi viết. Lưu ý rằng phiên bản của cuốn sách này khá cũ, sử dụng Python 2. x nên có đôi chút khác biệt so với các phiên bản Python 3. x hiện nay

SIÊU SALE - SIÊU SALE

0. Thông tin về bản quyền

Bản quyền © 2001-2006 Python Software Foundation. Giữ toàn quyền

SIÊU SALE - SIÊU SALE

Bản quyền © 2000 BeOpen. com. Giữ toàn quyền

SIÊU SALE - SIÊU SALE

Bản quyền © 1995-2000 Corporation for National Research Initiatives. Giữ toàn quyền

SIÊU SALE - SIÊU SALE

Bản quyền © 1991-1995 Stichting Mathematisch Centrum. Giữ toàn quyền

SIÊU SALE - SIÊU SALE

Xem phần cuối của tài liệu này về toàn bộ thông tin quyền hạn và giấy phép

SIÊU SALE - SIÊU SALE

Tóm tắt

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

SIÊU SALE - SIÊU SALE

Trình thông dịch Python và bộ thư viện chuẩn đầy đủ được cung cấp miễn phí ở dạng nguồn hoặc nhị phân cho mọi hệ thống chính từ trang chủ Python, http. //www. python. org/, và có thể được phát tán tùy thích. Trang chủ đó cũng phân phối và liên kết nhiều mô-đun Python khác, các chương trình và công cụ, cũng như các tài liệu thêm

SIÊU SALE - SIÊU SALE

Trình thông dịch Python có thể được mở rộng dễ dàng với những chức năng và kiểu dữ liệu được viết trong C hoặc C++ [hoặc ngôn ngữ nào đó có thể gọi được từ C]. Python cũng phù hợp dùng làm ngôn ngữ mở rộng cho các ứng dụng mà người dùng có thể cải biến

SIÊU SALE - SIÊU SALE

Bài chỉ dẫn này giới thiệu với người đọc bằng một cách dễ hiểu những khái niệm cơ bản và các tính năng của ngôn ngữ và hệ thống Python. Để tận dụng tốt nhất chỉ dẫn này, bạn nên có trình thông dịch Python sẵn sàng để thực tập. Nhưng bạn cũng không nhất thiết cần đến nó để đọc tài liệu này vì mọi ví dụ đều ngắn và dễ hiểu cả

SIÊU SALE - SIÊU SALE

Để tìm hiểu thêm về các mô-đun và đối tượng chuẩn, xem qua tài liệu Tham khảo thư viện Python. Sổ tay tham khảo Python chứa định nghĩa ngôn ngữ chính quy hơn. Để viết các phần mở rộng bằng C hoặc C++, bạn nên đọc Mở rộng và Nhúng trình thông dịch Python và Tham khảo API cho Python/C. Và cũng có nhiều sách khác nói sâu hơn về Python

SIÊU SALE - SIÊU SALE

Bài chỉ dẫn này không nhằm vào việc nói về mọi tính năng, hoặc thậm chí là mọi tính năng hay dùng. Thay vào đó, nó giới thiệu nhiều chức năng đáng lưu ý của Python và đem lại cho bạn một cách nhìn về kiểu cách và hương vị của ngôn ngữ này. Sau khi đọc xong, bạn sẽ có thể đọc và viết các mô-đun và chương trình Python, và bạn sẽ sẵn sàng tìm hiểu tiếp về những mô-đun Python khác được nhắc đến trong Tham khảo thư viện Python

SIÊU SALE - SIÊU SALE

Phiên bản 2. 5, tài liệu được cập nhật ngày 19, tháng 09, năm 2006

SIÊU SALE - SIÊU SALE

1. Khai vị

Nếu bạn làm việc nhiều với máy vi tính, một lúc nào đó bạn sẽ nhận thấy bạn muốn tự động hóa một số việc. Ví dụ, bạn muốn thực hiện một phép tìm kiếm và thay thế với nhiều tập tin văn bản, hoặc đổi tên và sắp xếp một loạt các tập tin ảnh theo một cách phức tạp. Có thể bạn muốn viết cơ sở dữ liệu tùy biến nho nhỏ, hoặc một ứng dụng với giao diện đồ họa đặc biệt, hay một trò chơi đơn giản

SIÊU SALE - SIÊU SALE

Nếu bạn là một người chuyên viết phần mềm, bạn có thể làm việc với nhiều thư viện C/C++/Java nhưng bạn nhận thấy thường lặp đi lặp lại việc viết/biên dịch/thử/biên dịch là quá tốn thời gian. Có thể bạn viết một bộ các thử nghiệm cho các thư viện ấy và nhận ra rằng viết mã lệnh để thử nghiệm là một việc chán ngấy. Hoặc có thể bạn viết một chương trình cần sử dụng một ngôn ngữ mở rộng, và bạn không muốn thiết kế, xây dựng cả một ngôn ngữ mới cho ứng dụng của mình

SIÊU SALE - SIÊU SALE

Python chính là ngôn ngữ lập trình bạn cần

SIÊU SALE - SIÊU SALE

Bạn có thể viết một kịch bản Unix hoặc một bó lệnh [batch file] Windows cho công việc kiểu này thế nhưng, ngôn ngữ kịch bản chỉ tốt cho việc chuyển các tập tin lòng vòng và sửa đổi các dữ liệu văn bản, nó không thích hợp cho một ứng dụng với giao diện đồ họa hoặc một trò chơi. Bạn cần viết một chương trình bằng C/C++/Java, nhưng nó có thể tiêu tốn nhiều thời gian cho việc phát triển kể cả từ bản nháp đầu tiên của chương trình. Sử dụng Python đơn giản hơn, chạy được cả trên Windows, MacOS X, và các hệ điều hành Unix, và nó cũng giúp bạn hoàn thành công việc nhanh hơn

SIÊU SALE - SIÊU SALE

Sử dụng ngôn ngữ lập trình Python thì đơn giản, nhưng nó là một ngôn ngữ lập trình thực thụ, cung cấp nhiều cấu trúc hơn và hỗ trợ các chương trình lớn hơn so với các ngôn ngữ kịch bản hoặc lệnh Windows. Mặt khác, Python cũng hỗ trợ nhiều phép kiểm tra lỗi hơn C, và, là một ngôn ngữ bậc-rất-cao, nó có sẵn các kiểu dữ liệu cấp cao, như các mảng và các từ điển hoạt động. Chính vì nhiều loại dữ liệu tổng quát của nó Python được ứng dụng rộng rãi hơn Awk hoặc thậm chí chí là Perl trong nhiều loại công việc khác nhau, do đó có nhiều việc làm bằng Python cũng dễ dàng như làm bằng các ngôn ngữ khác nhau

SIÊU SALE - SIÊU SALE

Ngôn ngữ lập trình Python cho phép bạn chia nhỏ chương trình của mình ra thành các mô-đun để có thể sử dụng lại trong các chương trình Python khác. Nó có sẵn rất nhiều mô-đun tiêu chuẩn để bạn có thể sử dụng cơ sở hạ tầng cho chương trình của mình — hoặc như các ví dụ để bắt đầu học lập trình bằng Python. Một vài mô-đun trong số chúng cung cấp các chức năng như tệp I/O [truy cập/ra], lệnh gọi hàm hệ thống, ổ cắm và thậm chí cả các giao tiếp với các công cụ giao diện đồ họa như đồ họa.

SIÊU SALE - SIÊU SALE

Python là một ngôn ngữ thông dịch, điều đó giúp bạn tiết kiệm thời gian tiết kiệm trong quá trình phát triển chương trình vì công việc biên dịch hay liên kết là không cần thiết. Bộ thông dịch có thể được sử dụng theo một cách tương tác, làm cho việc thử nghiệm các tính năng của ngôn ngữ trở nên dễ dàng, viết các chương trình bỏ đi, hoặc thử các chức năng trong quá trình phát triển chương trình từ dưới lên. Nó cũng là một máy tính cầm tay tiện lợi

SIÊU SALE - SIÊU SALE

Python cho phép viết các chương trình nhỏ gọn và dễ hiểu. Các chương trình viết bằng Python thường ngắn hơn so với các chương trình viết bằng C, C++ hoặc Java, vì nhiều lý do.

SIÊU SALE - SIÊU SALE
  • các loại dữ liệu cao cấp cho phép bạn thực hiện nhanh các thao tác phức tạp chỉ với một lệnh đơn giản;
  • play the command has been back by the distance of the start lines instead because close open with the dấu trích dẫn;
  • không cần khai báo biến hoặc tham số trước khi sử dụng

Python có tính mở rộng. Nếu bạn biết lập trình C thì rất dễ dàng để bổ sung các hàm có sẵn hoặc mô-đun vào bộ thông dịch, cũng như việc thực hiện các thao tác quan trọng ở tốc độ tối đa, hoặc liên kết các chương trình Python với Python. . Một khi bạn đã thực sự móc nối, bạn có thể liên kết bộ thông dịch Python vào trong các ứng dụng viết bằng C và sử dụng nó như một tính năng mở rộng hoặc một ngôn ngữ lệnh cho ứng dụng đó

SIÊU SALE - SIÊU SALE

Cũng xin nói luôn, tên của ngôn ngữ này được đặt sau khi BBC phát chương trình “Monty Python’s Flying Circus” và nó không có liên quan gì với những loài bò sát bẩn thỉu. Những tham khảo mang tính trào phùng tới Monty Python trong tài liệu không chỉ được cho phép, mà còn được cổ vũ

SIÊU SALE - SIÊU SALE

Bây giờ khi tất cả các bạn đã bị kích thích về Python, bạn sẽ muốn khám phá nó kỹ hơn. Cách học một ngôn ngữ tốt nhất là hãy sử dụng nó, bài chỉ dẫn này mời gọi bạn hãy vừa thử trình thông dịch Python khi bạn vừa đọc

SIÊU SALE - SIÊU SALE

Trong chương tiếp theo, các phương thức sử dụng bộ thông dịch sẽ được giải thích. Điều này không đơn thuần là thông tin, nhưng còn là cơ bản cho việc thử các ví dụ được trình bày về sau

SIÊU SALE - SIÊU SALE

Phần tự học còn lại sẽ giới thiệu các tính năng khác nhau của ngôn ngữ Python và hệ thống thông qua các ví dụ, bắt đầu với các biểu thức đơn giản, các câu lệnh và các kiểu dữ liệu, đi qua các hàm và các mô-đun, và kết thúc là tiếp cận với các khái niệm cao cấp như biệt lệ và các lớp do người dùng tự định nghĩa

SIÊU SALE - SIÊU SALE

2. Sử dụng trình thông dịch Python

2. 1 Chạy trình thông dịch

Bộ thông dịch Python thường được cài đặt là /usr/local/bin/python trên các máy tính đã cài đặt sẵn; bổ sung /usr/local/bin vào đường dẫn tìm kiếm của vỏ [shell] Unix sẽ giúp khởi động nó từ mọi nơi bằng một lệnh đơn giản

SIÊU SALE - SIÊU SALE

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
14

SIÊU SALE - SIÊU SALE

trong shell. Vì nơi mà trình thông dịch được cài đặt là một tùy chọn nên khi cài đặt trình thông dịch có thể sẽ được đặt ở một nơi khác; hãy hỏi quản trị hệ thống của bạn. [ví dụ /usr/local/python cũng là một vị trí hay được dùng để cài. ]

SIÊU SALE - SIÊU SALE

Trên các máy tính dùng Windows, Python thường được cài đặt vào

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
15, dù vậy bạn vẫn có thể thay đổi vị trí cài đặt khi chạy chương trình cài đặt. Để bổ sung thư mục này vào đường dẫn, bạn có thể gõ lệnh sau lên dấu nhắc lệnh trong cửa sổ DOS

SIÊU SALE - SIÊU SALE

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
16

SIÊU SALE - SIÊU SALE

Gõ một ký tự kết thúc tập tin [end-of-file character] [Control-D trên Unix, Control-Z trên Windows] tại dấu nhắc của bộ thông dịch sẽ thoát khỏi bộ thông dịch và trả về trạng thái kết thúc chương trình là

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
17 [không] cho hệ điều hành, bạn cũng có thể thoát khỏi bộ thông dịch bằng các lệnh sau. “
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
18“

SIÊU SALE - SIÊU SALE

Tính năng soạn thảo theo dòng của bộ thông dịch thường không phức tạp lắm. Trên Unix, bất cứ ai đã cài đặt bộ thông dịch đều có thể bật chế độ hỗ trợ cho thư viện GNU readline, điều này sẽ bổ sung tính năng soạn thảo tương tác tốt hơn cũng như các tính năng lịch sử lệnh. Có thể kiểm tra việc hỗ trợ tính năng soạn thảo dòng bằng cách nhấn Control-P tại dấu nhắc đầu tiên của Python. Nếu có tiếng bíp, bộ thông dịch của bạn có hỗ trợ soạn thảo dòng; xem phụ lục để biết về các phím. Nếu không có gì xảy ra, hoặc kí tự P hiện lên, thì tính năng soạn thảo dòng không được hỗ trợ; bạn chỉ việc dùng phím lùi [backspace] để xóa kí tự hiện ra

SIÊU SALE - SIÊU SALE

Bộ thông dịch Python hoạt động khá giống với vỏ Unix. khi được gọi với một đầu nhập chuẩn đã kết nối với một thiết bị đầu cuối [tty device], nó đọc và thực hiện các lệnh một cách tương tác; khi được gọi với tham số là một tên tập tin hoặc với đầu vào chuẩn là một tập tin, nó đọc và thực hiện kịch bản chứa trong tập đó

SIÊU SALE - SIÊU SALE

Một cách nữa để khởi động bộ thông dịch là lệnh “

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
14
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
20
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
21“, sẽ thực thi một hoặc nhiều câu lệnh trong command, giống như tùy chọn
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
20 của shell. Vì các câu lệnh của Python thường chứa các khoảng trống hoặc các kí tự đặc biệt, chọn lựa an toàn nhất là bao command bằng dấu nháy kép [“]

SIÊU SALE - SIÊU SALE

Một số mô-đun cũng có thể được dùng như kịch bản. Chúng có thể được gọi bằng cách sử dụng cú pháp “

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
14
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
24
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
25“, lệnh này sẽ thực hiện tập tin nguồn module như khi bạn chỉ ra tên tập tin và đường dẫn đầy đủ trên dòng lệnh

SIÊU SALE - SIÊU SALE

Xin lưu ý rằng có sự khác biệt giữa “

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
26” và “
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
27“. Trong trường hợp sau, các yêu cầu vào [input request] từ chương trình, ví dụ như lời gọi tới
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
28 và
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
29, được cung cấp từ file. Vì tập tin này đã được đọc đến cuối bởi trình phân tích [parser] trước khi chương trình thực thi, chương trình sẽ gặp phải cuối tập tin [end-of-file] ngay lập tức. Trong trường hợp đầu [là cách bạn sẽ hay dùng] các yêu cầu vào được cung cấp từ bất kỳ tập tin hoặc thiết bị nào được kết nối vào đầu vào chuẩn của trình thông dịch Python

SIÊU SALE - SIÊU SALE

Khi tập tin kịch bản [script file] được sử dụng, đôi khi sẽ rất hữu dụng nếu có thể chạy chương trình và chuyển sang chế độ tương tác ngay sau đó. Điều này thực hiện được bằng cách truyền

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
30 trước script [python -i script]. [Phương pháp này không hoạt động nếu chương trình được đọc từ đầu vào chuẩn, lí do của chuyện này đã được giải thích trong đoạn trước. ]

SIÊU SALE - SIÊU SALE

2. 1. 1 Truyền tham số

Bộ giao dịch nhận biết tên chương trình và các tham số khác được truyền vào chương trình trong biến

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
31, dưới dạng một danh sách các chuỗi. Miniature length is a; . Khi tên kịch bản được truyền vào là ‘_______0_______33‘ [có nghĩa là đầu vào chuẩn],
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
32 được gán thành ‘-‘. Khi lệnh
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
20 được sử dụng,
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
32 được gán thành ‘
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
20‘. Khi mô-đun
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
24 được sử dụng,
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
32 được gán là tên đầy đủ của mô-đun đã tải. Các tùy chọn sau
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
20 lệnh hoặc mô-đun
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
24 không được sử dụng bởi trình thông dịch Python truyền vào
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
31 để cho lệnh hoặc mô-đun xử lý

SIÊU SALE - SIÊU SALE

2. 1. 2 Chế độ tương tác

Khi các lệnh được đọc từ một tty, thông tin dịch vụ được xem là đang trong chế độ tương tác. Trong chế độ này, nó nhắc lệnh tiếp theo với dấu nhắc chính [dấu nhắc chính], thường là ba dấu lớn hơn

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
43; . Bộ thông dịch sẽ trong một thông báo chào mừng, số hiệu phiên bản và thông báo bản quyền trước khi xuất hiện dấu nhắc

SIÊU SALE - SIÊU SALE
python
Python 1.5.2b2 [#1, Feb 28 1999, 00:02:06]  [GCC 2.8.1] on sunos5
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>>

Các dòng nối tiếp được sử dụng khi nhập vào cấu trúc nhiều dòng. Vui lòng xem ví dụ bên dưới, chú thích câu lệnh nếu

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!

2. 2 Trình thông dịch và môi trường của nó

2. 2. 1 Xử lý lỗi

Khi xảy ra lỗi, bộ dịch trong thông báo lỗi và lần đảo ngược ngăn xếp [dấu vết ngăn xếp]. Trong chế độ tương tác, nó sẽ trả lại câu hỏi chính; . [Các biệt lệ được xử lý bằng cách nhìn ngoại trừ trong một câu lệnh thử không phải là lỗi chúng ta nói đến ở đây. ] Một số lỗi nghiêm trọng là không điều kiện quan trọng và gây ra lỗi thoát với giá trị lỗi khác 0; . Tất cả các thông báo lỗi đều được xuất ra dòng lỗi xuất chuẩn [luồng lỗi tiêu chuẩn];

SIÊU SALE - SIÊU SALE

Gõ ký tự ngắt [thường là Control-C hoặc DEL] vào dấu nhắc chính hoặc dấu nhắc thứ sẽ bỏ qua những gì đã nhập và trở về dấu nhắc chính. Gõ ký tự ngắt trong khi một lệnh đang được thực thi sẽ gây ra sự khác biệt KeyboardInterrupt, trường hợp này có thể được xử lý bằng lệnh try

SIÊU SALE - SIÊU SALE

2. 2. 2 Các kịch bản khả thi Python

Trên các hệ thống Unix họ BSD, các kịch bản Python có thể được thực thi trực tiếp, như các kịch bản vỏ [shell script], bằng cách thêm dòng

SIÊU SALE - SIÊU SALE

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
45

SIÊU SALE - SIÊU SALE

[giả sử rằng bộ thông tin dịch vụ đã có trong PATH của người dùng] ở đầu kịch bản và đặc tính thực thi [chế độ thực thi] cho tập tin đó. Ký hiệu “

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
46” phải là hai ký tự đầu tiên của tập tin. Trên các nền khác nhau, dòng đầu tiên này phải kết thúc bằng một ký tự xuống dòng kiểu Unix [“
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
47“], không phải Mac OS [“
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
48“] hay Windows [“
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
49“]. Lưu ý rằng dấu thăng “
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
50“, được dùng để bắt đầu một chú thích trong Python

SIÊU SALE - SIÊU SALE

Bản ghi có thể được đặt quyền thực thi bằng cách sử dụng lệnh chmod

SIÊU SALE - SIÊU SALE

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
51

SIÊU SALE - SIÊU SALE

2. 2. 3 Bảng mã nguồn

Có thể sử dụng các bảng mã khác bảng ASCII trong Python source file. Cách tốt nhất là thêm các dòng chú thích đặc biệt vào ngay sau dòng #. to dedefine table code in file

SIÊU SALE - SIÊU SALE

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
52

SIÊU SALE - SIÊU SALE

Với tuyên bố này, mọi ký tự trong nguồn tệp sẽ được xem như từ bảng mã hóa, và do đó, chúng ta có thể viết các chuỗi Unicode trực tiếp trong bảng mã đó. Danh sách các bảng mã có thể được tìm thấy trong Tham khảo thư viện Python, trong phần codec

SIÊU SALE - SIÊU SALE

Ví dụ, để viết các ký tự biểu diễn đồng Euro, ta có thể sử dụng bảng mã ISO-8859-15, ký hiệu Euro có số thứ tự 164 trong bảng mã. Đoạn chương trình sau sẽ nhập giá trị 8364 [mã Unicode tương ứng với ký tự biểu diễn Euro] và thoát

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]

Nếu bộ soạn thảo của bạn hỗ trợ lưu tệp tin theo UTF-8 với dấu thứ tự byte UTF-8 [UTF-8 byte order mark – BOM], bạn có thể sử dụng nó thay thế cho một bảng mã khai báo. IDLE support this tương thích nếu Tùy chọn/Chung/Mã hóa nguồn mặc định/UTF-8 được thiết lập. Chú ý rằng ký hiệu này không được phiên bản Python 2. 2 trở về trước khi nhận biết, và cũng không được hệ thống điều hành nhận biết là các tập kịch bản với các dòng #. [chỉ được sử dụng trên các hệ thống Unix]

SIÊU SALE - SIÊU SALE

Với việc sử dụng UTF-8 [thông qua ký hiệu cũng như khai báo bảng mã], các ký tự trong hầu hết các ngôn ngữ trên thế giới có thể được sử dụng đồng thời trong các chuỗi nguyên bản và các chú thích. Sử dụng các ký tự phi tiêu chuẩn ASCII trong các định danh thì không được hỗ trợ. Để hiển thị đúng các ký tự, bộ soạn thảo của bạn nhất thiết phải biết tệp UTF-8 và buộc phải sử dụng các phông chữ hỗ trợ tốt cho các ký tự này

SIÊU SALE - SIÊU SALE

2. 2. 4 Tập tin khởi tạo tương tác

Khi bạn sử dụng Python ở chế độ tương tác, sẽ rất thuận lợi khi có một số lệnh tiêu chuẩn luôn được thực hiện mỗi khi bộ thông tin khởi động. Bạn có thể thực hiện công việc này bằng cách thiết lập một biến môi trường có tên PYTHONSTARTUP với giá trị là tên của tệp bạn chứa các câu lệnh khởi động. Cách này tương tự như chức năng. profile of shell Unix

SIÊU SALE - SIÊU SALE

Tập tin này chỉ được đọc trong phiên làm việc tương tác, không có tác dụng với các kịch bản, và khi /dev/tty chỉ được xác định là nguồn lệnh [nếu không thì trường hợp này cũng giống như phiên làm việc tương tác . Nó được thực thi trong cùng một vùng tên [không gian tên] mà các lệnh tương tác được thực thi, cho nên các đối tượng mà nó định nghĩa, hoặc nhập vào [nhập] có thể được sử dụng mà không cần xác nhận trong phiên làm việc tương tác. You can also change the prompt sys. ps1 và sys. ps2 in this file

SIÊU SALE - SIÊU SALE

Nếu bạn muốn đọc các tệp khởi động được bổ sung từ thư mục hiện tại, bạn có thể thiết lập trình điều khiển này trong tệp khởi động với mã như “if os. đường dẫn. isfile[‘. pythonrc. py’]. tập tin thực thi [‘. pythonrc. py’]”. Nếu bạn muốn khởi động tập tin trong một kịch bản, bạn phải chỉ rõ điều này trong một kịch bản

SIÊU BÁN - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]

3. Giới thiệu sơ lược về ngôn ngữ lập trình Python

Trong ví dụ nói, đầu vào và đầu ra được phân biệt bằng sự hiện diện của dấu nhắc [“

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
43 ” và “_______0_______44 “]. để lặp lại ví dụ, bạn cần nhập vào mọi thứ sau dấu nhắc, khi dấu nhắc xuất hiện; . Lưu ý rằng dấu nhắc thứ [dấu nhắc phụ] trên một dòng riêng của nó có nghĩa là bạn phải nhận một dòng trống;

SIÊU SALE - SIÊU SALE

Nhiều ví dụ trong tài liệu này, ngay cả những ví dụ nhập từ dòng lệnh tương tác, có cả chú thích. Các chú thích trong Python bắt đầu bằng một dấu thăng, “#”, và chiều dài tới hết dòng. Một chú thích có thể xuất hiện ở đầu dòng hoặc theo sau khoảng trắng hoặc mã, nhưng không phải trong một chuỗi. Thăng hạng trong một chuỗi chỉ là một thăng hạng

SIÊU SALE - SIÊU SALE

Một vài ví dụ

SIÊU SALE - SIÊU SALE
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."

3. 1 Dùng Python như là máy tính

Hãy thử một vài lệnh Python đơn giản. Khởi động trình thông dịch và chờ dấu nhắc chính, “

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
43 “. [Không lâu đâu. ]

SIÊU SALE - SIÊU SALE

3. 1. 1 Kiểu số trong ngôn ngữ lập trình Python

Trình thông dịch đóng vài trò là một máy tính đơn giản. bạn nhập một biểu thức và nó sẽ trả về giá trị. Cú pháp biểu thức rất dễ hiểu. các toán tử

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
56 và
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
57 hoạt động như trong hầu hết các ngôn ngữ khác [ví dụ Pascal hay C]; dấu ngoặc tròn dùng để gộp nhóm. Ví dụ

SIÊU SALE - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3

Dấu bằng [“

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
58“] được dùng để gán một giá trị vào một biến. Sau đó, không có giá trị nào được hiện ra trước dấu nhắc tương tác kế

SIÊU SALE - SIÊU SALE
>>> width = 20
>>> height = 5*9
>>> width * height
900

Một giá trị có thể được gán vào nhiều biến cùng một lúc

SIÊU SALE - SIÊU SALE
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0

Python hoàn toàn hỗ trợ dấu chấm động; các toán tử với các toán hạng khác kiểu chuyển toán hạng số nguyên thành dấu chấm động

SIÊU SALE - SIÊU SALE
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5

Số phức cũng được hỗ trợ; số ảo được viết với hậu tố “

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
59” hoặc “
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
60“. Các số phức với phần thực khác không được viết “[real+imagj]”, hoặc có thể được tạo ra với hàm “
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
61“

SIÊU SALE - SIÊU SALE
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]

Các số phức luôn được thể hiện bởi hai số chấm động, phần thực và phần ảo. Để lấy các phần từ một số phức

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
62, dùng
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
63 và
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
64

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
0

Các hàm chuyển đổi từ chấm động sang số nguyên [

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
65,
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
66 và
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
67] không dùng được với số phức — không có một cách chính xác nào để chuyển đổi một số phức thành một số thực. Dùng
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
68 để lấy độ lớn [magnitude] [như là một số chấm động] hoặc
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
63 để lấy phần thực

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
1

Trong chế độ tương tác, biểu thức được in ra cuối cùng được gán vào biến

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
70. Khi bạn dùng Python như là máy tính, nó sẽ giúp bạn tiếp tục các phép tính dễ hơn, ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
2

Biến này nên được coi là chỉ đọc từ phía người dùng. Không nên gán một giá trị vào biến này trực tiếp — bạn sẽ tạo một biến cục bộ riêng với cùng tên, che đi biến có sẵn với cách thức [behavior] diệu kỳ của nó

SIÊU SALE - SIÊU SALE

3. 1. 2 Chuỗi

Ngoài số, Python còn làm việc được với chuỗi, có thể được biểu hiện theo nhiều cách. Chúng có thể được kẹp trong dấu nháy đơn, đôi

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
3

Các chuỗi có thể phủ nhiều dòng theo nhiều cách. Các dòng tiếp tục [continuation line] có thể được dùng, với một dấu suỵt huyền là ký tự cuối cùng trên một dòng cho biết rằng dòng kế là sự nối tiếp của dòng này

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
4

Lưu ý rằng các dòng mới vẫn cần được chèn trong chuỗi với

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
47; ký tự dòng mới theo sau dấu suỵt huyền sẽ bị bỏ qua. Ví dụ này sẽ in ra

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
5

Tuy nhiên, nếu ta làm cho chuỗi trực tiếp thành chuỗi “thô”, các dãy

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
47 sẽ không được chuyển thành các dòng mới, nhưng dấu suỵt huyền ở cuối dòng, và ký tự dòng mới trong nguồn, sẽ đều được thêm vào trong chuỗi như dữ liệu. Cho nên, ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
6

sẽ in

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
7

Hoặc, các chuỗi có thể được vây quanh trong một cặp nháy ba.

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
73 hoặc
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
74. Cuỗi mỗi dòng không cần thêm dấu suỵt huyền khi dùng nháy ba, và chúng sẽ có mặt trong chuỗi

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
8

xuất ra

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
9

Trình thông dịch in ra kết quả của các tác vụ chuỗi theo cùng cách như khi chúng được nhập vào. trong dấu nháy, và với các ký tự dấu nháy hay đặc biệt khác được thoát nghĩa [escape] bằng dấu suỵt huyền, để hiện giá trị thực. Chuỗi được kèm trong dấu nháy đôi nếu chuỗi chứa một dấu nháy đơn và không chứa dấu nháy đôi, ngoài ra nó sẽ được chứa trong các dấu nháy đơn. [Câu lệnh print, được giải thích sau, có thể dùng để viết các chuỗi không có dấu nháy hoặc thoát nghĩa. ]
Các chuỗi có thể được nối với nhau với toán tử

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
75, và được lặp lại với toán tử
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
76

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
0

Hai chuỗi trực tiếp kế nhau được tự động nối với nhau; dòng đầu tiên bên trên có thể được biết “

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
77‘”; việc này chỉ có tác dụng với hai chuỗi trực tiếp [string literal], không có tác dụng với các biểu thức chuỗi bất kỳ khác

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
1

Các chuỗi có thể được chỉ mục [subscript hoặc index]; như trong C, ký tự đầu tiên của một chuỗi có chỉ mục

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
17. Không có kiểu ký tự riêng; một ký tự chỉ đơn giản là một chuỗi có độ dài là một. Như trong Icon, chuỗi con có thể được chỉ định theo cách viết cắt lát [slice notation]. hai chỉ mục phân cách bởi một dấu hai chấm

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
2

Các chỉ mục cắt lát có giá trị mặc định hữu dụng; chỉ mục đầu tiên có giá trị mặc định là không, chỉ mục thứ hai mặc định là kích thước của chuỗi đang bị cắt

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
3

Không như C, các chuỗi Python không thể bị thay đổi. Phép gán vào một vị trí chỉ mục trong một chuỗi sẽ gây ra lỗi

SIÊU BÁN - SIÊU BÁN
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
4

Tuy nhiên, việc tạo một chuỗi với nội dung cụm chung cũng dễ dàng và hiệu quả

SIÊU BÁN - SIÊU BÁN
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
5

Đây là một tính chất bất biến hữu dụng khác của nhiệm vụ cắt lát.

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
79 bằng
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
80

SIÊU BÁN - SIÊU BÁN
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
6

Các mục cắt lát giảm sinh [thoái hóa] duy nhất được xử lý rất khéo léo. một mục quá lớn sẽ được thay thế bằng chuỗi kích thước, một giới hạn trên nhỏ hơn giới hạn dưới trả về một chuỗi rỗng

SIÊU BÁN - SIÊU BÁN
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
7

Các mục chỉ có thể là số âm, để bắt đầu đếm từ bên phải. Ví dụ

SIÊU BÁN - SIÊU BÁN
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
8

Nhưng lưu ý rằng

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
81 thật ra cũng là
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
17, cho nên nó không bắt đầu đếm từ bên phải

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
9

Các mục chỉ cắt lát âm ngoài phạm vi thì bị thu hồi, nhưng đừng thử kiểu này với các mục chỉ một phần từ [không được cắt lát]

SIÊU BÁN - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
0

Cách tốt nhất để ghi nhớ hoạt động của trình cắt lát là nghĩ về các mục chỉ như đang trỏ chuột vào giữa các ký tự, với cạnh trái của ký tự đầu tiên là 0. Sau đó cạnh phải của ký tự cuối cùng của chuỗi ký tự n có chỉ mục n, ví dụ

SIÊU SALE - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
1

Các số hàng đầu cho biết vị trí của các mục chỉ mục

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
83 trong chuỗi; . Một lát từ
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
84 tới
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
59 bao gồm toàn bộ các ký tự giữa các đối số đánh số
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
84 và
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
59 tương ứng
Với các mục không có âm thanh, chiều dài của lát cắt là hiệu của các mục, nếu cả hai đều trong giới hạn. Ví dụ, độ dài của
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
88 là
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
89
Hàm có sẵn
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
90 trả về độ dài của một chuỗi

SIÊU BÁN - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
2

Xem thêm

SIÊU SALE - SIÊU SALE
  • Các kiểu chuỗi, và các chuỗi Unicode được nhắc đến trong mục kế tiếp, là ví dụ của các kiểu chuỗi, và hỗ trợ các nhiệm vụ chung được hỗ trợ bởi các kiểu đó
  • Các chuỗi phương thức Cả chuỗi và chuỗi Unicode Hỗ trợ một số lượng lớn các phương thức Đưa vào chuyển đổi [biến đổi] và tìm kiếm
  • Các nhiệm vụ định dạng chuỗi Các nhiệm vụ định dạng chuỗi được gọi khi các chuỗi và chuỗi Unicode là toán hạng bên trái của toán tử % được bàn đến chi tiết hơn ở đây

3. 1. 3 chuỗi Unicode

Start with Python 2. 0, một kiểu dữ liệu mới để chứa dữ liệu văn bản được cung cấp cho nhà lập trình. đối tượng Unicode. It could be used to contain and change data Unicode [xem http. //www. unicode. org/] và tích hợp tốt với các chuỗi đối tượng đã có, bằng cách chuyển đổi tự động khi cần thiết
Unicode có lợi điểm là cung cấp một số thứ tự [ordinal] cho mọi ký tự trong các bản thảo được sử dụng trong các văn bản xưa và nay. Trước đó, chỉ có 256 số thứ tự cho các ký tự thảo luận. Các văn bản cũ được giới hạn vào một trang mã [trang mã] được sử dụng để ánh xạ các số vào các ký tự thảo luận. Điều này dẫn đến nhiều lộn xộn đặc biệt là trong bối cảnh quốc tế hóa [quốc tế hóa, hay được viết tắt là “

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
91” — “i” + 18 ký tự + “n”] phần mềm. Unicode giải quyết vấn đề này bằng cách định nghĩa một trang mã cho mọi thảo luận
Tạo chuỗi Unicode trong Python dễ dàng như tạo chuỗi thường

SIÊU BÁN - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
3

Ký tự “

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
92” đằng sau dấu nháy cho biết đây là một chuỗi Unicode cần được tạo. Nếu bạn muốn thêm các ký tự đặc biệt trong chuỗi, bạn có thể làm như vậy bằng cách viết thoát khỏi định nghĩa Unicode-Escape của Python. Ví dụ

SIÊU BÁN - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
4

Ý nghĩa của lối thoát

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
93 cho biết chèn một ký tự Unicode với thứ tự
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
94 [ký tự khoảng trắng] vào một vị trí đã định sẵn
Các ký tự khác được thông báo theo thứ tự tương ứng của chúng như thứ tự Unicode. Nếu bạn có các chuỗi trực tiếp trong bảng mã Latin-1 tiêu chuẩn được sử dụng ở nhiều nước phương Tây, bạn sẽ thấy rằng 256 ký tự đầu của bảng mã Unicode giống như 256 ký tự của Latin-1
Cho các chuyên gia, Python cũng hỗ trợ các chuỗi Unicode thô. You must use tiền tố ‘ur’ to ensure Python dùng bảng mã thoát-nghĩa-Unicode-thô [Raw-Unicode-Escape]. Nó sẽ chỉ áp dụng phép chuyển đổi
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
95 bên trên nếu có một số lẻ các dấu hiệu bị ẩn phía trước ký tự ‘u’ nhỏ

SIÊU SALE - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
5

Chế độ thô sẽ có hiệu lực trong trường hợp bạn phải nhập thật nhiều dấu huyền, như khi bạn sử dụng trong các biểu thức chính quy [biểu thức chính quy]
Ngoài các bảng mã chuẩn này, Python cung cấp một tập hợp các cách khác để tạo các chuỗi Unicode từ một bảng mã đã biết
Hàm có sẵn unicode[] cung cấp khả năng truy cập vào tất cả bộ mã/giải mã [codec – COder and DECoder] Unicode đã đăng ký. Một số bảng mã phổ biến mà các bộ mã chuyển đổi này có thể chuyển đổi bao gồm Latin-1, ASCII, UTF-8 và UTF-16. Hai bảng mã sau cùng là các bảng mã có kích thước thay đổi kích thước và chứa mỗi ký tự Unicode trong một hoặc nhiều byte. Mặc định bảng mã thường được thiết lập là ASCII, nó cho phép các ký tự từ 0 đến 127 và cấm các ký tự khác. Khi một chuỗi Unicode được in, viết vào tệp, hoặc chuyển đổi với

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
96, sự chuyển đổi diễn ra với bảng mã mặc định này

SIÊU BÁN - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
6

Để chuyển một chuỗi Unicode thành một chuỗi 8-bit bằng một bảng mã nào đó, các đối tượng Unicode cung cấp một phương thức

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
97 nhận một số, tên của bảng mã. Bạn nên sử dụng tên bảng viết thường

SIÊU BÁN - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
7

Nếu bạn có dữ liệu trong bất kỳ bảng mã nào và muốn tạo ra một chuỗi Unicode tương ứng từ nó, bạn có thể sử dụng hàm

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
98 với bảng tên mã là thông số thứ hai

SIÊU BÁN - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
8

3. 1. 4 Danh sách

Python know a number of data type [compound], used to group of the value as nhau. Kiểu hoạt động tốt nhất là danh sách [danh sách], có thể được viết dưới dạng danh sách các giá trị cách bởi dấu phẩy ở giữa dấu ngoặc kép

SIÊU SALE - SIÊU SALE
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
9

Cũng như các chuỗi mục duy nhất, chỉ mục danh sách bắt đầu từ

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
17, và danh sách có thể bị cắt lát, ghép và vân vân

SIÊU SALE - SIÊU SALE
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
0

Not as string, are the immutable object [bất biến, không thể thay đổi], ta có thể thay đổi các phần tử của một danh sách

SIÊU SALE - SIÊU SALE
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
1

Gán vào các lần cắt lát cũng có thể thực hiện được và nó có thể thay đổi kích thước của danh sách hoặc xóa sách của nó

SIÊU SALE - SIÊU SALE
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
2

Hàm có sẵn

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
90 cũng được áp dụng vào danh sách

SIÊU SALE - SIÊU SALE
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
3

Có thể lồng các danh sách [tạo danh sách chứa các danh sách khác], ví dụ

SIÊU SALE - SIÊU SALE
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
4

Lưu ý trong ví dụ, p[1] và q thật chỉ đến cùng một đối tượng. Chúng ta sẽ nói về ý nghĩa của đối tượng [object semantics] trong các chương trình sau

SIÊU SALE - SIÊU SALE

3. 2 Những bước khởi đầu chương trình

Dĩ nhiên, chúng ta sử dụng Python cho các nhiệm vụ phức tạp khác. Ví dụ ta có thể viết một dãy con ban đầu của dãy Fibonacci như sau

SIÊU SALE - SIÊU SALE
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
5

Ví dụ this giới thiệu một vài tính năng mới

SIÊU SALE - SIÊU SALE
  • Dòng đầu tiên chứa một phép gán đa biến [gán nhiều lần]. các biến
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    01 và
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    02 đồng loạt nhận giá trị mới
     # -*- coding: iso-8859-15 -*-
    
     currency = u"€"
    
     print ord[currency]
    17 và
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    04. Trong dòng cuối nó được sử dụng một lần nữa, để thấy rằng các biểu thức ở phía sau phải được xác định trước khi bất kỳ phép gán nào được thực hiện. Các biểu thức phía phải được định giá từ trái qua phải
  • Vòng lặp trong khi thực thi miễn phí là điều kiện [tại đây.
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    05] vẫn là đúng [true]. Trong Python, như C, mọi giá trị số nguyên khác không là đúng; không là sai [false]. Điều kiện cũng có thể là danh sách, chuỗi, hoặc bất kỳ kiểu dãy nào; . Sử dụng so sánh trong ví dụ là một đơn giản cho phép so sánh. Các toán tử so sánh chuẩn được viết như trong C.
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    06 [nhỏ hơn],
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    07 [lớn hơn],
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    08 [bằng],
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    09 [nhỏ hơn hoặc bằng],
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    10 [lớn hơn hoặc bằng] và
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    11 [không bằng]
  • Round loop Entrance. các thụt vào là cách của Python để nhóm các câu lệnh. Python không [chưa] cung cấp một công cụ soạn thảo dòng nhập thông minh, vì vậy bạn phải nhập vào một tab hoặc khoảng trống cho mỗi dòng nhận vào. Trong thực tế, bạn sẽ chuẩn bị bắt đầu vào Python phức tạp hơn với một trình soạn thảo; . Khi một câu lệnh ghép [câu lệnh ghép] được nhập vào một cách tương tác, nó phải được theo sau bởi một dòng trống để chỉ ra sự kết thúc [vì bộ phân tích không thể khi bạn nhập dòng cuối]. Lưu ý rằng mỗi dòng của một khối phải được nhận vào như nhau
  • Vòng lặp
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    12 [câu lệnh] viết ra giá trị của biểu thức mà nó được cung cấp. Nó khác với việc chỉ viết các biểu thức bạn muốn viết [như chúng ta đã làm trong các ví dụ máy tính trước] trong việc xử lý nhiều biểu thức và chuỗi. Các chuỗi được in ra không có dấu nháy, và một khoảng trắng được chèn vào giữa các phần tử, để bạn có thể định dạng chúng đẹp hơn, ví dụ:
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
6

Dấu phẩy sau cùng để tránh dòng mới sau khi xuất

SIÊU BÁN - SIÊU SALE
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
7

Lưu ý rằng trình dịch thông báo chèn một dòng mới trước khi nó vào dấu nhắc kế nếu dòng trước chưa hoàn thành

SIÊU SALE - SIÊU SALE

4. Bàn thêm về điều khiển luồng

Ngoài câu lệnh while vừa giới thiệu, Python có các câu lệnh điều khiển luồng từ các ngôn ngữ khác, với một chút sửa đổi

SIÊU SALE - SIÊU SALE

4. 1 Câu lệnh điều kiện nếu trong ngôn ngữ lập trình Python

Có thể loại câu lệnh được biết đến nhiều nhất là câu lệnh

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
13. Ví dụ

SIÊU BÁN - SIÊU BÁN
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
8

There could not have or have many section

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
14, and section
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
15 is not started. Từ khóa `
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
14‘ là cách viết tắt của `
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
17‘, và dùng để tránh nhận vào quá nhiều. Sequence
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
18 used instead for switch command or case found in other language

SIÊU SALE - SIÊU SALE

4. 2 Câu lệnh vòng lặp for trong lập trình Python

Vòng lặp

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
19 trong Python hơi khác với C hoặc Pascal. Thay vì lặp qua một dãy số [như trong Pascal], hoặc cho phép người dùng tự định nghĩa bước lặp và điều kiện dừng [như C], câu lệnh
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
19 của Python lặp qua các phần tử của một dãy bất kỳ [một danh sách . Ví dụ

SIÊU SALE - SIÊU SALE
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
9

Rất nguy hiểm nếu bạn sửa đổi dãy trong khi bạn đang lặp lại nó. Nếu bạn cần sửa đổi một danh sách khi đang lặp lại [ví dụ như để nhân đôi các phần tử nào đó], bạn sẽ cần phải lặp lại một bản sao của nó. Cách viết cắt miếng làm đơn giản cho công việc này

SIÊU SALE - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
0

4. 3 Hàm
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
21 trong trình Python

Nếu bạn cần lặp lại một dãy số, hàm có sẵn

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
21 trở nên tiện dụng. Nó tạo ra danh sách chứa các dãy số học

SIÊU BÁN - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
1

Điểm dừng chỉ được định nghĩa là không bao giờ là một phần của danh sách được tạo ra; . Bạn cũng có thể tạo dãy bắt đầu từ một số khác, hoặc chỉ xác định mức tiến độ khác [ngay cả bước tiến; đôi khi nó còn được gọi là `bước’, `bước’]

SIÊU SALE - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
2

To loop through the only mục of a Dãy núi, mũi tên

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
21 and l
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
25 as after

SIÊU SALE - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
3

4. 4 Câu lệnh
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
26 và
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
27, mệnh đề
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
15 cho vòng lặp

Câu lệnh

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
26, như trong C, nhảy ra khỏi phạm vi vòng lặp
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
19 hay
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
31 nhỏ nhất chứa nó

SIÊU SALE - SIÊU SALE

Câu lệnh

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
27, cũng được mượn từ C, tiếp tục lần lặp của vòng lặp

SIÊU SALE - SIÊU SALE

Các câu lệnh phù hợp có thể có tầm nhìn

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
15; . Ví dụ như vòng lặp sau khi tìm các nguyên tố số

SIÊU SALE - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
4

4. 5 Câu lệnh
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
34

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
34 không làm gì cả. Nó có thể được sử dụng khi cú pháp cần một câu lệnh nhưng chương trình không cần tác vụ nào. Ví dụ

SIÊU SALE - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
5

4. 6 Định nghĩa hàm trong chương trình Python

Chúng ta có thể tạo một hàm trong dãy Fibonacci

SIÊU BÁN - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
6

Từ khóa

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
36 khai báo một định nghĩa hàm. Nó phải được theo sau bởi tên hàm, và một danh sách các thông số chính quy trong ngoặc đơn. Câu lệnh tạo nên thân hàm bắt đầu từ dòng kế tiếp, và bắt buộc phải được nhận vào. Câu lệnh đầu tiên của hàm thân có thể là một chuỗi;

SIÊU SALE - SIÊU SALE

Có những công cụ sử dụng chuỗi tài liệu để tự động sinh tài liệu trực tuyến hoặc để truy cập, hoặc cho phép người dùng duyệt mã một cách tương tác;

SIÊU SALE - SIÊU SALE

Việc thực thi một hàm tạo ra một bảng ký hiệu mới sử dụng cho các biến cục bộ của hàm. Chính xác hơn, mọi phép gán biến trong một hàm chứa giá trị vào bảng ký hiệu cục bộ; . Do đó, các biến toàn cục không thể được gán giá trị trực tiếp trong một hàm [ngoại trừ khi được đặt trong câu lệnh toàn cục], mặc dù chúng có thể tham chiếu tới

SIÊU SALE - SIÊU SALE

Thông số thực tế của một lệnh gọi hàm được tạo ra trong bảng biểu tượng bộ địa phương của hàm được gọi khi nó được gọi; . Khi một hàm gọi một hàm khác, một bảng biểu hiệu cục bộ được tạo ra để gọi lệnh đó

SIÊU SALE - SIÊU SALE

Một định nghĩa hàm tạo tên hàm trong bảng ký hiệu hiện tại. Giá trị của tên hàm có một kiểu được nhận ra bởi trình thông dịch là hàm do người dùng định nghĩa. Giá trị này có thể được gán cho một tên khác và sau đó có thể được sử dụng như một hàm. This is a way to change the total name

SIÊU BÁN - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
7

Bạn có thể nói rằng fib không phải là một hàm [chức năng] mà là một thủ tục [thủ tục]. Trong Python, cũng như C, thủ tục giả như hàm không có giá trị trả về. Thật sự, nói rõ hơn một chút, thủ tục cũng trả về giá trị mặc dù là giá trị vô nghĩa. Giá trị này được gọi là Không có [nó là một tên có sẵn]. Trong ra giá trị Không thường xuyên bị bỏ qua thông báo hủy bỏ nếu nó là giá trị duy nhất được trong ra. You can see it if you want

SIÊU BÁN - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
8

Bạn cũng có thể dễ dàng viết một hàm trả về một danh sách các số của dãy Fibonacci thay vì nó ra

SIÊU SALE - SIÊU SALE
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
9

Ví dụ này cho thấy một vài tính năng mới của ngôn ngữ lập trình Python

SIÊU SALE - SIÊU SALE
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    37 return with a value from a function.
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    37 không có thông số biểu thức đi kèm trả về
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    39. Rớt ra khỏi một thủ tục cũng trả về
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    39 của hàm
  • Câu lệnh
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    41 gọi một phương thức của danh sách đối tượng.
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    42. Một phương thức là một hàm `thuộc về’ một đối tượng và có tên
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    43, với
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    44 là một đối tượng nào đó [có thể là một biểu thức], và
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    45 là tên của một phương thức được định nghĩa bởi kiểu của đối tượng. Các loại khác nhau định nghĩa các phương thức khác nhau. Phương thức của các kiểu khác nhau có thể có cùng tên mà không dẫn đến sự khó hiểu. [Bạn có thể định nghĩa kiểu đối tượng và phương thức cho riêng bạn, sử dụng lớp, như sẽ được bàn đến ở các chương trình sau. ] Phương thức
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    46 được sử dụng trong ví dụ này được định nghĩa cho các đối tượng trong danh sách; . Trong ví dụ này, nó tương đương với “
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    47“, nhưng hiệu quả hơn

4. 7 Bàn thêm về định nghĩa hàm

Bạn cũng có thể định nghĩa các chức năng với số lượng thông số thay đổi. Có ba định dạng, và chúng có thể được sử dụng chung với nhau

SIÊU SALE - SIÊU SALE

4. 7. 1 Default value value

Hữu dụng nhất là để chỉ định một giá trị mặc định cho một hoặc nhiều thông số. Điều này đã tạo ra một chức năng có thể được gọi với ít thông số hơn là nó được định nghĩa để nhận. Ví dụ

SIÊU BÁN - SIÊU BÁN
>>> width = 20
>>> height = 5*9
>>> width * height
900
0

Hàm này có thể được gọi như sau.

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
48 or as after.
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
49 of function

SIÊU SALE - SIÊU SALE

Ví dụ this giới thiệu từ khóa

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
50. Nó kiểm tra xem một dãy có chứa một giá trị nào không

SIÊU SALE - SIÊU SALE

Các giá trị mặc định được định giá tại nơi hàm được định nghĩa trong phạm vi định nghĩa [defining scope], do đó

SIÊU BÁN - SIÊU BÁN
>>> width = 20
>>> height = 5*9
>>> width * height
900
1

will in 5 of function
Warning quan trọng. Giá trị mặc định chỉ được định giá một lần. Điểm này quan trọng khi mặc định là một giá trị khả biến như danh sách, từ điển hoặc các đối tượng của hầu hết mọi lớp. Ví dụ, sau hàm sau các thông số truyền vào nó từ các lời gọi sau đó

SIÊU BÁN - SIÊU BÁN
>>> width = 20
>>> height = 5*9
>>> width * height
900
2

Nếu bạn không muốn mặc định được sử dụng chung trong các lời gọi sau, bạn có thể viết một hàm như thế này

SIÊU BÁN - SIÊU BÁN
>>> width = 20
>>> height = 5*9
>>> width * height
900
3

4. 7. 2 Thông số từ khóa

Các hàm cũng có thể được gọi theo thông số từ khóa [đối số từ khóa] theo dạng “

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
51“. Ví dụ, after

SIÊU BÁN - SIÊU BÁN
>>> width = 20
>>> height = 5*9
>>> width * height
900
4

could be call by any way any

SIÊU BÁN - SIÊU BÁN
>>> width = 20
>>> height = 5*9
>>> width * height
900
5

nhưng những lời gọi sau đều không hợp lệ

SIÊU BÁN - SIÊU BÁN
>>> width = 20
>>> height = 5*9
>>> width * height
900
6

Nói chung, một danh sách các thông số phải có bất kỳ vị trí thông số nào [đối số vị trí] theo sau bởi bất kỳ thông số từ khóa nào, các từ khóa phải được chọn từ tên thông số chính quy. Các thông số chính quy không nhất thiết phải có giá trị mặc định. Không có thông số nào có thể nhận được một giá trị nhiều hơn một lần — tên thông số chính quy tương ứng với thông số vị trí không thể được sử dụng làm từ khóa trong cùng một lời gọi. Sau đây là một ví dụ sai vì giới hạn này

SIÊU BÁN - SIÊU BÁN
>>> width = 20
>>> height = 5*9
>>> width * height
900
7

Khi thông số chính quy cuối có dạng

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
52, nó nhận một từ điển [dictionary] bao gồm tất cả các thông số từ khóa loại trừ các từ khóa tương ứng với thông số chính quy. Điểm này có thể được dùng chung với một thông số chính quy ở dạng
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
53 [bàn đến trong mục con sau] và nhận một bộ [tuple] chứa các thông số vị trí sau danh sách thông số chính quy. [
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
53 bắt buộc phải xuất hiện trước
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
52. ] Ví dụ, nếu ta định nghĩa một hàm như sau

SIÊU BÁN - SIÊU BÁN
>>> width = 20
>>> height = 5*9
>>> width * height
900
8

It is could be call as so

SIÊU BÁN - SIÊU SALE
>>> width = 20
>>> height = 5*9
>>> width * height
900
9

và dĩ nhiên nó sẽ in ra

SIÊU SALE - SIÊU SALE
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
0

Lưu ý rằng phương thức

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
56 của danh sách các tên thông số từ khóa được gọi trước khi in nội dung của từ điển
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
57; nếu điều này không được thực hiện, thứ tự các thông số được in ra không xác định

SIÊU SALE - SIÊU SALE

4. 7. 3 Danh sách thông số bất kỳ

Cuối cùng, một lựa chọn ít sử dụng nhất để chỉ ra rằng một hàm có thể được gọi với bất kỳ số nào thông số. Các thông số này sẽ được gói và trong một bộ. Trước các thông số không xác định, không hoặc nhiều hơn các thông số chính quy có thể có mặt

SIÊU BÁN - SIÊU BÁN
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
1

4. 7. 4 Tháo danh sách thông số

Trường hợp ngược lại xảy ra khi các thông số đã nằm trong một danh sách hoặc một bộ nhưng cần được loại bỏ để lời gọi hàm cần các thông số vị trí riêng. Ví dụ, hàm có sẵn

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
21 cần nhận các thông số riêng
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
59 và
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
60. Nếu chúng không được cung cấp riêng lẻ, hãy viết lệnh gọi hàm với toán tử * để loại bỏ các thông số này ra khỏi danh sách hoặc bộ

SIÊU BÁN - SIÊU BÁN
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
2

Theo cùng một kiểu, từ điển có thể cung cấp các từ khóa thông số với toán tử

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
61

SIÊU BÁN - SIÊU SALE
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
3

4. 7. 5 Hàm ẩn dạng lambda

Theo yêu cầu chung, một vài tính năng thường thấy trong ngôn ngữ lập trình hàm như Lisp đã được thêm vào Python. Với từ khóa lambda, hàm vô danh [hàm ẩn danh] có thể được tạo ra. Đây là một hàm trả về tổng của hai thông số. “______42_______62“. Dầm

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
63 có thể được sử dụng ở bất kỳ nơi nào cần đối tượng hàm. Cú pháp của chúng được giới hạn ở một biểu thức duy nhất. Về ý nghĩa, chúng chỉ là một cách viết gọn của một hàm định nghĩa bình thường. Giống như các định nghĩa hàm lồng nhau, định dạng lambda có thể tham chiếu các biến từ phạm vi chứa nó

SIÊU SALE - SIÊU SALE
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
4

4. 7. 6 Chuỗi tài liệu

Có những quy định về cấu hình thành nội dung và định dạng của các chuỗi tài liệu

SIÊU SALE - SIÊU SALE

Dòng đầu tiên cần phải luôn luôn là một bản tóm tắt, xúc tích về mục đích của đối tượng. Để dễ hiểu, nó không nên chỉ ra cụ thể tên hoặc kiểu của đối tượng vì chúng có thể có ở dạng thức khác [từ khi tên là một động từ diễn giải hoạt động của hàm]. Dòng này cần bắt đầu bằng một chữ hoa và kết thúc bằng một dấu chấm

SIÊU SALE - SIÊU SALE

Nếu có nhiều dòng trong chuỗi tài liệu, thì dòng thứ hai phải là một dòng trống, rõ ràng phân biệt bản tóm tắt và phần còn lại. Các dòng sau nên là một hoặc nhiều đoạn hướng dẫn về cách gọi, các hiệu ứng phụ, v.v. v…

SIÊU SALE - SIÊU SALE

Bộ phân tích ngôn ngữ Python không lọc hàng từ các chuỗi đa dòng [chuỗi nhiều dòng theo nghĩa đen] trong Python, vì vậy các công cụ lý tài liệu cần phải lọc hàng xử lý nếu cần. Việc làm này được thực hiện theo một cách chung. Dòng không trống đầu tiên sau dòng đầu tiên của chuỗi xác định mức thụt vào cho toàn bộ chuỗi tài liệu. [Ta không thể dùng dòng đầu tiên vì nó thường nằm kế dấu nháy đầu chuỗi cho nên mức thụt vào của nó không được xác định trong cách viết chuỗi. ] Khoảng trắng “tương đương” với mức truy nhập này được bò từ mỗi dòng đầu trong chuỗi. Không nên có các dòng nhận vào ít hơn, nhưng nếu gặp phải, toàn bộ khoảng trống đầu của chúng nên được bỏ qua. Tính tương đương của khoảng trắng cần được kiểm tra sau khi mở rộng tab [thông thường thành 8 khoảng trắng]

SIÊU SALE - SIÊU SALE

Đâu là ví dụ của một chuỗi tài liệu đa dòng

SIÊU BÁN - SIÊU BÁN
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
5

5. Constructor data in the Python language setting

Chương này diễn giải kỹ năng hơn một vài điều bạn đã học được, và cũng nói thêm về một số điều mới

SIÊU SALE - SIÊU SALE

5. 1 Bàn bổ sung về danh sách

Kiểu dữ liệu danh sách [kiểu

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
64] có một số phương thức khác. Đây là toàn bộ các phương thức của danh sách đối tượng

SIÊU SALE - SIÊU SALE
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    65 Thêm một phần tử vào cuối danh sách;
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    67Nới rộng danh sách bằng cách chèn vào tất cả các phần tử của danh sách chỉ định;
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    69 Chèn một phần tử vào vị trí chỉ định. Đầu thông số là chỉ mục của phần tử sẽ được đẩy lùi, cho nên
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    70 đưa vào đầu danh sách, và
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    71 tương đương với
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    72
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    73Bỏ ra khỏi danh sách phần tử đầu tiên có giá trị là
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    74. Sẽ có lỗi nếu không có phần tử như vậy
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    75 Bỏ qua danh sách phần tử ở vị trí chỉ định, và trả về chính nó. Nếu không chỉ xác định vị trí,
    import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    76 bỏ qua và trả lại phần tử cuối cùng trong danh sách. [Ngoặc khung xung quanh
     # -*- coding: iso-8859-15 -*-
    
     currency = u"€"
    
     print ord[currency]
    84 trong khai báo hàm cho biết thông số đó là không bắt buộc, không có nghĩa là bạn cần nhập dấu ngoặc vuông ở vị trí đó. Bạn sẽ thấy cách viết này thường xuyên trong Tham khảo thư viện Python. ]
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    78Trả về chỉ mục của phần tử trong danh sách mà giá trị là x. Sẽ có lỗi nếu không có phần tử như vậy
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    79 Trả về số lần xuất hiện trong danh sách
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    56 Sắp xếp các phần tử trong danh sách, ngay tại chỗ
  • import os
    filename = os.environ.get['PYTHONSTARTUP']
    if filename and os.path.isfile[filename]:
        execfile[filename]
    81Đảo ngược thứ tự các phần tử trong danh sách, ngay tại chỗ

Một ví dụ có sử dụng hầu hết các phương thức của danh sách

SIÊU SALE - SIÊU SALE
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
6

5. 1. 1 Use list as ngăn xếp

Các phương thức của danh sách làm cho nó rất dễ sử dụng như ngăn xếp [ngăn xếp], là nơi mà phần tử cuối được thêm vào là phần tử đầu được lấy ra [“vào sau, ra trước” hay “vào cuối . Để thêm phần tử vào đỉnh của ngăn xếp, dùng

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
46. To get an element from the top of Stacking, used
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
83 which not only target item. Ví dụ

SIÊU BÁN - SIÊU BÁN
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
7

5. 1. 2 Use queues as queues

Bạn có thể thuận tiện sử dụng danh sách như một hàng đợi [hàng đợi], nơi mà phần tử được thêm vào đầu tiên là phần tử cũng được lấy ra đầu tiên [“vào trước, ra trước” hay “vào trước, vào trước- . To add a Element section into the end of the queue, used

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
46. To get a element from the first row, used
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
83 with
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
17 is only item. Ví dụ

SIÊU BÁN - SIÊU BÁN
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
8

5. 1. 3 Công cụ lập trình hướng hàm

Có sẵn ba chức năng rất hữu ích khi sử dụng với danh sách.

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
87,
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
88, và
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
89

SIÊU SALE - SIÊU SALE

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
90 trả về một dãy chứa các phần tử từ dãy mà hàm[mục] có giá trị đúng. Nếu sequence là một string hoặc tuple, thì kết quả trả về sẽ có cùng kiểu; ngược lại, sẽ luôn luôn là một list. Ví dụ, để tìm một số nguyên tố

SIÊU BÁN - SIÊU SALE
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
9

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
91 gọi function[item] với mỗi phần tử trong dãy và trả về một danh sách các giá trị trả về. Ví dụ, để tính toán một số phương pháp cài đặt

SIÊU BÁN - SIÊU BÁN
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
0

Có thể truyền vào nhiều dãy; . Ví dụ

SIÊU BÁN - SIÊU BÁN
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
1

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
93 khoản trả về giá trị duy nhất được tạo ra từ công việc gọi hàm nhị phân với tham số là hai phần tử đầu của dãy, rồi sau đó với giá trị trả về này với phần tử kế, và cứ thế. Ví dụ, để tính tổng các số từ 1 đến 10

SIÊU BÁN - SIÊU BÁN
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
2

Nếu chỉ có một phần tử trong dãy, giá trị của nó sẽ được trả lại;

SIÊU SALE - SIÊU SALE

You can transfer more than number to know the ban đầu value. Trong trường hợp đó, giá trị này sẽ được trả về nếu dãy trống, và hàm sẽ được áp dụng cho giá trị ban đầu, và giá trị của phần tử đầu của dãy, sau đó giá trị được trả về với giá trị của phần . Ví dụ,

SIÊU SALE - SIÊU SALE
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
3

Đừng dùng định nghĩa của ví dụ này về

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
94. because the plus of con number is an nhu cầu chung, một hàm có sẵn
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
95 đã được cung cấp, và hoặc động y như vậy. Word version 2. 3

SIÊU SALE - SIÊU SALE

5. 1. 4 Gop list

Việc sử dụng danh sách phụ [hiểu danh sách] cung cấp một cách xúc tích để tạo danh sách mà không cần sử dụng tới

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
88,
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
87 hoặc
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
63. Kết quả là công bố danh sách kiểu này thường dễ hiểu hơn những danh sách được tạo ra từ những cách khác. Mỗi danh sách liệt kê bao gồm một biểu thức, theo sau tầm nhìn
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
19, rồi không có hoặc có tầm nhìn
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
19 hoặc
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
13. Kết quả sẽ là một danh sách được trả về từ việc định giá biểu thức trong ngữ cảnh của các cảnh sát
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
19 và
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
13 theo sau nó. Nếu biểu thức trả về một tuple, nó phải được đặt trong trích dẫn

SIÊU BÁN - SIÊU BÁN
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
4

Cách mùa màng danh sách chuyển đổi nhanh hơn nhiều so với

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
88 và có thể được áp dụng cho các biểu thức phức tạp và các hàm lồng nhau

SIÊU SALE - SIÊU SALE
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
5

5. 2 Câu lệnh xóa

Có một cách để loại bỏ một phần tử khỏi danh sách dựa trên chỉ mục của nó, thay vì giá trị. câu lệnh

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
05. Cách này khác với phương thức
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
83 trả về một giá trị. Lệnh
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
05 cũng có thể được sử dụng để loại bỏ các miếng cắt [lát] khỏi danh sách hoặc xóa toàn bộ danh sách [với điều kiện chúng ta đã làm trước đó bằng cách gán một danh sách trống vào miếng cắt]. Ví dụ

SIÊU SALE - SIÊU SALE
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
6

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
05 cũng có thể được sử dụng để xóa hoàn toàn các biến

SIÊU SALE - SIÊU SALE
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
7

Việc tham chiếu tới tên

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
01 sau đó sẽ tạo ra lỗi [ít nhất là khi một giá trị khác được gán cho nó]. Chúng ta sẽ thấy các cách sử dụng khác với
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
05 sau điều này

SIÊU SALE - SIÊU SALE

5. 3 Set and Sequences

Chúng ta đã thấy rằng danh sách và chuỗi có nhiều thuộc tính chung, giống như chỉ có một mục, và các toán tử cắt miếng. Chúng là hai ví dụ của kiểu dữ liệu dãy [sequence]. Vì Python là một ngôn ngữ đang phát triển, nên các dãy dữ liệu kiểu khác có thể được thêm vào. Có một kiểu dãy khác. bộ

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11

SIÊU SALE - SIÊU SALE

A

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 bao gồm một số giá trị phân cách do dấu phẩy, ví dụ

SIÊU BÁN - SIÊU BÁN
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
8

Khi xuất ra,

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 luôn được đính kèm giữa hai dấu trích dẫn để các
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 lồng nhau có thể được thông dịch chính xác;
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 used many. Ví dụ. cặp tốc độ [x, y], bản ghi nhân viên từ cơ sở dữ liệu, v. v… Giống như chuỗi,
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 không thể thay đổi. không thể gán giá trị mới cho từng phần tử của
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 [mặc dù bạn có thể đạt được kết quả tương tự với việc cắt miếng và ghép dãy]. Cũng có thể tạo
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 chứa các đối tượng khả biến ví dụ như danh sách

SIÊU SALE - SIÊU SALE

Các vấn đề đặc biệt là trong việc tạo nên

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 bao gồm 0 hoặc một phần tử. cú pháp ngôn ngữ có một số điểm riêng để thực hiện công việc này.
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 trống được tạo nên bởi một cặp trống; . Con trỏ, nhưng hiệu quả. Ví dụ

SIÊU BÁN - SIÊU BÁN
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
9

Câu lệnh

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
24 là một ví dụ về việc đóng gói công việc
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11[tuple packing]. các giá trị
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
26,
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
27 và
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
28 được gói lại trong một
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11. And too reverse process

SIÊU BÁN - SIÊU BÁN
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
0

Và nó được gọi là loại bỏ dãy. Delay dãy yêu cầu danh sách các biến bên trái có cùng số phần tử như mức độ lớn của dãy. Chú ý rằng cho phép đa phân công [multiple assignment] thật ra chỉ là sự tổng hợp của gói công việc

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 và phân vùng

SIÊU SALE - SIÊU SALE

There are a not counter at here. Việc gói nhiều giá trị luôn luôn tạo ra một

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11, nhưng phép trừ ra có thể được áp dụng cho mọi dãy [chuỗi, danh sách,
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11]

SIÊU SALE - SIÊU SALE

5. 4 Tập Hợp

Python also have a data type for compile [

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
33]. Một tập hợp là một nhóm các phần tử không đúng. Ứng dụng cơ bản bao gồm việc kiểm tra hội viên và loại bỏ các phần tử trùng lặp. Các đối tượng tập hợp cũng hỗ trợ các toán tử như hợp, giao, hiệu và hiệu đối xứng

SIÊU SALE - SIÊU SALE

This is a ví dụ rút gọn

SIÊU BÁN - SIÊU SALE
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
1

5. 5 Từ điển

Một kiểu dữ liệu hữu dụng khác được đưa vào Python là từ điển [dictionary]. Từ điển được tìm thấy trong các ngôn ngữ khác như “bộ nhớ kết hợp [bộ nhớ kết hợp]” hoặc “mảng kết hợp [mảng kết hợp]”. Không như dãy được chia chỉ mục từ một khoảng số, từ điển được chia chỉ mục từ các khóa, có thể là bất kỳ kiểu không đổi nào; chuỗi và số luôn luôn có thể làm khóa.

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11 có thể được sử dụng làm từ khóa nếu nó chỉ bao gồm chuỗi, số hoặc
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11; . Bạn không thể sử dụng danh sách làm từ khóa, vì danh sách có thể được thay đổi ngay tại chỗ với việc cho phép gán vào một mục duy nhất, cho phép gán miếng cắt, hoặc các phương thức khác nhau như
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
46 và
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
38

SIÊU SALE - SIÊU SALE

Tốt nhất được cho là về từ điển như một tập hợp không thứ tự của các bộ khóa. value, with condition is the key must be duy nhất [trong cùng một từ điển]. Một cặp tách rời để tạo một từ điển trống.

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
39. Đặt một loạt các cụm từ
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
40 phân biệt bởi dấu phẩy vào trong trích dẫn nên các cặp
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
41 ban đầu cho từ điển;

SIÊU SALE - SIÊU SALE

Công việc chính của từ điển bao gồm một giá trị cho một từ khóa bất kỳ và lấy lại giá trị từ khóa đó. Cũng có thể xóa một cặp

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
40 với
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
05. Nếu bạn đưa vào một khóa đã có sẵn, giá trị cũ sẽ bị mất. Lấy giá trị từ một từ khóa không tồn tại sẽ gây ra lỗi

SIÊU SALE - SIÊU SALE

Phương thức

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
44 của đối tượng từ điển trả về một danh sách các từ khóa đã được sử dụng trong từ điển, theo một thứ tự bất kỳ [nếu bạn muốn chúng được sắp xếp, chỉ cần áp dụng phương thức
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
56 vào danh sách các từ khóa]. Để kiểm tra xem một từ khóa có trong từ điển hay không, có thể sử dụng phương thức
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
46 hoặc từ khóa
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
50

SIÊU SALE - SIÊU SALE

Đây là một ví dụ nhỏ về cách sử dụng từ điển

SIÊU BÁN - SIÊU BÁN
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
2

Phương thức

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
từ điển 48 được sử dụng để tạo từ trực tiếp từ danh sách các cụm từ khóa-giá trị chứa trong
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11. Khi các cụm từ có một mẫu nào đó, việc mở rộng danh sách chỉ có thể rút ngắn danh sách từ khóa-giá trị

SIÊU BÁN - SIÊU BÁN
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
3

Ở phần sau của bài chỉ dẫn, chúng ta sẽ tìm hiểu về các biểu thức tạo bộ thích hợp hơn với việc cung cấp các cặp khóa-giá trị vào khởi động hàm

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
48
Khi mà từ khóa là những chuỗi đơn giản, đôi khi nó sẽ dễ dàng hơn nếu chỉ định nghĩa các cụm bằng hệ thống số từ khóa

SIÊU BÁN - SIÊU BÁN
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
4

5. 6 Kỹ thuật lặp

Khi bật qua từ điển, key và giá trị tương ứng có thể được lấy ra cùng lúc bằng phương thức

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
51

SIÊU BÁN - SIÊU BÁN
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
5

Khi lặp lại một dãy, vị trí chỉ mục và giá trị tương ứng có thể được lấy ra cùng lúc bằng hàm

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
52

SIÊU BÁN - SIÊU BÁN
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
6

Để lặp qua hai hoặc nhiều dãy cùng lúc, các phần tử có thể được ghép với nhau bằng hàm

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
53

SIÊU BÁN - SIÊU SALE
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
7

Để lặp lại một dãy theo thứ tự đảo ngược, đầu tiên chỉ định dãy đó theo thứ tự xuôi, rồi gọi hàm

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
54

SIÊU BÁN - SIÊU BÁN
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
8

Để lặp lại một dãy theo thứ tự đã sắp xếp, sử dụng hàm

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
55 và nó sẽ trả về một danh sách đã sắp xếp trong khi vẫn để danh sách gốc hiện trạng

SIÊU BÁN - SIÊU BÁN
>>> 1j * 1J
[-1+0j]
>>> 1j * complex[0,1]
[-1+0j]
>>> 3+1j*3
[3+3j]
>>> [3+1j]*3
[9+3j]
>>> [1+2j]/[1+1j]
[1.5+0.5j]
9

5. 7 Bàn thêm về điều kiện

Điều kiện sử dụng trong các câu lệnh

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
31 và
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
13 có thể chứa bất kỳ phép toán nào, không chỉ được phép so sánh

SIÊU SALE - SIÊU SALE

Các toán tử so sánh

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
50 và
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
59 kiểm tra xem giá trị có mặt [hoặc không có mặt] trong một dãy. Toán tử
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
60 và
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
61 so sánh xem hai đối tượng phải giống nhau là một đối tượng hay không; . Mọi toán tử so sánh đều có cùng mức ưu tiên, thấp hơn của các toán tử

SIÊU SALE - SIÊU SALE

So sánh có thể được kết nối với nhau. Ví dụ như,

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
62 kiểm tra xem
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
01 nhỏ hơn
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
02 và hơn nữa
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
02 bằng với
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
66

SIÊU SALE - SIÊU SALE

Phép so sánh có thể được ghép với nhau bằng toán tử Boolean

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
67 và
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
68, và kết quả của phép so sánh [hoặc của mọi biểu thức Boolean] có thể đảo ngược với
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
69. Các toán tử này có mức độ ưu tiên thấp hơn so với các toán tử so sánh; . Như mọi khi, dấu ngoặc đơn có thể được sử dụng để biết kết cấu đúng của ý

SIÊU SALE - SIÊU SALE

Toán tử Boolean and and or also known as đoản mạch [ngắn mạch] toán tử. Hạng mục toán học của họ được đánh giá từ bên trái qua phải, và việc đánh giá dừng lại ngay khi kết quả được xác định. Ví dụ, nếu A và C là đúng nhưng B là sai, A và B và C không được định giá biểu thức C. Khi được sử dụng như một giá trị chung và không phải là một Boolean, giá trị trả về của một toán tử đo lường mạch là thông số được định giá cuối cùng

SIÊU SALE - SIÊU SALE

Có thể gán kết quả của một phép so sánh hoặc một biểu thức Boolean vào một biến. Ví dụ,

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
00

Chú ý rằng trong Python, khác với C, phép gán không thể có mặt trong biểu thức. Các thành viên lập trình C sẽ không hài lòng với công việc này, nhưng nó tránh một nhóm lớn các lỗi thường gặp trong chương trình C. nhập vào

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
58 trong một biểu thức khi mà
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
08 được tiếp cận

SIÊU SALE - SIÊU SALE

5. 8 So sánh dãy và các kiểu khác

Các đối tượng dãy có thể được so sánh với các đối tượng khác cùng kiểu dãy. So sánh sử dụng từ điển thứ tự. đầu tiên hai phần tử được so sánh, và nếu chúng khác nhau thì kết quả được xác định; . Nếu hai phần tử được so sánh lại là hai phần dãy cùng kiểu, phép so sánh từ điển lại được thực hiện đệ quy như vậy. Nếu mọi phần tử trong hai dãy đều bằng nhau thì chúng được coi là bằng nhau. Nếu một dãy là dãy con ban đầu của dãy kia, thì dãy ngắn hơn sẽ là dãy bé hơn. Thứ tự từ điển đối với chuỗi sử dụng thứ tự ASCII cho từng ký tự. Một vài ví dụ về việc so sánh các dãy cùng kiểu

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
01

Lưu ý rằng so sánh các đối tượng khác kiểu cũng không được chấp nhận. Kết quả có thể đoán được nhưng ngoài ý muốn. các loại được xếp hạng theo thứ tự tên của chúng. Do đó, một danh sách [

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
64] luôn nhỏ hơn một chuỗi [
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
77], và một chuỗi luôn nhỏ hơn một
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11, v. v…. Các loại số lộn xộn được so sánh theo giá trị của chúng, do đó
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
17 bằng
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
80, v. v…

SIÊU SALE - SIÊU SALE

6. mô-đun

Nếu bạn thoát khỏi trình dịch thông tin và chạy lại nó, những gì bạn định nghĩa [hàm và biến] đều bị mất. Do đó, nếu bạn muốn viết một chương trình dài hơn, thì tốt nhất là bạn nên sử dụng một trình soạn thảo để chuẩn bị bắt đầu cho trình thông dịch và chạy nó với tệp này. Việc này được gọi là viết kịch bản [script]. Khi chương trình của bạn trở nên dài hơn, bạn sẽ muốn tách nó ra thành nhiều tập tin để dễ dàng duy trì. Bạn sẽ muốn sử dụng một hàm thuận tiện mà bạn đã viết trong nhiều chương trình mà không cần phải sao chép lại định nghĩa của nó vào các chương trình đó

SIÊU SALE - SIÊU SALE

Để hỗ trợ công việc này, Python có một cách đặt định nghĩa cho một tập tin và sử dụng chúng trong một kịch bản hoặc trong một phiên làm việc với trình thông dịch. Tập tin này được gọi là mô-đun [mô-đun];

SIÊU SALE - SIÊU SALE

Mô-đun là một tập tin chứa các định nghĩa và câu lệnh Python. File name is ten of module with tail

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
81 được gắn vào. Trong một mô-đun, tên của mô-đun [là một chuỗi] có thể được truy cập thông qua một biến toàn cục
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
82. Ví dụ, sử dụng trình soạn thảo của bạn để tạo một tập tin đặt tên là
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
83 trong thư mục hiện tại với nội dung sau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
02

Bây giờ hãy chạy trình thông dịch Python và nhập mô-đun này với dòng lệnh sau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
03

Việc làm này sẽ không nhập trực tiếp các tên hàm định nghĩa trong

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
84 vào bảng ký hiệu [
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
85]; . Sử dụng tên mô-đun bạn có thể truy cập các chức năng

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
04

Nếu bạn định sử dụng một hàm xuyên suốt, thì bạn có thể gán nó vào một bộ tên cục bộ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
05

6. 1 Bàn bổ sung về mô-đun

Mô-đun có thể chứa các câu lệnh khả thi cũng như các định nghĩa hàm. Các câu lệnh này nhằm mục đích khởi tạo mô-đun. Chúng sẽ chỉ được chạy lần đầu mô-đun được nhập ở đâu đó

SIÊU SALE - SIÊU SALE

Mỗi mô-đun có một bảng ký hiệu riêng của nó và được sử dụng dưới dạng bảng toàn cục đối với mọi hàm được định nghĩa trong mô-đun. Do đó, tác giả của một mô-đun có thể sử dụng các biến cục bộ trong mô-đun mà không phải lo lắng về việc trùng lặp với các biến cục bộ của người dùng. Mặt khác, nếu bạn biết mình đang làm gì, bạn có thể truy cập vào các biến toàn cục của mô-đun với cùng một cách sử dụng để truy cập các chức năng của nó

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
87

SIÊU SALE - SIÊU SALE

Mô-đun có thể nhập các mô-đun khác. Thông thường [nhưng không bắt buộc] ta hay để tất cả các lệnh nhập vào đầu một mô-đun [hoặc kịch bản]. Tên của mô-đun đã nhập được đặt trong bảng ký hiệu toàn cục của mô-đun nhập vào nó
Có một biến thể của câu lệnh

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
88 để nhập nhiều tên trực tiếp từ một mô-đun vào trong bảng ký hiệu của mô-đun nhập. Ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
06

Câu lệnh này không đưa tên mô-đun được nhập vào bảng biểu tượng cục bộ [làm điều đó trong ví dụ này,

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
84 chưa được định nghĩa]
And an other variable to input all the name from a module module

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
07

Lệnh này nhập tất cả các tên trừ những tên bắt đầu bằng dấu gạch chân [

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
70]

SIÊU SALE - SIÊU SALE

6. 1. 1 Path find module

Khi tên thư rác được nhập vào mô-đun mô-đun, thông tin dịch vụ sẽ tìm thấy tên tệp thư rác. py trong thư mục hiện tại, rồi trong danh sách các thư mục được chỉ định bởi biến môi trường PYTHONPATH. Biến này có cùng cú pháp như biến môi trường PATH, cùng chứa một danh sách tên các thư mục. Khi PYTHONPATH chưa được thiết lập hoặc khi tệp không được tìm thấy, công việc tìm kiếm sẽ tiếp tục tìm trong đường dẫn mặc định theo tùy chọn khi cài đặt Python; . /usr/local/lib/python
Thật vậy, mô-đun được tìm thấy trong danh sách các thư mục được chỉ định bởi biến sys. đường dẫn đã được thiết lập từ thư mục chứa nguồn gốc kịch bản [hoặc thư mục hiện tại], PYTHONPATH và các định dạng mặc định khi cài đặt. Điều này cho phép thay đổi chương trình Python hoặc thay thế đường dẫn tìm mô-đun. Lưu ý rằng vì thư mục chứa kịch bản đang chạy nằm trong đường dẫn tìm kiếm, tên của kịch bản hay nhất nhất thiết phải không trùng với tên của các mô-đun chuẩn, nếu không thì Python sẽ cố gắng tải kịch bản như một mô-đun . Thông thường điều này sẽ gây ra lỗi. Xem mục , “Các mô-đun chuẩn,” để biết thêm chi tiết

SIÊU SALE - SIÊU SALE

6. 1. 2 Các tập tin Python “đã dịch”

Như một cách quan trọng để tăng tốc quá trình khởi động của các chương trình rút ngắn sử dụng nhiều mô-đun tiêu chuẩn, nếu tệp có tên thư rác. pyc tồn tại trong thư mục chứa thư rác. py được tìm thấy, tập tin này được giả định là phiên bản đã được “biên dịch byte” [byte-compile] của mô-đun spam. Change time of spam version. py used for spam. pyc được lưu lại trong thư rác. pyc, and file. pyc sẽ bị loại bỏ nếu chúng không khớp nhau
Thông thường, bạn không cần phải làm gì cả để tạo thư rác tập tin. pyc. Spam nào. py đã được biên dịch thành công, Python sẽ thử ghi phiên bản đã biên dịch ra thư rác. pyc. Nếu công việc ghi chép này thất bại thì cũng không có gì sai sót xảy ra; . pyc sẽ bị đánh dấu là không hợp lệ và sẽ bị loại bỏ thông qua điều này. Nội dung của thư rác tập tin. pyc không phụ thuộc vào hệ thống, do đó một thư mục mô-đun Python có thể được chia cắt với nhiều máy trên các kiến ​​trúc khác nhau
Một vài mẹo cho chuyên gia

SIÊU SALE - SIÊU SALE
  • Khi Python thông báo dịch được chạy với cờ -O, mã tối ưu được tạo và lưu trong các tệp. pyo. Trình tối ưu hóa hiện tại không giúp được gì nhiều, nó chỉ bỏ qua các lệnh
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    91. When -O used, all bytecode [mã byte] đều được ưu tiên tối đa;
  • Truyền hai cờ -O vào trình thông dịch Python [-OO] sẽ khiến trình biên dịch mã byte thực hiện những điều tối ưu mà trong những trường hợp hiếm hoi có thể dẫn đến hỏng hóc trong chương trình. Hiện tại chỉ có các chuỗi
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    94 được bỏ qua byte mã, làm cho tệp
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    95 được thu gọn hơn. Vì một số chương trình phụ thuộc vào các chuỗi này, bạn chỉ nên sử dụng tùy chọn này nếu bạn biết bạn đang làm gì
  • Một chương trình không chạy nhanh hơn khi nó được đọc từ một tập tin
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    92 hay
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    95 so với khi nó được đọc từ tập tin
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    81; . pyc cỏ khô. pyo is speed they are loading
  • Khi một kịch bản được chạy bằng cách nhập tên của nó ở dòng lệnh, thì mã byte của kịch bản không bao giờ được ghi vào tệp
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    92 hay
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    95. Do đó, thời gian khởi động của một kịch bản có thể được giảm xuống bằng cách chuyển hầu hết mã của nó thành mô-đun và tạo một kịch bản nhỏ để nhập mô-đun đó. You can also run file
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    92 or
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    95 trực tiếp từ dòng lệnh
  • Có thể sử dụng tệp tin
    >>> 2+2
    4
    >>> # This is a comment
    .. 2+2
    4
    >>> 2+2  # and a comment on the same line as code
    4
    >>> [50-5*6]/4
    5
    >>> # Integer division returns the floor:
    .. 7/3
    2
    >>> 7/-3
    -3
    03 [hoặc
    >>> 2+2
    4
    >>> # This is a comment
    .. 2+2
    4
    >>> 2+2  # and a comment on the same line as code
    4
    >>> [50-5*6]/4
    5
    >>> # Integer division returns the floor:
    .. 7/3
    2
    >>> 7/-3
    -3
    04 khi -O được sử dụng] và không có tệp tin
    >>> 2+2
    4
    >>> # This is a comment
    .. 2+2
    4
    >>> 2+2  # and a comment on the same line as code
    4
    >>> [50-5*6]/4
    5
    >>> # Integer division returns the floor:
    .. 7/3
    2
    >>> 7/-3
    -3
    05 của cùng một mô-đun. Công việc này được tận dụng để phân phối một thư viện Python dưới một dạng hơi khó để dịch ngược
  • Compileall mô-đun có thể tạo các tập tin
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    92 [hoặc các tập tin
    # this is the first comment
    SPAM = 1                 # and this is the second comment
                             #.. and now a third!
    STRING = "# This is not a comment."
    95 khi -O được sử dụng] cho mọi mô-đun trong một thư mục

6. 2 Standard module

Python có một thư viện mô-đun chuẩn, được nói đến trong một tài liệu khác, Tham khảo thư viện Python [từ nay được gọi là “Tài liệu tham khảo”']. Một vài mô-đun được chuyển thẳng vào trình thông dịch; . Tập hợp các mô-đun này là một tùy chọn cấu hình hợp lệ tùy chọn thuộc hệ thống. Ví dụ, mô-đun

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
08 chỉ có trên các hệ hỗ trợ Amoeba. Cần phải gọi đến mô-đun. sys, được đưa vào trong mọi trình thông dịch Python. Các biến
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
09 và
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
10 định nghĩa các chuỗi này được sử dụng như dấu nhắc chính và phụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
08

Hai biến này chỉ được định nghĩa khi trình thông dịch chạy ở chế độ tương tác
Biến

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
11 là một danh sách các chuỗi quyết định đường dẫn tìm kiếm các mô-đun của trình thông dịch. Nó được khởi tạo theo đường dẫn mặc định từ biến môi trường PYTHONPATH, hoặc từ một giá trị có sẵn nếu PYTHONPATH không được thiết lập. Bạn có thể sửa nó bằng cách dùng các công cụ trên danh sách

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
09

6. 3 Hàm dir[]

Hàm có sẵn

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
12 được dùng để tìm các tên một mô-đun định nghĩa. Nó trả về một danh sách các chuỗi đã sắp xếp

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
10

Không có thông số,

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
12 liệt kê các tên bạn đã định nghĩa

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
11

Lưu ý rằng nó liệt kê mọi loại tên. biến, mô-đun, hàm, v. v…

SIÊU SALE - SIÊU SALE

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
12 không liệt kê tên của các hàm và biến có sẵn. Nếu bạn muốn có danh sách của chúng, thì chúng được định nghĩa trong mô-đun chuẩn
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
15

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
12

6. 4 Gói

Gói [package] là một cách để cấu trúc vùng tên mô-đun của Python bằng cách dùng “tên mô-đun có chấm”. Ví dụ, tên mô-đun

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
16 chỉ ra mô-đun con tên “
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
17” trong một gói tên “
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
18“. Cũng như việc sử dụng mô-đun giúp tác giả của các mô-đun khác nhau không phải lo lắng về các biến toàn cục của nhau, việc sử dụng tên mô-đun có chấm giúp tác giả của các gói đa mô-đun như NumPy hay Python Imaging Library không phải lo lắng về tên mô-đun của họ
Giả sử bạn muốn thiết kế một tập hợp các mô-đun [một “gói”] nhằm vào việc xử lý các tập tin và dữ liệu âm thanh. Có nhiều định dạng tập tin âm thanh [thường được nhận dạng dựa vào phần mở rộng, ví dụ. . wav, . aiff, . au], do đó bạn sẽ cần tạo và duy trì một tập hợp luôn tăng của các mô-đun cho việc chuyển đổi giữa các định dạng khác nhau. Cũng có nhiều tác vụ khác nhau bạn muốn thực hiện với dữ liệu âm thanh [ví dụ như tổng hợp, thêm tiếng vang, áp dụng chức năng làm bằng, tạo ra hiệu ứng nổi], do đó bạn sẽ không ngừng viết một loạt các mô-đun để thực hiện các tác vụ này. Sau đây là một cấu trúc minh họa cho gói của bạn [được trình bày theo cách của một hệ tập tin phân cấp]

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
13

Khi nhập một gói, Python tìm trong các thư mục từ

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
11 để tìm thư mục con của gói

SIÊU SALE - SIÊU SALE

Các tập tin

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
20 là cần thiết để cho Python biết các thư mục chứa các gói; việc này được đặt ra để tránh các thư mục với tên chung, ví dụ như “string”, vô tình che mất mô-đun hợp lệ xuất hiện sau trong đường dẫn tìm kiếm. Trong trường hợp đơn giản nhất,
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
20 có thể chỉ là một tập tin rỗng, nhưng nó cũng có thể thực thi các mã thiết lập của gói hoặc thiết lập biến
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
22, sẽ được nhắc đến sau

SIÊU SALE - SIÊU SALE

Người dùng gói này có thể nhập từng mô-đun riêng lẻ từ gói, ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
14

Nó sẽ nạp mô-đun con

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
23. Nó phải được tham chiếu bằng tên đầy đủ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
15

Cách nhập mô-đun con khác là

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
16

Nó cũng nạp luôn mô-đun con

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
24, và làm cho nó có thể được truy cập mà không cần phần tên gói, do đó nó có thể được dùng như sau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
17

Một biến thể khác là nhập hàm hoặc biến mình muốn một cách trực tiếp

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
18

Một lần nữa, lệnh này nạp mô-đun con echo, nhưng nó làm hàm

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
25 có thể được sử dụng trực tiếp

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
19

Lưu ý rằng khi sử dụng

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
26,
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
27 có thể hoặc là mô-đun con [hoặc gói con] của gói, hoặc là một tên nào khác được định nghĩa trong gói, chẳng hạn như một hàm, lớp, hoặc biến. Câu lệnh
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
88 trước hết kiểm tra xem
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
27 có được định nghĩa trong gói; nếu không, nó giả định rằng đó là mô-đun và thử nạp nó. Nếu không thể tìm thấy mô-đun, ngoại lệ
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
30 sẽ xuất hiện
Ngược lại, khi dùng cú pháp như import
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
31, mỗi tiểu mục trừ tiểu mục cuối phải là một gói; tiểu mục cuối có thể là một mô-đun hoặc một gói nhưng không thể là một lớp, hay hàm, hay biến được định nghĩa trong tiểu mục trước

SIÊU SALE - SIÊU SALE

6. 4. 1 Nhập * từ một gói

Bây giờ chuyện gì xảy ra khi bạn viết

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
32? Tốt nhất, bạn sẽ hy vọng mã này sẽ tìm các mô-đun có trong gói và nhập tất cả chúng vào. Đáng tiếc là tác vụ này không chạy ổn định lắm trên hệ Mac và Windows vì hệ thống tập tin không luôn chứa thông tin chính xác về phân biệt hoa/thường trong tên tập tin. Trên các hệ này, không có cách nào bảo đảm để biết được nếu một tập tin
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
33 cần được nhập vào như là một mô-đun
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
24,
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
35 hay
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
36. [Ví dụ, Windows 95 có một thói quen là hiện mọi tên tập tin với ký tự đầu tiên viết hoa. ] Hạn chế tên 8+3 của DOS cũng tạo ra thêm một vấn đề thú vị với các tên mô-đun dài

SIÊU SALE - SIÊU SALE

Giải pháp duy nhất là để tác giả gói chỉ định rõ chỉ mục của gói. Câu lệnh import dùng cách thức sau. nếu mã

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
20 của gói có định nghĩa một danh sách tên
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
22, nó sẽ được dùng làm danh sách của các tên mô-đun cần được nhập khi gặp from package import *. Tác giả gói sẽ phải tự cập nhật danh sách này mỗi khi phiên bản mới của gói được phát hành. Tác giả gói cũng có thể không hỗ trợ nó, nếu họ không thấy cách dùng
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
39 là hữu dụng đối với gói của họ. Ví dụ, tập tin
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
40 có thể chứa đoạn mã sau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
20

Điều này có nghĩa là

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
32 sẽ nhập ba mô-đun được chỉ định từ gói
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
42
Nếu
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
22 không được định nghĩa, câu lệnh
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
32 sẽ không nhập mọi mô-đun con từ gói
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
45 vào vùng tên hiện tại; nó chỉ đảm bảo rằng gói
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
45 đã được nhập [có thể chạy các mã khởi tạo trong
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
20] và sau đó nhập các tên được định nghĩa trong gói. Nó bao gồm các tên [và mô-đun con đã được nạp] được định nghĩa bởi
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
20. Nó cũng gồm các mô-đun con của gói đã được nạp bởi câu lệnh
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
88 trước. Xem đoạn mã này

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
21

Trong ví dụ này, các mô-đun

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
24 và
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
51 được nhập vào vùng tên hiện tại vì chúng được định nghĩa trong gói
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
45 khi câu lệnh
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
53 được thực thi. [Cũng sẽ có cùng kết quả khi
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
22 được định nghĩa. ]
Lưu ý là bình thường việc nhập
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
76 từ một mô-đun hay gói được coi là xấu, vì nó hay dẫn tới các mã khó đọc. Tuy nhiên, khi dùng trong một phiên làm việc tương tác thì nó giúp tiết kiệm công nhập phím, và một vài mô-đun được thiết kế để chỉ xuất các tên theo một vài mẫu cụ thể
Nhớ rằng, không có gì sai trái với việc dùng
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
56. Đúng ra, đây là cách viết được khuyến khích trừ khi mô-đun nhập [importing module] cần dùng mô-đun con có cùng tên ở một gói khác

SIÊU SALE - SIÊU SALE

6. 4. 2 Tham chiếu nội trong gói

Các mô-đun con thường cần tham chiếu lẫn nhau. Ví dụ, Mô-đun

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
51 có thể sử dụng mô-đun
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
24. Trong thực tế, những tham chiếu này quá phổ biến đễn nỗi câu lệnh import đầu tiên sẽ tìm trong gói chứa [containing package] trước khi tìm trong đường dẫn tìm kiếm mô-đun chuẩn. Do đó, mô-đun
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
51 có thể đơn giản dùng
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
60 hay
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
61. Nếu mô-đun được nhập [imported module] không thể tìm ra trong gói chứa [là gói mà mô-đun hiện tại là một mô-đun con], câu lệnh
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
88 tìm một mô-đun cấp cao nhất có cùng tên
Khi các gói được cấu trúc thành các gói con [như gói
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
42 trong ví dụ], không có đường tắt để tham chiếu tới các mô-đun con của các gói kế cận – tên đầy đủ của gói con phải được chỉ định. Ví dụ, nếu mô-đun
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
64 cần dùng mô-đun
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
24 trong gói
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
45, nó có thể dùng
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
67
Bắt đầu từ Python 2. 5, ngoài việc nhập tương đối hiểu ngầm [implicit relative import] đã nói, bạn có thể viết lệnh nhập tương đối xác định [explicit relative import] với kiểu
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
68 của câu lệnh nhập. Các lệnh nhập tương đối xác định dùng chấm ở đầu để chỉ định các gói hiện tại và gói cha có mặt trong câu lệnh nhập. Ví dụ từ mô-đun
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
51, bạn sẽ dùng

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
22

Lưu ý cả hai lệnh nhập tương đối xác định và hiểu ngầm đều dựa vào tên của mô-đun hiện tại. Vì tên của mô-đun chính luôn luôn là “

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
70“, mô-đun được nhằm dể dùng như mô-đun chính của một chương trình Python nên luôn luôn cùng câu lệnh nhập tuyệt đối

SIÊU SALE - SIÊU SALE

6. 4. 3 Gói trong nhiều thư mục

Gói còn có thêm một thuộc tính đặc biệt khác,

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
71. Nó được khởi tạo là danh sách chứa tên của thư mục chứa tập tin
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
20 của gói trước khi mã trong tập tin đó được thực thi. Biến này có thể được thay đổi; làm như vậy sẽ ảnh hưởng các tìm kiếm mô-đun và gói con chứa trong gói này trong tương lai
Mặc dù tính năng này không thường được dùng, nó có thể được tận dụng để mở rộng tập hợp các mô-đun tìm thấy trong một gói

SIÊU SALE - SIÊU SALE

7. Vào và ra [nhập và xuất] trong lập trình Python

Có nhiều các để thể hiện đầu ra của một chương trình; dữ liệu có thể được in ra ở dạng người đọc được, hoặc viết vào một tập tin để dùng sau này. Chương này sẽ bàn về một vài khả năng đó

SIÊU SALE - SIÊU SALE

7. 1 Định dạng ra đẹp hơn

Chúng ta đã gặp hai cách để viết giá trị. câu lệnh biểu thức và câu lệnh

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
12. [Cách thứ ba là dùng phương thức
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
74 của đối tượng tập tin; tập tin đầu ra chuẩn có thể được tham chiếu tới theo
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
75. Xem Tham khảo thư viện Python để biết thêm chi tiết. ]

SIÊU SALE - SIÊU SALE

Lưu ý, từ Python 3x trở lên thì lệnh

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
12 được thay thế bằng hàm
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
77

SIÊU SALE - SIÊU SALE

Thông thường bạn sẽ muốn điều khiển cách định dạng đầu ra của bạn nhiều hơn là chỉ đơn giản là in các giá trị phân cách bởi khoảng trắng. Có hai cách để định dạng đầu ra của bạn; cách thứ nhất là bạn tự xử lý các chuỗi; dùng phép cắt miếng của chuỗi và phép ghép chuỗi bạn có thể tạo bất kỳ bố cục nào bạn có thể nghĩ ra. Mô-đun chuẩn

# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
77 chứa một vài công cụ để đệm chuỗi khít vào chiều ngang cột; chúng ta sẽ xem xét nó lát nữa. Cách thứ hai là dùng toán tử
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
79 với một chuỗi là thông số bên trái. Toán tử
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
79 thông dịch thông số trái như là một chuỗi định dạng kiểu
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
81 [như trong C] để áp dụng vào thông số bên phải; và trả về một chuỗi từ tác vụ định dạng này

SIÊU SALE - SIÊU SALE

Một câu hỏi vẫn còn đó. làm sao để chuyển giá trị thành chuỗi? May mắn thay Python có một cách để chuyển bất kỳ giá trị nào thành chuỗi. truyền nó vào hàm

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
82 hay hàm
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
96. Dấu nháy ngược [
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
84] tương đương với
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
82, nhưng chúng không còn được dùng trong mã Python mới, và rất có thể sẽ không còn trong các phiên bản ngôn ngữ sau này

SIÊU SALE - SIÊU SALE

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
96 nhằm để trả về cách thể hiện giá trị một cách dễ đọc, trong khi
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
82 nhằm để tạo cách thể hiện mà trình thông dịch có thể đọc [hoặc sẽ sinh lỗi
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
88 nếu không có cú pháp tương đương]. Đối với các đối tượng không có cách thể hiện cho người đọc,
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
96 sẽ trả về cùng giá trị như
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
82. Nhiều giá trị, ví dụ như số, hoặc cấu trúc như danh sách và từ điển, có cùng cách thể hiện với cả hai hàm này. Riêng chuỗi và số chấm động có hai cách thể hiện khác biệt

SIÊU SALE - SIÊU SALE

Một vài ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
23

Đây là hai cách để viết một bảng bình phương và lập phương

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
24

[Chú ý một khoảng trắng được thêm vào giữa các cột theo cách hoạt động của

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
12 . nó luôn luôn thêm khoảng trắng giữa các thông số. ]
Ví dụ này biểu diễn phương thức
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
92 của các đối tượng chuỗi, nó canh phải một chuỗi vào trong trường với độ rộng xác định bằng cách thêm khoảng trống vào bên trái. Các phương thức tương tự khác gồm
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
93 và
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
94. Các phương thức này không viết gì cả, chúng chỉ trả về một chuỗi mới. Nếu chuỗi nhập vào quá dài, chúng cũng không cắt nó đi, mà trả về nó nguyên vẹn; điều này thường sẽ phá hỏng bố cục của bạn, nhưng vẫn tốt hơn là nói dối về một giá trị. [Nếu bạn thật sự muốn cắt bỏ bạn có thể thêm phép cắt miếng, như “
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
95“. ]

SIÊU SALE - SIÊU SALE

Có một phương thức khác,

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
96, nó đệm không vào bên trái một chuỗi số. Nó hiểu các dấu cộng và trừ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
25

Dùng toán tử

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
79 sẽ giống như vậy

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
26

Nếu có nhiều hơn một định dạng trong chuỗi, bạn cần truyền một bộ ở toán hạng bên phải, như trong ví dụ này

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
27

Hầu hết các định dạng hoạt động như trong C và yêu cầu bạn truyền kiểu thích hợp; nếu không, bạn sẽ nhận biệt lệ thay vì đổ nhân [core dump]. Định dạng

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
98 dễ dãi hơn. nếu thông số tương ứng không phải là một đối tượng chuỗi, nó sẽ được chuyển thành chuỗi qua hàm có sẵn
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
96. Việc dùng
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
76 để truyền vào độ rộng và mức chính xác như là một thông số nguyên riêng cũng được hỗ trợ. Các định dạng C
>>> width = 20
>>> height = 5*9
>>> width * height
900
01 và
>>> width = 20
>>> height = 5*9
>>> width * height
900
02 không được hỗ trợ

SIÊU SALE - SIÊU SALE

Nếu bạn có một chuỗi định dạng rất dài và không muốn cắt ra, có thể bạn sẽ muốn tham chiếu tới các biến sắp được định dạng qua tên, thay vì vị trí. Việc này có thể được thực hiện theo dạng

>>> width = 20
>>> height = 5*9
>>> width * height
900
03, như ví dụ sau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
28

Cách này đặc biệt hữu dụng khi đi kèm với hàm có sẵn

>>> width = 20
>>> height = 5*9
>>> width * height
900
04 mới, nó trả về một từ điển chứa tất cả các biến cục bộ

SIÊU SALE - SIÊU SALE

7. 2 Đọc và viết tập tin

Câu lệnh

>>> width = 20
>>> height = 5*9
>>> width * height
900
05 trả về một đối tượng tập tin, và thường được dùng với hai thông số. “
>>> width = 20
>>> height = 5*9
>>> width * height
900
06“

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
29

The first number is a string contains filename. Thông số thứ hai là một chuỗi khác chứa một vài ký tự xác định cách thức tập tin sẽ được dùng.

>>> width = 20
>>> height = 5*9
>>> width * height
900
07 có thể là ‘
>>> width = 20
>>> height = 5*9
>>> width * height
900
08‘ khi tập sẽ chỉ được đọc, ‘
>>> width = 20
>>> height = 5*9
>>> width * height
900
09‘ chỉ được ghi [tập tin cùng tên đang có sẽ bị xóa], và ‘
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
01‘ mở tập tin để thêm vào cuối; mọi dữ liệu ghi vào tập tin sẽ được tự động thêm vào cuối. ‘_______51_______11‘ open file to read and write. Thông số
>>> width = 20
>>> height = 5*9
>>> width * height
900
07 là không bắt buộc;

SIÊU SALE - SIÊU SALE

Trong Windows và Macintosh, '_______42_______02' được thêm vào chế độ mở tệp ở chế độ nhị phân, cho nên cũng có các chế độ khác nhau như '

>>> width = 20
>>> height = 5*9
>>> width * height
900
15', '_______51_______16' và 'r+b'. Windows phân biệt các tập tin văn bản và nhị phân; . Việc thay đổi sau bức bình phong [behind-the-scene] như vậy không ảnh hưởng các tập tin văn bản ASCII, nhưng nó sẽ phá dữ liệu nhị phân như trong các tập tin JPEG hay hàm EXE. Cần cẩn thận dùng chế độ nhị phân khi đọc và ghi các tập tin như vậy

SIÊU SALE - SIÊU SALE

7. 2. 1 Method of object file

Các ví dụ trong mục này sẽ sử dụng một tệp đối tượng f đã được tạo

SIÊU SALE - SIÊU SALE

To read content file, call

>>> width = 20
>>> height = 5*9
>>> width * height
900
17, it read a number of data and return a string.
>>> width = 20
>>> height = 5*9
>>> width * height
900
18 is a integer integer. Khi
>>> width = 20
>>> height = 5*9
>>> width * height
900
18 bị bỏ qua hoặc âm thanh, toàn bộ nội dung tập tin sẽ được đọc và trả lại; . Ngược lại, nhiều nhất size byte sẽ được đọc và trả về. Nếu đã đến cuối tập tin,
>>> width = 20
>>> height = 5*9
>>> width * height
900
20 sẽ trả về một chuỗi rỗng [
>>> width = 20
>>> height = 5*9
>>> width * height
900
21]

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
30

>>> width = 20
>>> height = 5*9
>>> width * height
900
22 đọc một dòng từ tập tin; ký tự dòng mới [
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
47] được giữ lại ở cuối chuỗi, và sẽ chỉ bị bỏ qua ở dòng cuối của tập tin nếu tập tin không kết thúc bằng một dòng mới. Điều này làm giá trị trả về rõ ràng; nếu
>>> width = 20
>>> height = 5*9
>>> width * height
900
22 trả về một chuỗi rỗng có nghĩa là đã đụng cuối tập tin, trong khi một dòng trống thì được biểu diễn bởi ‘
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
47‘, một chuỗi chỉ chứa duy nhât một ký tự dòng mới

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
31

>>> width = 20
>>> height = 5*9
>>> width * height
900
26 trả về một danh sách tất cả các dòng trong tập tin. Nếu truyền một tham số không bắt buộc sizehint, nó sẽ đọc nhiêu đó byte từ tập tin và thêm một chút đủ để hoàn tất một dòng, và trả về các dòng đã đọc được. Điều này thường được dùng để đọc một cách hiệu quả từng dòng một trong một tập tin lớn mà không cần phải nạp toàn bộ tập tin vào bộ nhớ. Chỉ có các dòng toàn vẹn mới được trả về

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
32

Một cách khác để đọc các dòng là lặp qua đối tượng tập tin. Nó rất tiết kiệm bộ nhớ, nhanh, và có mã đơn giản

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
33

Cách này đơn giản hơn nhưng không cho bạn điều khiển cách đọc. Vì hai cách này quản lý bộ đệm dòng khác nhau, chúng không nên được dùng chung

>>> width = 20
>>> height = 5*9
>>> width * height
900
27 viết nội dung của string vào tập tin, trả về
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
39

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
34

Để viết một thứ khác không phải là chuỗi, nó sẽ cần được chuyển thành một chuỗi trước

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
35

>>> width = 20
>>> height = 5*9
>>> width * height
900
29 trả về một số nguyên cho biết vị trí hiện tại của đối tượng tập tin, tính theo byte từ đầu tập tin. Để di chuyển vị trí, dùng “
>>> width = 20
>>> height = 5*9
>>> width * height
900
30“. Vị trí được tính từ tổng của offset và điểm tham chiếu; điểu tham chiếu được xác định bởi thông số
>>> width = 20
>>> height = 5*9
>>> width * height
900
31. Giá trị
>>> width = 20
>>> height = 5*9
>>> width * height
900
31 0 tính từ đầu tập tin, 1 dùng vị trí hiện tại, và 2 tính từ vị trí cuối tập tin.
>>> width = 20
>>> height = 5*9
>>> width * height
900
31 có thể bị bỏ qua và mặc định là 0, điểm tham chiếu là đầu tập tin

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
36

Khi bạn đã dùng xong, gọi

>>> width = 20
>>> height = 5*9
>>> width * height
900
34 để đóng nó lại và giải phóng tài nguyên hệ thống đã sử dụng khi mở tập tin. Sau khi gọi
>>> width = 20
>>> height = 5*9
>>> width * height
900
34, mọi cách dùng đối tượng tập tin sẽ tự động thất bại

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
37

Các đối tượng tập tin có thêm các phương thức phụ như

>>> width = 20
>>> height = 5*9
>>> width * height
900
36 và
>>> width = 20
>>> height = 5*9
>>> width * height
900
37 không được thường xuyên dùng; tham khảo tài liệu thư viện để biết thêm về các đối tượng tập tin

SIÊU SALE - SIÊU SALE

7. 2. 2 pickle mô-đun

Các chuỗi có thể được ghi hoặc đọc dễ dàng từ một tập tin. Các số cần một ít cố gắng hơn, vì phương thức

>>> width = 20
>>> height = 5*9
>>> width * height
900
38 chỉ trả về chuỗi, và cần được truyền vào một hàm như
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
66, nó sẽ nhận một chuỗi như
>>> width = 20
>>> height = 5*9
>>> width * height
900
40 và trả về giá trị số
>>> width = 20
>>> height = 5*9
>>> width * height
900
41 của nó. Tuy nhiên, khi bạn muốn lưu các kiểu dữ liệu phức tạp hơn như danh sách, từ điển, hoặc các đối tượng, việc này trở nên rắc rối hơn nhiều

SIÊU SALE - SIÊU SALE

Thay vì để người dùng luôn viết và gỡ rối mã để lưu các kiểu dữ liệu phức tạp, Python cung cấp một mô-đun chuẩn gọi là pickle. Đây là một mô-đun tuyệt diệu có thể nhận hầu hết mọi đối tượng Python [ngay cả một vài dạng mã Python. ], và chuyển nó thành một chuỗi; quá trình này được gọi là giầm [pickling]. Tạo lại đối tượng từ một chuỗi được gọi là vớt [unpickling]. Giữa việc giầm và vớt, biểu diễn dạng chuỗi của đối tượng có thể được lưu vào tập tin, hoặc gửi qua mạng đến một máy ở xa

SIÊU SALE - SIÊU SALE

Nếu bạn có một đối tượng

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
74, và một đối tượng tập tin
>>> width = 20
>>> height = 5*9
>>> width * height
900
43 đã được mở để ghi vào, cách đơn giản nhất để giầm đối tượng chỉ cần một dòng mã

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
38

Để vớt đối tượng ra, nếu

>>> width = 20
>>> height = 5*9
>>> width * height
900
43 là một đối tượng tập tin đã được mở để đọc

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
39

[Có những biến thể khác, dùng khi giầm nhiều đối tượng hoặc khi bạn không muốn viết dữ liệu đã giầm vào tập tin; tham khảo toàn bộ tài liệu về pickle trong Tham khảo thư viện Python. ]

SIÊU SALE - SIÊU SALE

pickle là cách chuẩn để làm cho các đối tượng Python có thể được lưu và dùng lại bởi các chương trình khác, hoặc bởi lần chạy khác của cùng chương trình; thuật ngữ trong ngành gọi là đối tượng bền. Vì pickle được sử dụng rộng rãi, nhiều tác giả khi mở rộng Python đã cẩn thận để đảm bảo rằng các kiểu dữ liệu mới ví dụ như ma trận có thể được giầm và vớt đúng đắn

SIÊU SALE - SIÊU SALE

8. Lỗi và biệt lệ

Đến bây giờ chũng ta cũng chỉ mới nhắc đến các thông điệp lỗi, nhưng nếu bạn đã thử qua các ví dụ thì bạn có thể đã gặp nhiều hơn. Có [ít nhất] hai loại lỗi khác biệt. lỗi cú pháp và biệt lệ

SIÊU SALE - SIÊU SALE

8. 1 Lỗi cú pháp

Lỗi cú pháp, còn biết đến như lỗi phân tích [parsing error], có lẽ là phàn nàn lớn nhất bạn gặp phải khi vẫn đang học Python

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
40

Bộ phân tích lặp lại dòng gây lỗi và hiển thị một mũi tên nhỏ trỏ vào điểm đầu tiên lỗi được phát hiện. Lỗi nằm ở dấu hiệu phía trước mũi tên. trong ví dụ trên, lỗi được phát hiện ở từ khóa

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
12, vì thiếu một dấu hai chấm [“
>>> width = 20
>>> height = 5*9
>>> width * height
900
46“] ở trước đó. Tên tập tin vào số dòng được hiển thị để bạn biết tìm lỗi ở chỗ nào nếu đầu vào là từ một kịch bản

SIÊU SALE - SIÊU SALE

8. 2 Biệt lệ [Ngoại lệ]

Cho dù một câu lệnh hoặc biểu thức là đúng đắn, nó vẫn có thể tạo lỗi khi thực thi. Những lỗi bị phát hiện trong lúc thực thi được gọi là biệt lệ và không tai hại một cách vô điều kiện. bạn sẽ học cách xử lý chúng trong các chương trình Python. Hầu hết các biệt lệ đều được xử lý bởi chương trình và dẫn đến kết quả là các thông điệp lỗi như ở đây

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
41

Dòng cuối cùng của thông điệp lỗi cho biết chuyện gì xảy ra. Biệt lệ có nhiều kiểu, và kiểu được hiển thị như là một phần của thông điệp. các kiểu trong ví dụ là

>>> width = 20
>>> height = 5*9
>>> width * height
900
47,
>>> width = 20
>>> height = 5*9
>>> width * height
900
48 và
>>> width = 20
>>> height = 5*9
>>> width * height
900
49. Chuỗi được hiển thị như là kiểu biệt lệ là tên của biệt lệ có sẵn vừa xảy ra. Điều này đúng với tất cả các biệt lệ có sẵn, nhưng không nhất thiết đúng với các biệt lệ do người dùng định nghĩa [mặc dù đó là một quy ước hữu dụng]. Các tên biệt lệ chuẩn là những từ định danh có sẵn [không phải là từ khóa]
Phần còn lại cho biết chi tiết về kiểu biệt lệ và chuyện gì gây ra nó

SIÊU SALE - SIÊU SALE

Phần trước của thông điệp lỗi cho biết hoàn cảnh khi xảy ra biệt lệ, ở dạng lần ngược ngăn xếp [stack traceback]. Bình thường nó chứa một lần ngược ngăn xếp liệt kê các dòng nguồn; tuy nhiên, nó sẽ không hiển thị các dòng đọc từ đầu vào chuẩn
Tham khảo thư viện Python liệt kê các biệt lệ có sẵn và ý nghĩa của chúng

SIÊU SALE - SIÊU SALE

8. 3 Xử lý biệt lệ

Chúng ta có thể viết những chương trình xử lý những biệt lệ được chọn. Hãy xem ví dụ sau, nó yêu cầu người dùng nhập vào dữ liệu cho tới khi một số nguyên được nhập, nhưng cũng cho phép người dùng ngưng chương trình [dùng Control-C hoặc phím tắt khác mà hệ điều hành hỗ trợ]; lưu ý rằng sự ngắt quãng do người dùng tạo nên được đánh dấu bởi việc nâng biệt lệ

>>> width = 20
>>> height = 5*9
>>> width * height
900
50

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
42

>>> width = 20
>>> height = 5*9
>>> width * height
900
51 [câu lệnh] hoạt động như sau

SIÊU SALE - SIÊU SALE
  • Trước tiên, vế
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    51 [các câu lệnh giữa từ khóa
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    51 và
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    54 ] được thực thi
  • Nếu không có biệt lệ nào xảy ra, vế
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    54 được bỏ qua và câu lệnh
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    51 kết thúc
  • Nếu trong khi thực thi vế
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    51 xảy ra biệt lệ, phần còn lại của vế được bỏ qua. Sau đó nếu kiểu biệt lệ hợp với kiểu được chỉ định sau từ khóa
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    54, thì vế
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    54 được thực thi, và rồi việc thực thi tiếp tục sau câu lệnh
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    51
  • Nếu biệt lệ xảy ra không hợp với biệt lệ được chỉ định ở vế
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    54, nó sẽ được truyền ra các câu lệnh
    >>> width = 20
    >>> height = 5*9
    >>> width * height
    900
    51 bên ngoài; nếu không có đoạn mã xử lý nào, nó là một biệt lệ không được xử lý và việc thực thi dừng lại với một thông báo như trên

Một câu lệnh

>>> width = 20
>>> height = 5*9
>>> width * height
900
51 có thể có nhiều hơn một vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
54, để chỉ rõ cách xử lý cho những biệt lệ khác nhau. Nhiều nhất là một đoạn xử lý [handler] sẽ được thực thi. Các đoạn xử lý chỉ xử lý biệt lệ xảy ra trong vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
51 tương ứng, không xử lý các biệt lệ trong các đoạn xử lý khác của cùng câu lệnh
>>> width = 20
>>> height = 5*9
>>> width * height
900
51. Vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
54 có thể định danh nhiều biệt lệ trong một bộ [
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
11], ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
43

Vế

>>> width = 20
>>> height = 5*9
>>> width * height
900
54 cuối cùng có thể bỏ qua tên biệt lệ, có tác dụng như là một thay thế [wildcard]. Phải hết sức cẩn trọng khi dùng nó, vì nó có thể dễ dàng che đi lỗi lập trình thật. Nó cũng có thể được dùng để in thông báo lỗi và sau đó nâng biệt lệ lại [re-raise exception] [nhằm cho phép nơi gọi xử lý biệt lệ]

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
44

Câu lệnh

>>> width = 20
>>> height = 5*9
>>> width * height
900
70  có một vế
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
15 không bắt buộc, mà khi có mặt sẽ phải đi sau tất cả các vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
54. Nó dùng cho mã sẽ được thực thi nếu vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
51 không nâng biệt lệ nào. Ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
45

Việc dùng vế

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
15 tốt hơn là thêm mã vào vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
51 vì nó tránh việc vô tình bắt một biệt lệ không được nâng từ mã được bảo vệ trong câu lệnh
>>> width = 20
>>> height = 5*9
>>> width * height
900
70
Khi một biệt lệ xảy ra, nó có thể có một giá trị gắn liền, còn được biết đến như là thông sốcủa biệt lệ. Sự có mặt và kiểu của thông số phụ thuộc vào kiểu biệt lệ
Vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
54 có thể chỉ định một biến sau một [hoặc một bộ] tên biệt lệ. Biến đó được gán với một trường hợp biệt lệ [exception instance] với các thông số chứa trong
>>> width = 20
>>> height = 5*9
>>> width * height
900
78. Để thuận tiện, trường hợp biệt lệ định nghĩa
>>> width = 20
>>> height = 5*9
>>> width * height
900
79 và
>>> width = 20
>>> height = 5*9
>>> width * height
900
80 để cho các thông số có thể được truy xuất và in ra trực tiếp mà không phải tham chiếu
>>> width = 20
>>> height = 5*9
>>> width * height
900
81
Nhưng việc dùng
>>> width = 20
>>> height = 5*9
>>> width * height
900
82
>>> width = 20
>>> height = 5*9
>>> width * height
900
83 đã không được khuyến khích. Thay vào đó, cách dùng tốt nhất là truyền một thông số đơn lẻ vào một biệt lệ [có thể là một bộ nếu có nhiều thông số] và gán nó vào thuộc tính message. Ta cũng có thể tạo một biệt lệ trước và thêm các thuộc tính vào nó trước khi nâng

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
46

Nếu biệt lệ có một thông số, nó sẽ được in ra như là phần cuối [`chi tiết’] của thông điệp của những biệt lệ không được xử lý
Các phần xử lý biệt lệ không chỉ xử lý các biệt lệ xảy ra ngay trong vế

>>> width = 20
>>> height = 5*9
>>> width * height
900
51, mà còn xử lý cả biệt trong những hàm được gọi [trực tiếp hoặc gián tiếp] trong vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
51. Ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
47

8. 4 Nâng biệt lệ

Câu lệnh

>>> width = 20
>>> height = 5*9
>>> width * height
900
86 cho phép nhà lập trình ép xảy ra một biệt lệ được chỉ định. Ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
48

Thông số đầu tiên cho raise chỉ định biệt lệ sẽ được nâng. Thông số [tùy chọn] thứ hai chỉ định thông số của biệt lệ. Hoặc là, các dòng trên có thể được viết

>>> width = 20
>>> height = 5*9
>>> width * height
900
87. Cả hai dạng đều đúng, nhưng người ta có vẻ chuộng dạng thứ hai hơn
Nếu bạn cần xác định xem một biệt lệ có được nâng chưa nhưng không định xử lý nó, dạng đơn giản hơn của câu lệnh
>>> width = 20
>>> height = 5*9
>>> width * height
900
86 cho phép bạn nâng lại [re-raise] biệt lệ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
49

8. 5 Biệt lệ tự định nghĩa

Các chương trình có thể đặt tên biệt lệ riêng bằng cách tạo một lớp biệt lệ mới. Các biệt lệ thường nên kế thừa từ lớp

>>> width = 20
>>> height = 5*9
>>> width * height
900
89, trực tiếp hoặc gián tiếp. Ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
50

Trong ví dụ này, mặc định

>>> width = 20
>>> height = 5*9
>>> width * height
900
90 của Exception đã được định nghĩa lại. Cách thức mới chỉ đơn giản tạo thuộc tính
>>> width = 20
>>> height = 5*9
>>> width * height
900
91. Nó thay thế cách thức tạo thuộc tính mặc định
>>> width = 20
>>> height = 5*9
>>> width * height
900
83

SIÊU SALE - SIÊU SALE

Các lớp biệt lệ có thể được định nghĩa để làm bất kỳ việc gì như các lớp khác, nhưng chúng thường là đơn giản và chỉ cung cấp một số thuộc tính để chứa thông tin về lỗi cho các phần xử lý biệt lệ. Khi tạo một mô-đun mà có thể nâng vài lỗi khác biệt, cách thông thường là tạo một lớp cơ sở cho các biệt lệ được định nghĩa bởi mô-đun đó, và kế thừa từ đó để tạo những lớp biệt lệ cụ thể cho những trường hợp lỗi khác nhau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
51

Đa số biệt lệ được định nghĩa với tên tận cùng bằng “

>>> width = 20
>>> height = 5*9
>>> width * height
900
93”, tương tự như cách đặt tên của các biệt lệ chuẩn
Nhiều mô-đun chuẩn định nghĩa biệt lệ riêng cho chúng để thông báo những lỗi mà có thể xảy ra trong các hàm chúng định nghĩa. Thông tin thêm về các lớp được trình bày trong chương , “Lớp”

SIÊU SALE - SIÊU SALE

8. 6 Định nghĩa cách xử lý

Câu lệnh

>>> width = 20
>>> height = 5*9
>>> width * height
900
51 có một vế không bắt buộc khác với mục đích định nghĩa những tác vụ dọn dẹp [clean-up action] mà sẽ được thực hiện trong mọi trường hợp. Ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
52

A vế

>>> width = 20
>>> height = 5*9
>>> width * height
900
95 luôn được thực thi trước khi rời khỏi câu lệnh
>>> width = 20
>>> height = 5*9
>>> width * height
900
51, cho dù có xảy ra biệt lệ hay không. Khi một biệt lệ đã xảy ra trong vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
51 và không được xử lý bởi vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
54 [hoặc nó đã xảy ra trong một vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
54 hay
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
15], nó sẽ được nâng lại sau khi vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
95 đã được thực thi. Vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
95 cũng được thực thi “trên đường ra” khi bất kỳ vế nào của câu lệnh
>>> width = 20
>>> height = 5*9
>>> width * height
900
51 được bỏ lại thông qua câu lệnh
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
26,
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
27 hay
import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
37. Một ví dụ phức tạp hơn

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
53

Như bạn có thể thấy, vế

>>> width = 20
>>> height = 5*9
>>> width * height
900
95 được thực thi trong mọi trường hợp.
>>> width = 20
>>> height = 5*9
>>> width * height
900
49 được nâng vì chia hai chuỗi không được xử lý bởi vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
54 và vì thế nên được nâng lại sau khi vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
95 đã được thực thi
Trong các ứng dụng thực thế, vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
95 được dùng để trả lại những tài nguyên ngoài [như tập tin, hoặc kết nối mạng], cho dù việc sử dụng tài nguyên có thành công hay không

SIÊU SALE - SIÊU SALE

8. 7 Định nghĩa xử lý có sẵn

Một số đối tượng định nghĩa các tác vụ dọn dẹp chuẩn để thực thi khi một đối tượng không còn được cần đến, cho dù việc xử dụng đối tượng là thành công hay thất bại. Xem qua ví dụ sau, nó thử mở một tập tin và viết nội dung của nó ra màn hình

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
54

Vấn đề với đoạn mã trên là nó để tập tin ngỏ trong một thời gian không xác định sau khi đoạn mã đã kết thúc. Đây không phải là vấn đề gì trong các đoạn kịch bản đơn giản, nhưng có thể là một vấn đề phức tạp đối với các ứng dụng lớn hơn. Câu lệnh

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
12 cho phép các đối tượng như tập tin được dùng theo một cách đảm bảo chúng sẽ được dọn dẹp đúng lúc và đúng đắn

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
55

Sau khi câu lệnh được thực thi, tập tin

>>> width = 20
>>> height = 5*9
>>> width * height
900
43 luôn được đóng lại, cho dù gặp phải vấn đề trong khi xử lý các dòng. Các đối tượng khác mà cung cấp những tác vụ dọn dẹp định nghĩa sẵn sẽ cho biết về điểm này trong tài liệu của chúng

SIÊU SALE - SIÊU SALE

9. Lớp

Chỉ cần một ít cú pháp và từ khóa mới, Python đã có thể hỗ trợ lớp

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
14. Nó là sự trộn lẫn giữa C++ và Modula-3. Cũng như mô-đun, các lớp tron Python không đặt rào cản tuyệt đối giữa định nghĩa lớp và người sử dụng, mà thay vào đó nó dựa vào sự lịch thiệp trong cách dùng mà “không phá định nghĩa. ” Tuy nhiên, các tính năng quan trọng nhất của lớp vẫn được giữ lại trọn vẹn. cách kế thừa lớp hỗ trợ nhiều lớp cơ sở, lớp con có thể định nghĩa lại bất kỳ phương thức nào của các lớp cơ sở của nó, và một phương thức có thể gọi một phương thức cùng tên của một lớp cơ sở. Các đối tượng có thể chứa một lượng dũ liệu riêng bất kỳ

SIÊU SALE - SIÊU SALE

Theo thuật ngữ C++, mọi thành viên lớp [kể cả thành viên dữ liệu] là

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
15 [công cộng], và mọi thành viên hàm là virtual[ảo]. Không có bộ khởi tạo [constructor] hoặc bộ hủy [destructor] đặc biệt. Cũng như Modula-3, không có cách viết tắt nào để tham chiếu tới các thành viên của một đối tượng từ các phương thức của nó. hàm phương thức được khai báo với thông số thứ nhất thể hiện chính đối tượng đó, và được tự động truyền vào qua lệnh gọi. Như trong Smalltalk, các lớp cũng là các đối tượng theo một nghĩa rộng. trong Python, mọi kiểu dữ liệu là đều là các đối tượng. Điều này cho phép nhập [import] và đổi tên. Không như C++ và Modula-3, các kiểu có sẵn có thể được dùng như các lớp cơ sở để mở rộng bởi người dùng. Và như trong C++ nhưng không giống Modula-3, đa số các toán tử có sẵn với cú pháp đặc biệt [các toán tử số học, truy cập mảng, v. v…] có thể được định nghĩa lại trong các trường hợp cụ thể của lớp

SIÊU SALE - SIÊU SALE

9. 1 Vài lời về thuật ngữ

Những từ chuyên ngành dùng ở đây theo từ vựng của Smalltalk và C++

SIÊU SALE - SIÊU SALE

Các đối tượng có tính cá thể [cá nhân], và nhiều tên [trong nhiều phạm vi, phạm vi] có thể được gắn vào cùng một đối tượng. Trong các ngôn ngữ khác được gọi là tên lóng [alias]. Nó thường không được nhận ra khi dùng Python lần đầu, và có thể được bỏ qua khi làm việc với các kiểu bất biến cơ bản [số, chuỗi, bộ]. Tuy nhiên, tên lóng có một ảnh hưởng đối với ý nghĩa của mã Python có sử dụng các đối tượng khả biến như danh sách, từ điển, và đa số các kiểu thể hiện các vật ngoài chương trình [tập tin, cửa sổ, v. v…]. Nó thường được dùng vì tên lóng có tác dụng như là con trỏ theo một vài khía cạnh nào đó. Ví dụ, truyền một đối tượng vào một hàm rẻ vì chỉ có con trỏ là được truyền, và nếu một hàm thay đổi một đối tượng được truyền vào, thì nơi gọi sẽ thấy các thay đổi đó — thay vì cần hai kiểu truyền thông số như trong Pascal

SIÊU SALE - SIÊU SALE

9. 2 Phạm vi trong Python và vùng tên

Trước khi giới thiệu lớp, chúng ta sẽ cần hiểu phạm vi [scope] và vùng tên [namespace] hoạt động như thế nào vì các định nghĩa lớp sẽ sử dụng chúng. Kiến thức về vấn đề này cũng rất hữu dụng với những nhà lập trình Python chuyên nghiệp
Bắt đầu với một vài định nghĩa

SIÊU SALE - SIÊU SALE

Một namespace [vùng tên] là ánh xạ từ tên vào đối tượng. Đa số các vùng tên được cài đặt bằng từ điển Python, nhưng điều đó thường là không quan trọng [trừ tốc độ], và có thể sẽ thay đổi trong tương lai. Các ví dụ vùng tên như. tập hợp các tên có sẵn [các hàm như

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
16 và các tên biệt lệ có sẵn]; các tên toàn cụ trong một mô-đun; các tên nội bộ trong một phép gọi hàm. Theo nghĩa đó tập hợp các thuộc tính của một đối tượng cũng là một vùng tên. Điều quan trọng cần biết về vùng tên là tuyệt đối không có quan hệ gì giữa các vùng tên khác nhau; ví dụ hai mô-đun khác nhau có thể cùng định nghĩa hàm “maximize” mà không sợ lẫn lộn — người dùng mô-đun phải thêm tiền tố tên mô-đun trước khi gọi hàm

SIÊU SALE - SIÊU SALE

Cũng xin nói thêm là từ thuộc tính được dùng để chỉ mọi tên theo sau dấu chấm — ví dụ, trong biểu thức

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
63,
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
18 là một thuộc tính của đối tượng
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
62. Nói đúng ra, tham chiếu tới tên trong một mô-đun là các tham chiếu tới thuộc tính. trong biểu thức
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
20,
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
21 là một đối tượng mô-đun và
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
22 là một thuộc tính của nó. Trong trường hợp này, việc ánh xạ giữa các thuộc tính của mô-đun và các tên toàn cục được định nghĩa trong mô-đun thật ra rất đơn giản. chúng dùng chung một vùng tên

SIÊU SALE - SIÊU SALE

Thuộc tính có thể là chỉ đọc, hoặc đọc ghi. Trong trường hợp sau, phép gán vào thuộc tính có thể được thực hiện. Các thuộc tính mô-đun là đọc ghi. bạn có thể viết “

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
23“. Các thuộc tính đọc ghi cũng có thể được xóa đi với câu lệnh
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
05. Ví dụ, “
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
25” sẽ xóa thuộc tính
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
26 từ đối tượng tên
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
21

SIÊU SALE - SIÊU SALE

Các vùng tên được tạo ra vào những lúc khác nhau và có thời gian sống khác nhau. Vùng tên chứa các tên có sẵn được tạo ra khi trình thông dịch Python bắt đầu, và không bao giờ bị xóa đi. Vùng tên toàn cục của một mô-đun được tạo ra khi định nghĩa mô-đun được đọc; bình thường, vùng tên mô-đun cũng tồn tại cho tới khi trình thông dịch thoát ra. Các câu lệnh được thực thi bởi lời gọi ở lớp cao nhất của trình thông dịch, vì đọc từ một kịch bản hoặc qua tương tác, được coi như một phần của mô-đun gọi là

>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
70, cho nên chúng cũng có vùng tên riêng. [Các tên có sẵn thật ra cũng tồn tại trong một mô-đun; được gọi là
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
15. ]
Vùng tên nội bộ của một hàm được tạo ra khi hàm được gọi, và được xóa đi khi hàm trả về, hoặc nâng một biệt lệ không được xử lý trong hàm. Dĩ nhiên, các lời gọi hàm đệ quy có vùng tên riêng của chúng

SIÊU SALE - SIÊU SALE

Một phạm vi là một vùng văn bản của một chương trình Python mà một vùng tên có thể được truy cập trực tiếp. “Có thể truy cập trực tiếp” có nghĩa là một tham chiếu không đầy đủ [unqualifed reference] tới một tên sẽ thử tìm tên đó trong vùng tên

SIÊU SALE - SIÊU SALE

Mặc dù phạm vi được xác định tĩnh, chúng được dùng một cách động. Vào bất kỳ một lúc nào, có ít nhất ba phạm vi lồng nhau mà vùng tên của chúng có thể được truy cập trực tiếp. phạm vi bên trong cùng, được tìm trước, chứa các tên nội bộ; các vùng tên của các hàm chứa nó, được tìm bắt đầu từ phạm vi chứa nó gần nhất [nearest enclosing scope]; phạm vi giữa [middle scope], được tìm kế, chứa các tên toàn cục của mô-đun; và phạm vi ngoài cùng [được tìm sau cùng] là vùng tên chứa các tên có sẵn

SIÊU SALE - SIÊU SALE

Nếu một tên được khai báo là toàn cục, thì mọi tham chiếu hoặc phép gán sẽ đi thẳng vào phạm vi giữa chứa các tên toàn cục của mô-đun. Nếu không, mọi biến được tìm thấy ngoài phạm vi trong cùng chỉ có thể được đọc [nếu thử khi vào các biến đó sẽ tạo một biến cục bộ mới trong phạm vi trong vùng, và không ảnh hưởng tới biến cùng tên ở phạm vi ngoài]
Thông thường, phạm vi nội bộ tham chiếu các tên nội bộ của hàm hiện tại [dựa vào văn bản]. Bên ngoài hàm, phạm vi nội bộ tham chiếu cùng một vùng tên như phạm vi toàn cục. vùng tên của mô-đun. Các định nghĩa lớp đặt thêm một vùng tên khác trong phạm vi nội bộ
Điểm quan trọng cần ghi nhớ là phạm vi được xác định theo văn bản. phạm vi toàn cục của một hàm được định nghĩa trong một mô-đun là vùng tên của mô-đun đó, cho dù mô-đun đó được gọi từ đâu, hoặc được đặt tên lóng nào. Mặt khác, việc tìm tên được thực hiện lúc chạy — tuy nhiên, định nghĩa ngôn ngữ đang phát triển theo hướng xác định tên vào lúc “dịch”, cho nên đừng dựa vào việc tìm tên động. [Thực ra thì các biến nội bộ đã được xác định tĩnh. ]

SIÊU SALE - SIÊU SALE

Một điểm ngộ của Python là các phép gán luôn gán vào phạm vi trong cùng. Phép gán không chép dữ liệu — chú chỉ buộc các tên và các đối tượng. Xóa cũng vậy. câu lệnh “del x” bỏ ràng buộc x khỏi vùng tên được tham chiếu tới bởi phạm vi nội bộ. Thực tế là mọi tác vụ có thêm các tên mới đều dùng phạm vi nội bộ. điển hình là các câu lệnh nhập và các định nghĩa hàm buộc tên mô-đun hoặc tên hàm vào phạm vi nội bộ. [Lệnh global có thể được dùng để cho biết một biến cụ thể là ở phạm vi toàn cục. ]

SIÊU SALE - SIÊU SALE

9. 3 Cái nhìn đầu tiên về lớp

Lớp thêm một ít cú pháp mới, ba kiểu đối tượng mới, và một ít ngữ nghĩa mới

SIÊU SALE - SIÊU SALE

9. 3. 1 Cú pháp định nghĩa lớp

Kiểu đơn giản nhất của việc định nghĩa lớp nhìn giống như

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
56

Định nghĩa lớp, cũng như định nghĩa hàm [câu lệnh

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
36 ] phải được thực thi trước khi chúng có hiệu lực. [Bạn có thể đặt một định nghĩa hàm trong một nhánh của lệnh if, hoặc trong một hàm. ]

SIÊU SALE - SIÊU SALE

Trong thực tế, các câu lệnh trong một lớp định nghĩa thường là định nghĩa hàm, nhưng các câu lệnh khác cũng được cho phép và đôi khi rất hữu ích. Các định nghĩa hàm trong một lớp thường có một dạng danh sách thông số lạ, vì phải tuân theo cách gọi phương thức

SIÊU SALE - SIÊU SALE

Khi gặp phải một định nghĩa lớp, một vùng tên mới được tạo ra, và được dùng như là phạm vi nội bộ — do đó, mọi phép gán vào các biến nội bộ đi vào vùng tên này. Đặc biệt, các định nghĩa hàm buộc tên của hàm mới ở đây

SIÊU SALE - SIÊU SALE

Khi rời khỏi một định nghĩa lớp một cách bình thường, một đối tượng lớp được tạo ra. Đây cơ bản là một bộ gói [wrapper] của nội dung của vùng tên tạo ra bởi định nghĩa lớp. Phạm vi nội bộ ban đầu [trước khi vào định nghĩa lớp] được thiết lập lại, và đối tượng lớp được buộc vào đây qua tên lớp đã chỉ định ở định nghĩa lớp, [

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
31 trong ví dụ này]

SIÊU SALE - SIÊU SALE

9. 3. 2 Đối tượng lớp

Các đối tượng lớp hỗ trợ hai loại tác vụ. tham chiếu thuộc tính và tạo trường hợp [instantiation]

SIÊU SALE - SIÊU SALE

Tham chiếu thuộc tính dùng cú pháp chuẩn được dùng cho mọi tham chiếu thuộc tính trong Python.

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
32. Các tên thuộc tính hợp lệ gồm mọi tên trong vùng tên của lớp khi đối tượng lớp được tạo ra. Do đó, nếu định nghĩa lớp có dạng như sau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
57

thì

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
33 và
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
34 là những tham chiếu thuộc tính hợp lệ, trả về một số nguyên và một đối tượng hàm, theo thứ tự đó. Các thuộc tính lớp cũng có thể gán vào, cho nên bạn có thể thay đổi giá trị của
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
33 bằng phép gán.
# this is the first comment
SPAM = 1                 # and this is the second comment
                         #.. and now a third!
STRING = "# This is not a comment."
94 cũng là một thuộc tính hợp lệ, trả về chuỗi tài liệu của lớp. “A simple example class”

SIÊU SALE - SIÊU SALE

Class instantiation [tạo trường hợp lớp] dùng cùng cách viết như gọi hàm. Hãy tưởng tượng một đối tượng lớp là một hàm không thông số trả về một trường hợp của lớp. Ví dụ [với lớp trên]

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
58

tạo một trường hợp mới của lớp và gán đối tượng này vào biến nội bộ

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
74

SIÊU SALE - SIÊU SALE

Tác vụ tạo trường hợp [“gọi” một đối tượng lớp] tạo một đối tượng rỗng. Nhiều lớp thích tạo đối tượng với các trường hợp được khởi tạo ở một trạng thái đầu nào đó. Do đó một lớp có thể định nghĩa một phương thức đặc biệt tên

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
38, như sau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
59

Khi một lớp định nghĩa một phương thức

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
38, việc tạo trường hợp lớp sẽ tự động gọi
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
38 ở trường hợp lớp mới vừa được tạo. Trong ví dụ nạy, một trường hợp đã khởi tạo mới có thể được tại ra từ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
58

Dĩ nhiên,

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
38 [phương thức] có thể nhận thêm thông số. Trong trường hợp đó, các thông số đưa vào phép tạo trường hợp lớp sẽ được truyền vào
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
38. Ví dụ,

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
61

9. 3. 3 Đối tượng trường hợp

Chúng ta có thể làm được gì với những đối tượng trường hợp? Tác vụ duy nhất mà các đối tượng trường hợp hiểu được là tham chiếu thuộc tính. Có hai loại tên thuộc tính hợp lệ, thuộc tính dữ liệu và phương thức
data attributes [thuộc tính dữ liệu lớp] tương ứng với “biến trường hợp” trong Smalltalk, và ”thành viên dữ liệu” trong C++. Thuộc tính dữ liệu không cần được khai báo; như các biến nội bộ, chúng tự động tồn tại khi được gán vào. Ví dụ, nếu

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
74 là một trường hợp của
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
44 được tạo ra ở trên, đoạn mã sau in ra giá trị 16, mà không chừa lại dấu vết

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
62

Loại tham chiếu thuộc tính trường hợp khác là một method [phương thức]. Một phương thức là một hàm “của” một đối tượng. [Trong Python, từ phương thức không chỉ riêng cho trường hợp lớp. các kiểu đối tượng khác cũng có thể có phương thức. Ví dụ, đối tượng danh sách có phương thức tên

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
45, v. v… Tuy nhiên, trong phần sau chúng ta sẽ chỉ dùng từ phương thức dể chỉ các phương thức của đối tượng trường hợp lớp, trừ khi được chỉ định khác đi. ]

SIÊU SALE - SIÊU SALE

Các tên phương thức hợp lệ của một đối tượng trường hợp phụ thuộc vào lớp của nó. Theo định nghĩa, mọi thuộc tính của một lớp mà là những đối tượng hàm định nghĩa các phương thức tương ứng của các trường hợp của lớp đó. Trong ví dụ của chúng ta,

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
46 là một phương thức tham chiếu hợp lệ, vì
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
34 là một hàm, nhưng
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
48 không phải, bởi vì
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
33 không phải. Nhưng
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
46 không phải là một thứ như
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
34 — nó là một method object [đối tượng phương thức], không phải là một đối tượng hàm

SIÊU SALE - SIÊU SALE

9. 3. 4 Đối tượng phương thức

Thông thường, một phương thức được gọi ngay sau khi nó bị buộc

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
63

Trong

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
44, nó sẽ trả về chuỗi
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
53. Tuy nhiên, cũng không nhất thiết phải gọi một phương thức ngay lập tức.
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
46 là một đối tượng phương thức, và có thể được cất đi và gọi vào một thời điểm khác. Ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
64

will continue in

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
55 mãi mãi
Chuyện gì thật sự xảy ra khi một phương thức được gọi? Bạn có thể đã nhận ra rằng
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
56 được gọi với không thông số, mặc dù định nghĩa hàm của
>>> width = 20
>>> height = 5*9
>>> width * height
900
43 chỉ định một thông số. Chuyện gì xảy ra với thông số đó? Python chắc chắn nâng một biệt lệ khi một hàm cần một thông số được gọi suông — cho dù thông số đó có được dùng hay không đi nữa…

SIÊU SALE - SIÊU SALE

Thật ra, bạn cũng có thể đã đoán ra được câu trả lời. điểm đặc biệt của phương thức là đối tượng đó được truyền vào ở thông số đầu tiên của hàm. Trong ví dụ của chúng ta, lời gọi

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
56 hoàn toàn tương đương với
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
59. Nói chung, gọi một hàm với một danh sách n thông số thì tương đương với việc gọi hàm tương ứng với một danh sách thông số được tạo ra bằng cách chèn đối tượng của phương thức vào trước thông số thứ nhất
[Hiểu đơn giản là
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
60 tương đương với
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
61 trong đó obj là đối tượng trường hợp của lớp
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
62,
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
63 là một thuộc tính hợp lệ không phải dữ liệu, tức là đối tượng hàm của lớp đó. ]

SIÊU SALE - SIÊU SALE

9. 4 Một vài lời bình

Thuộc tính dữ liệu sẽ che thuộc tính phương thức cùng tên; để tránh vô tình trùng lặp tên, mà có thể dẫn đến các lỗi rất khó tìm ra trong các chương trình lớn, bạn nên có một quy định đặt tên nào đó để giảm thiểu tỉ lệ trùng lặp. Các quy định khả thi có thể gồm viết hoa tên phương thức, đặt tiền tố vào các tên thuộc tính dữ liệu [ví dụ như dấu gạch dưới

 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
70], hoặc dùng động từ cho phương thức và danh từ cho các thuộc tính dữ liệu

SIÊU SALE - SIÊU SALE

Các thuộc tính dữ liệu có thể được tham chiếu tới bởi cả phương thức lẫn người dùng đối tượng đó. Nói một cách khác, lớp không thể được dùng để cài đặt các kiểu dữ liệu trừu tượng tuyệt đối. Trong thực tế, không có gì trong Python có thể ép việc che dấu dữ liệu — tất cả đều dựa trên nguyên tắc. [Mặt khác, cài đặt Python, được viết bằng C, có thể dấu các chi tiết cài đặt và điểu khiển truy cập vào một đối tượng nếu cần; điều này có thể được dùng trong các bộ mở rộng Python viết bằng C. ]

SIÊU SALE - SIÊU SALE

Người dùng nên dùng các thuộc tính dữ liệu một cách cẩn thận — người dùng có thể phá hỏng những bất biến [invariant] được giữ bởi các phương thức nếu cố ý sửa các thuộc tính dữ liệu. Lưu ý rằng người dùng có thể thêm các thuộc tính dữ liệu riêng của hộ vào đối tượng trường hợp mà không làm ảnh hưởng tính hợp lệ của các phương thức, miễn là không có trùng lặp tên — xin nhắc lại, một quy tắc đặt tên có thể giảm bớt sự đau đầu ở đây

SIÊU SALE - SIÊU SALE

Không có cách ngắn gọn để tham chiếu tới thuộc tính dữ liệu [hoặc các phương thức khác. ] từ trong phương thức. Điều này thật ra giúp chúng ta dễ đọc mã vì không có sự lẫn lộn giữa biến nội bộ và biến trường hợp

SIÊU SALE - SIÊU SALE

Thông số đầu tiên của phương thức thường được gọi là self. Đây cũng chỉ là một quy ước. tên

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
65 hoàn toàn không có ý nghĩa đặc biệt trong Python. [Tuy nhiên xin nhớ nếu bạn không theo quy ước thì mã của bạn sẽ có thể trở nên khó đọc đối với người khác, và có thể là trình duyệt lớp được viết dựa trên những quy ước như vậy. ]

SIÊU SALE - SIÊU SALE

Bất kỳ đối tượng hàm nào mà là thuộc tính của một lớp sẽ định nghĩa một phương thức cho các trường hợp của lớp đó. Không nhất thiết định nghĩa hàm phải nằm trong định nghĩa lớp trên văn bản. gán một đối tượng hàm vào một biến nội bộ trong lớp cũng được. Ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
65

Bây giờ

>>> width = 20
>>> height = 5*9
>>> width * height
900
43,
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
67 và
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
68 đều là thuộc tính của lớp
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
69 mà tham chiếu tới các đối tượng hàm, và do đó chúng đều là phương thức của các trường hợp của
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
69 —
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
68 hoàn toàn tương đương với
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
67. Chú ý rằng kiểu viết này thường chỉ làm người đọc càng thêm khó hiểu mà thôi
Phương thức có thể gọi phương thức khác thông qua thuộc tính phương thức của thông số
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
65

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
66

Phương thức có thể tham chiếu tới các tên toàn cục theo cùng một cách như các hàm thông thường. Phạm vi toàn cục của một phương thức là mô-đun chứa định nghĩa lớp. [Phạm vi toàn cục không bao giờ là lớp. ] Trong khi bạn ít gặp việc sử dụng dữ liệu toàn cục trong một phương thức, có những cách dùng hoàn toàn chính đáng. ví dụ như hàm và mô-đun được nhập vào phạm vi toàn cục có thể được sử dụng bởi phương thức, cũng như hàm và lớp được định nghĩa trong đó. Thông thường, lớp chứa các phương thức này được định nghĩa ngay trong phạm vi toàn cục, và trong phần kế đây chúng ta sẽ thấy tại sao một phương thức muốn tham chiếu tới chính lớp của nó

SIÊU SALE - SIÊU SALE

9. 5 Kế thừa

Dĩ nhiên, một tính năng ngôn ngữ sẽ không đáng được gọi là “lớp” nếu nó không hỗ trợ kế thừa. Cú pháp của một định nghĩa lớp con như sau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
67

Tên

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
74 phải đã được định nghĩa trong một phạm vi chứa định nghĩa lớp con. Thay vì tên lớp cơ sở, các biểu thức khác cũng được cho phép. Điều này rất hữu ích, ví dụ, khi mà lớp cơ sở được định nghĩa trong một mô-đun khác

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
68

Việc thực thi định nghĩa lớp con tiến hành như là lớp cơ sở. Khi một lớp đối tượng được tạo ra, lớp cơ sở sẽ được ghi nhớ. Nó được dùng trong việc giải các tham chiếu thuộc tính. nếu một thuộc tính không được tìm thấy ở trong lớp, việc tìm kiếm sẽ tiếp tục ở lớp cơ sở. Luật này sẽ được lặp lại nếu lớp cơ sở kế thừa từ một lớp khác

SIÊU SALE - SIÊU SALE

Không có gì đặc biệt trong việc tạo trường hợp của các lớp con.

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
75 tạo một trường hợp của lớp. Các tham chiếu hàm được giải như sau. thuộc tính lớp tương ứng sẽ được tìm, đi xuống chuỗi các lớp cơ sở nếu cần, và tham chiếu phương thức là hợp lệ nếu tìm thấy một đối tượng hàm

SIÊU SALE - SIÊU SALE

Lớp con có thể định nghĩa lại các phương thức của lớp cơ sở. Bởi vì phương thức không có quyền gì đặc biệt khi gọi một phương thức của cùng một đối tượng, một phương thức của lớp cơ sở gọi một phương thức khác được định nghĩa trong cùng lớp cơ sở có thể là đang gọi một phương thức do lớp con đã định nghĩa lại. [Người dùng C++ có thể hiểu là mọi phương thức của Python là virtual. ]
Một phương thức được định nghĩa lại trong lớp con có thể muốn mở rộng thay vì thay thế phương thức cùng tên của lớp cơ sở. Có một cách đơn giản để gọi phương thức của lớp sơ sở. chỉ việc gọi “

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
76“. Đôi khi điều này cũng có ích cho người dùng. [Lưu ý rằng đoạn mã chỉ hoạt động nếu lớp cơ sở được định nghĩa hoặc nhập trực tiếp vào phạm vi toàn cục. ]

SIÊU SALE - SIÊU SALE

9. 5. 1 Đa kế thừa

Python cũng hỗ trợ một dạng đa kế thừa hạn chế. Một định nghĩa lớp với nhiều lớp cơ sở có dạng sau

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
69

Luật duy nhất cần để giải thích ý nghĩa là luật giải các tham chiếu thuộc tính của lớp. Nó tuân theo luật tìm theo chiều sâu và tìm trái qua phải. Do đó, nếu một thuộc tính không được tìm ra trong

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
77, nó sẽ được tìm trong
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
78, rồi [đệ quy] trong các lớp cơ sở của
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
78, rồi chỉ khi nó không được tìm thấy, nó sẽ được tìm trong
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
80, và cứ như vậy
[ Đối với một số người đang tìm kiếm theo chiều rộng — tìm thấy
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
80 và
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
82 trước các lớp cơ sở của
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
78 — có vẻ tự nhiên hơn. Nhưng, điều này yêu cầu bạn biết một thuộc tính nào đó của
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
78 được thật sự định nghĩa trong
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
78 hay trong một trong các lớp cơ sở của nó trước khi bạn có thể biết được hậu quả của sự trùng lặp tên với một thuộc tính của
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
80. Luật tìm theo chiều sâu không phân biệt giữa thuộc tính trực tiếp hay kế thừa của
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
78. ]

SIÊU SALE - SIÊU SALE

Ai cũng biết rằng việc dùng đa kế thừa bừa bãi là một cơn ác mộng cho bảo trì, đặc biệt là Python dựa vào quy ước để tránh trùng lặp tên. Một vấn đề cơ bản với đa kế thừa là một lớp con của hai lớp mà có cùng một lớp cơ sở. Mặc dù dễ hiểu chuyện gì xảy ra trong vấn đề này [trường hợp sẽ có một bản chép duy nhất của “các biến trường hợp” của các thuộc tính dữ liệu dùng bởi lớp cơ sở chung], nó không rõ cho lắm nếu các ý nghĩa này thật sự hữu ích

SIÊU SALE - SIÊU SALE

9. 6 Biến riêng

Có một dạng hỗ trợ nho nhỏ nho các từ định danh riêng của lớp [class-private identifier]. Các từ định danh có dạng

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
88 [ít nhất hai dấu gạch dưới ở đầu, nhiều nhất một dấu dạch dưới ở cuối] được thay thế văn bản [textually replace] bằng
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
89, trong đó
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
90 là tên lớp hiện tại với các gạch dưới ở đầu cắt bỏ. Việc xáo trộn tên [mangling] được thực hiện mà không quan tâm tới vị trí cú pháp của định danh, cho nên nó có thể được dùng để định nghĩa các trường hợp, biến, phương thức, riêng của lớp, hoặc các biến toàn cục, và ngay cả các biến của trường hợp, riêng với lớp này trên những trường hợp của lớp khác. Nếu tên bị xáo trộn dài hơn 255 ký tự thì nó sẽ bị cắt đi. Bên ngoài lớp, hoặc khi tên lớp chỉ có ký tự gạch dưới, việc xáo trộn tên sẽ không xảy ra

SIÊU SALE - SIÊU SALE

Xáo trộn tên nhằm cung cấp cho các lớp một cách định nghĩa dễ dàng các biến và phương thức “riêng”, mà không phải lo về các biến trường hợp được định nghĩa bởi lớp con, hoặc việc sử dụng biến trường hợp bởi mã bên ngoài lớp. Lưu ý rằng việc xáo trộn tên được thiết kế chủ yếu để tránh trùng lặp; người quyết tâm vẫn có thể truy cập hoặc thay đổi biến riêng. Và điều này cũng có thể có ích trong các trường hợp đặc biệt, như trong trình gỡ rối, và đó là một lý do tại sao lỗ hổng này vẫn chưa được vá
Lưu ý rằng mã truyền vào

>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
91,
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
92 hoặc
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
93 không nhận tên lớp của lớp gọi là tên lớp hiện tại; điều này cũng giống như tác dụng của câu lệnh
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
94, tác dụng của nó cũng bị giới hạn ở mã được biên dịch cùng. Cùng giới hạn này cũng được áp dụng vào
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
95,
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
96 và
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
97, khi tham chiếu
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
98 trực tiếp

SIÊU SALE - SIÊU SALE

9. 7 Những điều khác

Đôi khi nó thật là hữu ích khi có một kiểu dữ liệu giống như Pascal “record” hoặc C “struct”, gói gọn vài mẩu dữ liệu vào chung với nhau. Một định nghĩa lớp rỗng thực hiện được việc này

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
70

Với mã Python cần một kiểu dữ liệu trừu tượng, ta có thể thay vào đó một lớp giả lập các phương thức của kiểu dữ liệu đó. Ví dụ, nếu bạn có một hàm định dạng một vài dữ liệu trong một đối tượng tập tin, bạn có thể định nghĩa một lớp với các phương thức

>>> width = 20
>>> height = 5*9
>>> width * height
900
38 và
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
00 lấy dữ liệu từ một chuỗi, và truyền vào nó một thông số

SIÊU SALE - SIÊU SALE

Các đối tượng phương trức trường hợp cũng có thuộc tính.

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
01 là một đối tượng trường hợp với phương thức
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
02, và
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
03 là đối tượng hàm tương ứng với phương thức

SIÊU SALE - SIÊU SALE

9. 8 Biệt lệ cũng là lớp

Các biệt lệ được định nghĩa bởi người dùng cũng được định danh theo lớp. Bằng cách này, một hệ thống phân cấp biệt lệ có thể được tạo ra
Có hai dạng lệnh

>>> width = 20
>>> height = 5*9
>>> width * height
900
86 mới

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
71

Trong dạng đầu,

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
05 phải là một trường hợp của kiểu
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
62 hoặc là lớp con của nó. Dạng thứ hai là rút gọn của

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
72

Lớp trong vế

>>> width = 20
>>> height = 5*9
>>> width * height
900
54 tương thích với một biệt lệ nếu nó cùng lớp, hoặc là một lớp cơ sở [nhưng chiều ngược lại thì không đúng — một vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
54 dùng lớp con sẽ không tương thích với một biệt lệ lớp cơ sở]. Ví dụ, đoạn mã sau sẽ in
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
17,
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
69,
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
11 theo thứ tự đó

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
73

Nếu các vế

>>> width = 20
>>> height = 5*9
>>> width * height
900
54 được đặt ngược [với “
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
13” ở đầu], nó sẽ in
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
17,
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
17,
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
17 — vế
>>> width = 20
>>> height = 5*9
>>> width * height
900
54 phù hợp đầu tiên được thực thi
Khi một thông điệp lỗi được in, tên lớp của biệt lệ được in, theo sau bởi dấu hai chấm và một khoảng trắng, và cuối cùng là trường hợp đã được chuyển thành chuỗi bằng hàm có sẵn
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
96

SIÊU SALE - SIÊU SALE

9. 9 Bộ lặp

Bây giờ có lẽ bạn đã lưu ý rằng hầu hết các đối tượng chứa [container object] có thể được lặp qua bằng câu lệnh

import os
filename = os.environ.get['PYTHONSTARTUP']
if filename and os.path.isfile[filename]:
    execfile[filename]
19

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
74

Kiểu truy xuất này rõ ràng, súc tích, và tiện lợi. Bộ lặp [

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
20] được dùng khắp nơi và hợp nhất Python. Đằng sau màn nhung, câu lệnh for gọi
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
21 trên đối tượng chứa. Hàm này trả về một đối tượng bộ lặp có định nghĩa phương thức
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
22 để truy xuất và các phần tử trong bộ chứa [container]. Khi không còn phần tử nào,
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
22 nâng biệt lệ
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
24 để yêu cầu vòng lặp for kết thúc. Ví dụ sau cho thấy cách hoạt động

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
75

Chúng ta đã hiểu giao thức bộ lặp, nên chúng ta có thể thêm cách thức bộ lặp [iterator behavior] vào lớp của chúng ta một cách dễ dàng. Định nghĩa một phương thức

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
25 trả về một đối tượng với một phương thức
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
22. Nếu lớp có định nghĩa
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
22, thì 
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
25 chỉ cần trả về
>>> x = y = z = 0  # Zero x, y and z
>>> x
0
>>> y
0
>>> z
0
65

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
76

9. 10 Bộ tạo

Bộ sinh [

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
30] là một công cụ đơn giản và mạnh mẽ để tạo các bộ lặp. Chúng được viết như những hàm thông thường nhưng dùng câu lệnh
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
31 khi nào chúng muốn trả về dữ liệu. Mỗi lần
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
22 được gọi, bộ sinh trở lại nơi nó đã thoát ra [nó nhớ mọi dữ liệu và câu lệnh đã được thực thi lần cuối]. Một ví dụ cho thấy bộ sinh có thể được tạo ra rất dễ dàng

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
77

Bất kỳ việc gì có thể được thực hiện với bộ sinh cũng có thể được thực hiện với các bộ lặp dựa trên lớp như đã bàn đến ở phần trước. Điều khiến bộ sinh nhỏ gọn là các phương thức

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
25 và
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
22 được tự động tạo ra
Một tính năng chính khác là các biến nội bộ và trạng thái thực thi được tự động lưu giữa các lần gọi. Điều này làm cho hàm dễ viết hơn và rõ ràng hơn là cách sử dụng biến trường hợp như
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
35 và
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
36
Thêm vào việc tự động tạo và lưu trạng thái chương trình, khi các bộ tạo kết thúc, chúng tự động nâng
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
24. Cộng lại, các tính năng này làm cho việc tạo các bộ lặp không có gì khó hơn là viết một hàm bình thường

SIÊU SALE - SIÊU SALE

9. 11 Biểu thức bộ tạo

Một vài bộ sinh đơn giản có thể được viết một cách xúc tích như các biểu thức bằng cách dùng một cú pháp giống như gộp danh sách [list comprehension] nhưng với ngoặc tròn thay vì ngoặc vuông. Các biểu thức này được thiết kế cho những khi bộ sinh được sử dụng ngay lập tức bởi hàm chứa nó. Biểu thức bộ sinh gọn hơn nhưng ít khả chuyển hơn là các định nghĩa bộ sinh đầy đủ và thường chiếm ít bộ nhớ hơn là gộp danh sách tương đương
Ví dụ

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
78

10. Giới thiệu sơ về bộ thư viện chuẩn

10. 1 Giao tiếp với hệ thống

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
38 [mô-đun] cung cấp hàng loạt các hàm dùng cho việc giao tiếp với hệ điều hành

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
79

Nhớ dùng kiểu lệnh

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
39 thay vì
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
40. Điều này khiến cho
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
41 không che hàm
>>> width = 20
>>> height = 5*9
>>> width * height
900
05 sẵn có của Python. Hai hàm này hoạt động khác nhau rất nhiều
Các hàm sẵn có
>>> 2+2
4
>>> # This is a comment
.. 2+2
4
>>> 2+2  # and a comment on the same line as code
4
>>> [50-5*6]/4
5
>>> # Integer division returns the floor:
.. 7/3
2
>>> 7/-3
-3
12 và
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
44 là các công cụ trợ giúp tương tác hữu ích khi làm việc với các mô-đun lớn như
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
38

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
80

Đối với các công việc quản lý file và thư mục thông thường, mô-đun

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
46 cung cấp một giao diện mức cao hơn và dễ dùng hơn

SIÊU BÁN - SIÊU BÁN
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
81

10. 2 Ký tự thay thế tập tin

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
47 [mô-đun] cũng hỗ trợ việc tạo danh sách các tập tin từ việc tìm kiếm thư mục dùng ký tự thay thế [wildcard]

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
82

10. 3 Thông số dòng lệnh

Các kịch bản phổ dụng thường phải xử lý các tham số dòng lệnh. Các tham số này được lưu thành một danh sách ở mô-đun sys trong thuộc tính

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
48. Ví dụ, kết quả sau đây thu được từ việc chạy lệnh
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
49 từ dòng lệnh

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
83

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
50 [mô-đun] xử lý
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
31 theo các nguyên tắc của hàm Unix
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
52. Nếu cần các thao tác linh hoạt và hữu hiệu hơn, chúng ta có thể dùng mô-đun
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
53

SIÊU SALE - SIÊU SALE

10. 4 Chuyển hướng luồng ra và kết thúc chương trình

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
54[mô-đun] cũng có các thuộc tính cho
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
55,
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
56, và
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
57. Cái cuối rất hữu dụng trong việc sinh ra các cảnh báo và thông báo lỗi và việc hiển thị chúng ngay cả khi
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
56 đã được định hướng lại

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
84

Cách thoát khỏi một kịch bản một cách trực tiếp nhất là dùng

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
59

SIÊU SALE - SIÊU SALE

10. 5 Khớp mẫu chuỗi

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
60[mô-đun] cung cấp các công cụ biểu thức chính quy dùng cho việc xử lý chuỗi ở mức cao. Biểu thức chính quy cung cấp các phương án súc tích và tối ưu cho các thao tác tìm kiếm và xử lý chuỗi phức tạp

SIÊU BÁN - SIÊU BÁN
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
85

Đối với các chức năng xử lý chuỗi cơ bản thì các phương thức của đối tượng chuỗi được ưa chuộng hơn bởi chúng dễ đọc và dễ gỡ rối hơn

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
86

10. 6 Toán học

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
61 [mô-đun] cung cấp các hàm xử lý về toán dấu chấm động của thư viện C mức dưới

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
87

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
62 [mô-đun] hỗ trợ việc tạo ra các lựa chọn ngẫu nhiên

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
88

10. 7 Truy cập internet

Python cung cấp một vài mô-đun khác nhau cho việc truy cập internet và xử lý các giao thức internet. Hai mô-đun đơn giản nhất là

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
63 dành cho việc thu thập dữ liệu từ các URL và
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
64 dành cho việc gửi thư điện tử

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
89

10. 8 Ngày và giờ

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
65 [mô-đun] cung cấp các lớp dành cho viêc xử lý ngày tháng và thời gian từ đơn giản tới phức tạp. Mô-đun này có hỗ trợ các phép toán về ngày tháng, tuy nhiên nó chú trọng tới việc truy cập các thành phần ngày tháng một cách hiệu quả giúp cho việc định dạng chúng. Mô-đun này cũng hỗ trợ các đối tượng có thể phân biệt được các vùng thời gian

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
90

10. 9 Nén dữ liệu

Python cung cấp một số mô-đun hỗ trợ trực tiếp các định dạng nén và lưu trữ dữ liệu phổ biến như. zlib, gzip, bz2, zipfile, và tarfile

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
91

10. 10 Đo lường hiệu suất

Một vài người dùng Python rất quan tâm đến việc tìm hiểu sự khác bệt về hiệu năng giữa các phương án khác nhau của cùng một vấn đề. Python cung cấp một công cụ đo đạc để thỏa mãn nhu cầu này
Ví dụ, chúng ta thường muốn sử dụng tính năng gói bộ và mở gói bộ thay cho phương pháp thông thường trong việc hoán đổi tham số. Mô-đun timeit cho thấy phương pháp này có hiệu năng nhỉnh hơn phương pháp thông thường

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
92

So sánh với độ phân biệt về thời gian và sự chính xác cao của

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
66, các mô-đun profile và pstats cung cấp các công cụ cho việc xác định các đoạn mã tiêu tốn nhiều thời gian trong các khối mã lớn hơn

SIÊU SALE - SIÊU SALE

10. 11 Quản lý chất lượng

Một phương pháp để phát triển phần mềm chất lượng cao là viết các hàm kiểm tra cho từng hàm khi viết các hàm và chạy các hàm kiểm tra một cách thường xuyên trong quá trình phát triển phần mềm
doctest [mô-đun] cung cấp công cụ cho việc rà soát một mô-đun và thẩm định các hàm kiểm tra nhúng trong tài liệu của chương trình. Việc xây dựng đoạn kiểm tra được thực hiện đơn giản bằng cách cắt và dán đoạn gọi hàm thông thường kèm theo kết quả của hàm đó vào tài liệu chương trình. Việc này cải thiện đáng kể tài liệu chương trình bởi nó cung cấp cho người dùng một ví dụ về việc sử dụng hàm và cho phép mô-đun doctest kiểm tra tính đúng đắn của hàm này so với tài liệu

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
93

unittest [mô-đun] không dễ dùng như mô-đun doctest, nhưng nó hỗ trợ các hàm kiểm tra toàn diện hơn và lưu giữ chúng trong một tập tin riêng biệt

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
94

10. 12 Kèm cả pin

Python được gắn với ý tưởng “kèm pin”. Điều này được thể hiện bởi các tính năng mạnh mẽ và đa dạng của các gói lớn hơn của nó. Ví dụ như

SIÊU SALE - SIÊU SALE
  • xmlrpclib và SimpleXMLRPCServer [mô-đun] giúp cho việc cài đặt các lệnh gọi thủ tục từ xa [remote procedure call] trở nên dễ dàng hơn bao giờ hết. Khác với cái tên, chúng ta có thể sử dụng mô-đun này mà không cần các kiến thức cụ thể về xử lý XML
  • email [gói] là một thư viện hỗ trợ việc quản lý các thư điện tử, bao gồm các văn bản MIME và các văn bản dựa trên RFC 2822 khác. Không trực tiếp gửi và nhận thông điệp như smtplib và poplib, gói email có một tập các công cụ dành cho việc xây dựng và mã hóa các cấu trúc thông điệp phức tạp [bao gồm cả tập tin đính kèm] và cài đặt mã hóa internet và giao thức tiêu đề
  • dom và xml. sax [gói] hỗ trợ rất tốt cho việc phân tích định dạng phổ biến này. Tương tự, mô-đun csv Hỗ trợ việc đọc ghi trực tiếp trên một định dạng văn bản chung. Kết hợp lại, các mô-đun và gói kể trên đơn giản hóa rất nhiều việc trao đổi dữ liệu giữa các trình ứng dụng của python và các chương trình khác
  • Việc hỗ trợ quốc tế hóa được thực hiện bởi một vài mô-đun, bao gồm gettext, locale, và gói codecs

11. Giới thiệu sơ về bộ thư viện chuẩn – Phần II

Bài giới thiệu thứ hai này nói về các mô-đun chuyên sâu nhằm đáp ứng các tác vụ lập trình chuyên nghiệp. Các mô-đun này ít khi xuất hiện ở các kịch bản nhỏ

SIÊU SALE - SIÊU SALE

11. 1 Định dạng ra

repr [mô-đun]cung cấp một phiên bản repr[] đã được tùy biến để hiển thị vắn tắt các đối tượng chứa [container] lớn hoặc lồng nhau nhiều mức

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
95

pprint [mô-đun] hỗ trợ việc kiểm soát việc in các đối tượng sẵn có hoặc các đối tượng do người dùng định nghĩa một cách tinh vi hơn theo một phương thúc mà rình thông dịch có thể hiểu được. Khi kết quả hiển thị ngắn hơn một dòng thì “pretty printer” sẽ thêm các dấu xuống dòng và dấu thụt vào đầu dòng khiến cho cấu trúc dữ liệu được thể hiện rõ rệt hơn

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
96

textwrap [mô-đun] định dạng đoạn văn bản sao cho vừa với độ rộng của màn hình

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
97

locale [mô-đun] sử dụng một cơ sở dữ liệu các định dạng dữ liệu dựa trên đặc điểm của từng khu vực. Hàm định dạng của locale có thuộc tính tạo nhóm, cho phép định dạng trực tiếp các con số với các dấu phân chia nhóm

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
98

11. 2 Tạo mẫu

string [mô-đun] cung cấp một lớp Template với một cú pháp đơn giản, có thể dễ dàng thay đổi bởi người dùng. Điều này cho phép người dùng có thể tùy biến trình ứng dụng mà không phải thay đổi nó
Định dạng này sử dụng các tên biến giữ chỗ bắt đầu với “

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
67” sau đó là một tên biến hợp lệ của Python [chữ cái, chữ số và dấu gạch dưới]. Tên giữ chỗ được đặt trong ngoặc, điều này khiến nó có thể được nối tiếp bởi các ký tự khác mà không cần có khoảng trống ở giữa. Viết “
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
68” sẽ tạo ra một ký tự thoát đơn “
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
67“

SIÊU SALE - SIÊU SALE
>>> the_world_is_flat = 1
>>> if the_world_is_flat:
...     print "Be careful not to fall off!"
...
Be careful not to fall off!
99

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
70 [phương thức] nâng KeyError nếu biến giữ chỗ không được cung cấp bởi một từ điển hay một tham số nhập từ bàn phím. Đối với các trình ứng dụng kiểu nhập liệu vào thư điện tử, dữ liệu nhập bởi người dùng có thể có thiếu sót, khi đó phương thức
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
71 sẽ thích hợp hơn — nó giữ nguyên các biến giữ chỗ nếu dữ liệu bị thiếu

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
00

Các lớp con của Template có thể định nghĩa một phần tử phân chia tùy biến. Ví dụ một ứng dụng đổi tên ảnh hàng loạt của một trình duyệt ảnh có thể sử dụng dấu phần trăm để làm các biến giữ chỗ ngày tháng, số thứ tự ảnh, hay định dạng ảnh

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
01

Một ứng dụng khác của tạo mẫu là việc tách biệt lô-gíc chương trình ra khỏi các chi tiết về các định dạng đầu ra khác nhau. Điều này giúp cho việc thay thế các khuôn mẫu tùy biến cho các tập tin XML, các báo cáo bằng văn bản thông thường và các báo cáo bằng HTML

SIÊU SALE - SIÊU SALE

11. 3 Làm việc với bản ghi dữ liệu nhị phân

struct [mô-đun] cung cấp các hàm

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
72 và
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
73 để dùng với các định dạng bản ghi nhị phân với chiều dài không cố định. Ví dụ sau đây minh họa phương pháp lặp qua các thông tin trong phần tiêu đề của một tập tin ZIP [ký hiệu “H” và “L” biểu diễn các số không dấu hai byte và bốn byte]

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
02

11. 4 Đa luồng

Phân luồng là kỹ thuật phân tách các tác vụ khác nhau của một chương trình khi chúng không bị ràng buộc trật tự với nhau. Các luồng được sử dụng để tăng tính toán trả lời ứng dụng của các chương trình ứng dụng yêu cầu việc nhập dữ liệu từ người dùng diễn ra cùng lúc với các trình nền khác nhau. Một trường hợp tương tự là việc chạy các tác vụ vào ra song song với các tác vụ tính toán ở một luồng khác
Đoạn mã sau đây minh họa cách mô-đun threading chạy các tác vụ nền trong khi chương trình chính vẫn đang chạy

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
03

Khó khăn lớn nhất của các chương trình ứng dụng đa luồng là việc điều phối các luồng phải chia sẻ dữ liệu hay các tài nguyên khác. Về mặt này, mô-đun

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
74 hỗ trợ một số hàm đồng bộ sơ cấp như các khóa [lock], các sự kiện [event], các biến điều kiện [condition] và các cờ hiệu [semaphore]
Mặc dù các công cụ kể trên rất mạnh, nhung những lỗi thiết kế nhỏ có thể dẫn tới các vấn đề rất khó có thể tái tạo được. Do đó, phương pháp được ưa chuộng trong việc điều phối các tác vụ là tập hợp các truy cập tới một tài nguyên vào một luồng, sau đó sử dụng mô-đun Queue để nạp các yêu cầu từ các luồng khác tới luồng đó. Các trình ứng dụng sử dụng đối tượng Queue cho việc giao tiếp và điều phối giữa các luồng có ưu điểm là dễ thiết kể hơn, dễ đọc hơn và đáng tin cậy hơn

SIÊU SALE - SIÊU SALE

11. 5 Nhật ký

logging [mô-đun] cung cấp một hệ thống ghi nhật ký [logging] linh hoạt và có đầy đủ các tính năng. Trong trường hợp đơn giản nhất, một thông điệp nhật ký được gửi tới một tập tin hay tới sys. stderr

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
04

Đoạn mã trên sẽ cho kết quả sau

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
05

Theo mặc định, các thông điệp chứa thông tin dành cho việc gỡ rối bị chặn lại và đầu ra được gửi tới kênh báo lỗi chuẩn. Các thông điệp này còn có thể được chuyển tiếp tới thư điện tử, gói tin, socket hay máy chủ HTTP. Các bộ lọc có thể chọn các cơ chế chuyển tiếp tùy theo mức độ ưu tiên của thông điệp. DEBUG, INFO, WARNING, ERROR, và CRITICAL
Hệ thống nhật ký có thể được cấu hình trực tiếp bên trong Python hoặc nạp từ một tập tin cấu hình mà người dùng có thể sửa đổi được, nhằm tùy biến việc ghi nhật ký mà không phải sửa đổi trình ứng dụng

SIÊU SALE - SIÊU SALE

11. 6 Tham chiếu yếu

Python hỗ trợ việc quản lý bộ nhớ một cách tự động [bao gồm việc đếm tham chiếu với hầu hết các đối tượng và việc thu dọn rác]. Vùng nhớ được giải phóng nhanh chóng sau khi tham chiếu cuối cùng đến nó kết thúc
Phương pháp này tỏ ra hiệu quả với hầu hết các ứng dụng ứng dụng sử dụng Python, tuy nhiên đôi khi ta có nhu cầu theo dõi một đối tượng nào đó mà chúng được sử dụng ở một nơi khác. Tuy vậy việc theo dõi này lại tạo ra một tham chiếu đến đối tượng đó, khiến bản thân nó trở thành một tham chiếu vĩnh viễn. Mô-đun weakref cho phép theo dỗi một đối tượng mà không cần phải tạo một tham chiếu tới đối tượng đó. Khi đối tượng không còn cần dùng nữa, nó sẽ tự động bị loại ra khỏi bảng tham chiếu yếu và một hàm gọi ngược [callback] sẽ được gọi tới đối tượng weakref. Các ứng dụng phổ biến có chứa các đối tượng được lưu tạm và đòi hỏi chi phí khởi tạo cao

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
06

11. 7 Công cụ làm việc với danh sách

Kiểu danh sách sẵn có của Python có thể đáp ứng được nhu cầu về nhiều kiểu cấu trúc dữ liệu khác nhau. Tuy vậy chúng ta đôi khi cần tới các kiểu cấu trúc khác, tùy thuộc vào các mục tiêu cụ thể về hiệu năng
array [mô-đun] cung cấp đối tượng array[] giống như một danh sách chứa các dữ liệu cùng kiểu và lưu giữ chúng gọn hơn. Ví dụ sau cho thấy một mảng các con số được lưu giữ dưới dạng các số không dấu hai byte [mã “H”] thay vì mỗi phần tử chiếm 16 byte như trong một danh sách thông thường chứa các đối tượng số nguyên của Python

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
07

collections [mô-đun] cung cấp đối tượng deque[] giống như một danh sách nhưng có các thao tác thêm vào và lấy ra đầu bên trái nhanh hơn, nhưng việc tìm kiếm ở giữa thì lại chậm hơn. Các đối tượng này thích hợp cho việc cài đặt các hàng đợi và tìm kiếm cây theo chiều rộng

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
08

Ngoài các cấu trúc thay thế cho danh sách, thư viện chuẩn còn cung cấp các công cụ như mô-đun bisect chứa các hàm thao tác trên danh sách đã được sắp xếp

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
09

heapq [mô-đun] cung cấp các hàm để cài đặt đống [heap] dựa trên các danh sách thông thường. Phần tử có giá trị thấp nhất luôn được giữ ở vị trí đầu tiên. Hàm này rất có ích trong các trình ứng dụng đòi hỏi việc truy cập tới phần tử nhỏ nhất mà không cần phải sắp xếp lại toàn bộ danh sách

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
10

11. 8 Số học dấu chấm động thập phân

decimal [mô-đun] cung cấp kiểu dữ liệu

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
75 cho các phép toán dấu chấm động hệ thập phân. So với cấu trúc dấu chấm động nhị phân float sẵn có của Python, lớp này rất có ích trong các trình ứng dụng về tài chính và các công việc đòi hỏi việc biểu diễn chính xác các số thập phân, kiểm soát mức độ chính xác cũng như việc làm tròn các con số theo các quy định đề ra, theo dõi vị trí của dấu chấm động hay trong các trình ứng dụng mà người sử dụng mong muốn thu được kết quả khớp với kết quả tính toán bằng tay
Ví dụ như, việc tính 5% thuế trên một cuộc gọi điện giá 70 cent sẽ cho kết quả khác nhau nếu sử dụng các phép toán dấy chấm động hệ thập phân và nhị phân. Sự khác biệt trở nên rõ rệt nếu kết quả được làm tròn tới cent

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
11

>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
75 giữ một số không ở vị trí cuối cùng, nó tự động quy kết quả kiểu có bốn chữ số sau dấu chấm nếu các thừa số của phép nhân có hai chữ số sau dấu chấm.
>>> 3 * 3.75 / 1.5
7.5
>>> 7.0 / 2
3.5
75 thực hiện các phép toán tương tự như cách chúng được tính bằng tay, nhờ đó tránh được các vấn đề gặp phải khi dấu chấm động hệ thống nhị phân không thể biểu thị chính xác các giá trị thập phân
Việc biểu diễn chính xác các con số giúp cho lớp Decimal có thể thực hiện được các phép tính modulo và các so sánh bằng, điều mà dấu chấm động hệ nhị phân không làm được

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
12

decimal [mô-đun] cung cấp các phép toán với độ chính xác cao, tùy thuộc vào đòi hỏi của người dùng

SIÊU SALE - SIÊU SALE
 # -*- coding: iso-8859-15 -*-

 currency = u"€"

 print ord[currency]
13

12. Tiếp theo?

Đọc xong bài chỉ dẫn này có lẽ đã làm tăng thêm sự thích thú của bạn với ngôn ngữ Python — và bạn cũng muốn nhanh chóng áp dụng Python để giải quyết các vấn đề trong đời sống. Thế bây giờ bạn nên học tiếp từ đâu?
Bài chỉ dẫn này là một phần của bộ tài liệu của Python. Những tài liệu khác trong bộ này gồm

SIÊU SALE - SIÊU SALE
  • Tham khảo thư viện Python

Bạn nên duyệt qua cẩm nang này vì nó cung cấp tài liệu tham khảo đầy đủ [dù là ngắn gọn] về các kiểu, hàm, và các mô-đun trong bộ thư viện chuẩn. Bộ phân phối Python chuẩn có rất nhiều mã bổ sung. Có những mô-đun để đọc hộp thư Unix, lấy tài liệu từ HTTP, sinh số ngẫu nhiên, phân tích thông số dòng lệnh, viết các ứng dụng CGI, nén dữ liệu, và rất nhiều tác vụ khác. Lướt qua Tham khảo thư viện sẽ cho bạn biết những gì đang có

SIÊU SALE - SIÊU SALE
  • Cài đặt các mô-đun Python giải thích làm thế nào để cài các mô-đun ngoài được viết bởi các người dùng Python khác
  • Tham khảo ngôn ngữ. Một tài liệu chi tiết về cú pháp và ngữ nghĩa của Python. Khó đọc, nhưng rất hữu dụng vì nó là hướng dẫn đầy đủ của chính ngôn ngữ

Các tài nguyên Python khác

SIÊU SALE - SIÊU SALE
  • http. //www. python. org. Trang mạng Python chính. Nó có mã, tài liệu, và chỉ dẫn tới các trang liên quan tới Python trên mạng. Trang này được chép ra ở khắp nơi trên thế giới như Châu Âu, Nhật, và Úc; các bản sao có thể nhanh hơn là trang chính, tùy thuộc vào vị trí địa lý của bạn
  • http. //docs. python. org. Truy cập nhanh tới tài liệu Python
  • http. //cheeseshop. python. org. Chỉ mục gói Python [Python Package Index], tên lóng là Cửa hàng Phô-mai [Cheese Shop], là một chỉ mục của các mô-đun Python do người dùng tạo để tải về. Một khi bạn bắt đầu tung mã của bạn ra ngoài, bạn có thể đăng ký nó ở đây để người khác có thể tìm thấy nó
  • http. //aspn. activestate. com/ASPN/Python/Cookbook/. Sách dạy nấu ăn Python [Python Cookbook] là một tập hợp lớn các mã mẫu, các mô-đun lớn hơn, và các kịch bản hữu dụng. Các đóng góp quan trọng được thu thập vào một quyển sách tên là Python Cookbook [O’Reilly & Associates, ISBN 0-596-00797-3. ]

Để hỏi các câu hỏi liên quan tới Python và thông báo lỗi, bạn có thể gửi với nhóm tin comp. lang. python, hoặc gửi chúng tới danh sách thư tín python-list@python. org. Nhóm tin và danh sách thư tín được nối chung với nhau, nên các tin gửi ở nơi này sẽ tự động có mặt ở nơi kia. Có khoảng 120 bài gửi một ngày [cao nhất là vài trăm], hỏi [và trả lời] câu hỏi, đề xuất các tính năng mới, và thông báo các mô-đun mới. Trước khi gửi, hãy nhớ xem qua danh sách Các câu hỏi thường hỏi [Frequently Asked Question] [còn được gọi là FAQ], hoặc xem qua thư mục Misc/ của bản phân phối nguồn Python. Kho lưu trữ nhóm tin có ở http. //mail. python. tổ chức/đường ống/. FAQ trả lời nhiều câu hỏi hay gặp thường xuyên, và có thể câu hỏi của bạn cũng có ở trong này

Chủ Đề