Học Python/Chương II
Đi vào Python
sửaPython hầu như chắc chắn không tạo ra sự cảm hứng nhất định đến bạn. Đừng lo lắng về điều đó, bởi vì bạn sẽ phải phân tích nó, nghiên cứu thông qua nó trước và thấy gì, bạn có thể hiểu được nó.
- Ví dụ:odbchelper.py
Nếu bạn chưa sản sàng để làm, bạn có thể tham khảo ví dụ dưới đây:
def buildConnectionString(params): """Build a connection string from a dictionary of parameters. Returns string.""" return ";".join(["%s=%s" % (k, v) for k, v in params.items()]) if __name__ == "__main__": myParams = {"server":"mpilgrim", \ "database":"master", \ "uid":"sa", \ "pwd":"secret" \ } print buildConnectionString(myParams)
Bây giờ chạy chương trình bạn sẽ thấy điều gì.
Trong UNIX(bao gồm Mac OS X), bạn có thể chạy chương trình python từ command line:
#python odbchelper.py
odbchelper.py sẽ in ra màn hình như sau:
server=mpilgrim;uid=sa;database=master;pwd=secret
Khai báo hàm
sửaPython có các hàm như những ngôn ngữ khác, nhưng nó không có các gói file riêng biệt như C++ hoặc các đoạn interface/implementation như Pascal. Khi bạn cần một hàm, chỉ việc khai báo nó, như thế này:
def buildConnectionString(params):
Chú ý rằng khi đánh def bắt đầu khai báo một hàm, được theo tên hàm, theo những gì được gán trong dấu ngoặc đơn.
Cũng chú ý rằng hàm không định nghĩa một kiểu dữ liệu trả về. Hàm của Python không định rõ kiểu dữ liệu của những giá trị trả về, chúng cũng không định rõ một giá trị được trả về hay không. Trong thực tế, những hàm python trả về một giá trị, nếu hàm có chỉ ra thực hiện những chỉ dẫn một thông báo trả về, nó sẽ trả về giá trị đó, nếu không thì nó sẽ trả về một giá trị rỗng.
Làm thế nào để so sánh kiểu dữ liệu của python và các ngôn ngữ lập trình khác
sửa- Kiểu ngôn ngữ tĩnh
Nó không tự hình thành cho mình một xử lý chuyên phía dưới, nó phải dựa vào những nền tảng của những ngôn ngữ khác như java và C để tạo cho mình lớp bọc phía trên
- Kiểu ngôn ngữ năng động
Một ngôn ngữ mà các kiểu được tìm ra như thời gian thi hành, trái với ngôn ngữ tĩnh. VBScript và Python là kiểu năng động, vì chúng mang một dáng vẽ bên ngoài có thể thay đổi được khi bạn đầu tiên gán cho nó một giá trị.
- Kiểu ngôn ngữ mạnh mẽ
Một ngôn ngữ mà trong đó các kiểu luôn được tuân theo. Java và Python là 2 kiểu mạnh mẽ. Nếu bạn có một kiểu integer, bạn không thể coi nó như một kiểu string mà không có sự chuyển đổi rõ ràng.
- Kiểu ngôn ngữ thấp
Một ngôn ngữ mà trong đó các kiểu này có thể bị loại bỏ, trái ngược với kiểu mạnh mẽ. VBScript là kiểu thấp. Trong VBScript, bạn có thể nối string '12' với integer 3 để được string '123', sau đó coi như integer 123, tất cả đều không cần đến sự chuyển đổi rõ ràng.
Vì vậy Python vừa là kiểu ngôn ngữ năng động vừa là kiểu ngôn ngữ mạnh mẽ.
Chứng minh các hàm
sửaBạn có thể chứng minh một hàm trong python bằng cách cho nó một kiểu dữ liệu chuỗi.
- Ví dụ:
def buildConnectionString(params): """Build a connection string from a dictionary of parameters. Returns string."""
Ba dấu ngoặc kép có nghĩa là một chuỗi đa dòng. Mọi thứ bắt đầu và kết thúc các dấu ngoặc kép là đường dẫn của một chuỗi đơn, bao gồm thi hành việc trả về vá những ký tự nằm giữa dấu ngoặc kép khác. Bạn có thể dùng chúng bất cứ đâu, nhưng bạn sẽ thấy chúng hầu như thường được dùng để dịnh nghĩa một kiểu dữ liệu chuỗi.
Ba dấu ngoặc kép cũng là cách để định nghĩa một chuỗi với một và 2 dấu ngoặc kép. Những gì giữa 3 dấu ngoặc kép là kiễu dữ liệu chuỗi của hàm, những dữ liệu nào dùng hàm gì. Một dữ liệu chuỗi, nếu nó đã tồn tại, điều trước tiên phải được định nghĩa trong một hàm. Bạn không cần ngữ nghĩa cho một hàm của bạn, nhưng bạn luôn cấn đến. Đây là việc khó khăn, nhưng Python sẽ cho bạn một sự khích lệ: dữ liệu chuỗi có thể dùng được ở chế độ làm việc như một thuộc tính của hàm.
Mọi thứ là một đối tượng
sửaHàm trong Python có các thuộc tính, và các thuộc tính đó có thể dùng được ở chế độ làm việc.
Một hàm, như những thứ khác trong Python, là một đối tượng.
- Ví dụ:
>>> import odbchelper (1) >>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"} >>> print odbchelper.buildConnectionString(params) (2) server=mpilgrim;uid=sa;database=master;pwd=secret >>> print odbchelper.buildConnectionString.__doc__ (3) Build a connection string from a dictionary Returns string.
(1) Dòng đầu tiên import odbchelper như một module--một đoạn của code mà bạn có thể dùng cách tương tác. hoặc từ một ngôn ngữ Python lớn. Một lần bạn import một module, bạn có thể tham chiếu bất cứ các hàm, các lớp, hoặc các thuộc tính. Các Module có thể làm điều này để nhập thuộc tính về hàm trong các module khác. Đây là một khái niệm quan trọng bạn sẽ nói nhiều về nó sau này.
(2) Khi bạn muốn dùng hàm được định nghĩa trong import module, bạn cần bao gồm cả tên module. Ví vậy bạn không thể chỉ gọi buildConnectionString, nó phải là odbchelper.buildConnectionString. Nếu bạn đã từng dùng các lớp trong java, điều này sẽ có cảm giác hơi quen thuộc.
(3)Thay vì gọi một hàm như bạn mong đợi, bạn được hỏi các thuộc tính của hàm __doc__. Import python như ngôn ngữ perl. Một lần bạn import module python. Bạn xác nhận hàm của nó với module.function. Một lần bạn dùng hàm Perl, bạn xác nhận hàm của nó với module::function.
Nhập tìm đường dẫn
sửaTrước khi tiếp tục, tôi muốn đề cấp ngắn gọn về thư viện tìm đường dẫn. Python tìm kiếm trong những nơi bạn import một module. Một cách cụ thể, nó tìm kiếm trong tất cả các thư mục được định nghĩa trong sys.path. Đây là một danh sách, và bạn có thể dễ dàng xem hoạc thay đổi nó theo theo thứ tự.
- Ví dụ:
>>> import sys (1) >>> sys.path (2) [, '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat−linux2', '/usr/local/lib/python2.2/lib−dynload', '/usr/local/lib/python2.2/site−packages', '/usr/local/lib/python2.2/site−packages/PIL', '/usr/local/lib/python2.2/site−packages/piddle'] >>> sys (3) <module 'sys' (built−in)> >>> sys.path.append('/my/new/path') (4)
(1)Nhập sys module tạo cho tất cả các hàm và các thuộc tính của nó có thể dùng được.
(2) sys.path là một danh sách các tên mà tạo ra một luồng tìm kiếm đường dẫn. Python sễ tìm kiếm các thư mục bên trong có các file .py kết hợp với tên module bạn đã import.
(3) Trên thực tế nó còn rắc rối hơn thế nhiều, bởi vì không có tất cả module đã được dự trữ như các file .py . Như sys module được thiết lập trong các module.
(4) Bạn có thể thêm một thư mục mới để tìm kiếm đường dẫn trong python có thể làm việc được băng cách gán thêm vào tên thư mục đến sys.path, sau đó python sẽ tìm kiếm trong thư mục đó.
Đối tượng là gì?
sửaMọi thứ trong python là một đối tượng, và hầu như mọi thứ đề có thuộc tính và phương pháp. Tất cả các hàm thiết lập trong thuộc tính __doc__, trã về dữ liệu chuỗi được định nghĩa trong mã nguồn của hàm. Sys module là một đối tượng mà có một thuộc tính được gọi là path. Và tương tự như thế.
Các ngôn ngữ lập trình khác định nghĩa đối tượng theo nhưng cách khác nhau. Ý nghĩa của nó là tất cả các đối tượng buộc phải có các thuộc tính và các phương thức, mặc khác, nó có nghĩa là tất cả các đối tượng phân lớp được. Trong Python, định nghĩ đó là sai, một số các đối tượng hoặc là các thuộc tính hoặc là các phương thức, và không có đối tượng nào phân lớp được. Nhưng tất cả là một hướng đối tượng mà nó có thể được gán một sự biến thiên hoặc được thông qua như một đối số đến một hàm.
Điều này đặc biệt quan trọng , mọi thứ trong python đều là đối tượng. Chuỗi là các đối tượng, Danh sách là các đối tượng, Hàm là các đối tượng, module cũng là các đối tượng.