Module trong Python

0
58

Một mô-đun cho phép bạn tổ chức hợp lý mã Python của mình. Nhóm mã liên quan thành một mô-đun làm cho mã dễ hiểu và dễ sử dụng hơn. Mô-đun là một đối tượng Python với các thuộc tính được đặt tên tùy ý mà bạn có thể liên kết và tham chiếu.

Đơn giản, một mô-đun là một tệp bao gồm mã Python. Một mô-đun có thể xác định các hàm, lớp và biến. Một mô-đun cũng có thể bao gồm mã chạy được.

Thí dụ

Mã Python cho mô-đun có tên aname thường nằm trong tệp có tên aname.py . Đây là một ví dụ về mô-đun đơn giản, support.py

def print_func( par ):
print "Hello : ", par
return

Các khẩu Statement

Bạn có thể sử dụng bất kỳ tệp nguồn Python nào làm mô-đun bằng cách thực hiện câu lệnh nhập trong một số tệp nguồn Python khác. Việc nhập có cú pháp sau:

import module1[, module2[,... moduleN]

Khi trình thông dịch gặp một câu lệnh nhập, nó sẽ nhập mô-đun nếu mô-đun có trong đường dẫn tìm kiếm. Đường dẫn tìm kiếm là danh sách các thư mục mà trình thông dịch tìm kiếm trước khi nhập mô-đun. Ví dụ: để nhập mô-đun support.py, bạn cần đặt lệnh sau ở đầu tập lệnh:

#!/usr/bin/python 
# Import module support
import support
# Now you can call defined function that module as follows support.print_func("Zara")

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

Hello : Zara

Mô-đun chỉ được tải một lần, bất kể số lần nó được nhập. Điều này ngăn việc thực thi mô-đun lặp đi lặp lại nếu nhiều lần nhập xảy ra.

Các từ … nhập khẩu Statement

Câu lệnh from from của Python cho phép bạn nhập các thuộc tính cụ thể từ một mô-đun vào không gian tên hiện tại. Các từ … nhập khẩu có cú pháp như sau –

from modname import name1[, name2[, ... nameN]]

Ví dụ: để nhập hàm fibonacci từ mô-đun fib, hãy sử dụng câu lệnh sau:

from fib import fibonacci

Câu lệnh này không nhập toàn bộ mô-đun fib vào không gian tên hiện tại; nó chỉ giới thiệu mục fibonacci từ mô-đun fib vào bảng ký hiệu chung của mô-đun nhập.

Các từ … nhập khẩu * Bản Tuyên Bố

Cũng có thể nhập tất cả các tên từ một mô-đun vào không gian tên hiện tại bằng cách sử dụng câu lệnh nhập sau:

from modname import *

Điều này cung cấp một cách dễ dàng để nhập tất cả các mục từ một mô-đun vào không gian tên hiện tại; tuy nhiên, câu lệnh này nên được sử dụng một cách tiết kiệm.

Định vị mô-đun

Khi bạn nhập một mô-đun, trình thông dịch Python sẽ tìm kiếm mô-đun theo các trình tự sau:

  • Thư mục hiện tại.
  • Nếu không tìm thấy mô-đun, thì Python sẽ tìm kiếm từng thư mục trong biến shell PYTHONPATH.
  • Nếu vẫn thất bại, Python sẽ kiểm tra đường dẫn mặc định. Trên UNIX, đường dẫn mặc định này thường là / usr / local / lib / python /.

Đường dẫn tìm kiếm mô-đun được lưu trữ trong sys mô-đun hệ thống dưới dạng biến sys.path . Biến sys.path chứa thư mục hiện tại, PYTHONPATH và giá trị mặc định phụ thuộc vào cài đặt.

Các PYTHONPATH Variable

PYTHONPATH là một biến môi trường, bao gồm một danh sách các thư mục. Cú pháp của PYTHONPATH giống như cú pháp của biến shell PATH.

Đây là một PYTHONPATH điển hình từ hệ thống Windows –

set PYTHONPATH = c:\python20\lib;

Và đây là một PYTHONPATH điển hình từ hệ thống UNIX –

set PYTHONPATH = /usr/local/lib/python

Không gian tên và phạm vi

Biến là tên (định danh) ánh xạ tới các đối tượng. Không gian tên là một từ điển của các tên biến (khóa) và các đối tượng (giá trị) tương ứng của chúng.

Một câu lệnh Python có thể truy cập các biến trong không gian tên cục bộ và trong không gian tên chung . Nếu một biến cục bộ và một biến toàn cục có cùng tên, thì biến cục bộ sẽ phủ bóng lên biến toàn cục.

Mỗi hàm có không gian tên cục bộ riêng của nó. Các phương thức lớp tuân theo quy tắc xác định phạm vi giống như các hàm thông thường.

Python đưa ra các phỏng đoán có học về việc các biến là cục bộ hay toàn cục. Nó giả định rằng bất kỳ biến nào được gán giá trị trong một hàm là cục bộ.

Do đó, để gán giá trị cho một biến toàn cục trong một hàm, trước tiên bạn phải sử dụng câu lệnh toàn cục.

Câu lệnh global VarName cho Python biết rằng VarName là một biến toàn cục. Python ngừng tìm kiếm không gian tên cục bộ cho biến.

Ví dụ, chúng tôi xác định một biến Money trong không gian tên chung. Trong hàm Money , chúng tôi gán cho Money một giá trị, do đó Python giả định Money là một biến cục bộ. Tuy nhiên, chúng tôi đã truy cập giá trị của biến cục bộ Money trước khi đặt nó, vì vậy kết quả là UnboundLocalError. Bỏ chú thích câu lệnh chung sẽ khắc phục được sự cố.

#!/usr/bin/python 
Money = 2000
def AddMoney():
# Uncomment the following line to fix the code:
# global Money
Money = Money + 1
print Money
AddMoney()
print Money

Hàm dir ()

Hàm tích hợp dir () trả về một danh sách các chuỗi đã được sắp xếp có chứa các tên được xác định bởi một mô-đun.

Danh sách chứa tên của tất cả các mô-đun, biến và hàm được xác định trong một mô-đun. Sau đây là một ví dụ đơn giản

#!/usr/bin/python 
# Import built-in module math
import math
content = dir(math)
print content

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 
'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 
'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 
'sqrt', 'tan', 'tanh']

Ở đây, biến chuỗi đặc biệt __name__ là tên của mô-đun và __file__ là tên tệp mà từ đó mô-đun được tải.

Các globals ()người dân địa phương () Chức năng

Các hàm global () và local () có thể được sử dụng để trả về tên trong không gian tên cục bộ và toàn cục tùy thuộc vào vị trí mà chúng được gọi.

Nếu local () được gọi từ bên trong một hàm, nó sẽ trả về tất cả các tên có thể được truy cập cục bộ từ hàm đó.

Nếu global () được gọi từ bên trong một hàm, nó sẽ trả về tất cả các tên có thể được truy cập trên toàn cục từ hàm đó.

Kiểu trả về của cả hai hàm này là từ điển. Do đó, các tên có thể được trích xuất bằng cách sử dụng hàm key ().

Các tải lại () Chức năng

Khi mô-đun được nhập vào một tập lệnh, mã trong phần cấp cao nhất của mô-đun chỉ được thực thi một lần.

Do đó, nếu bạn muốn thực thi lại mã cấp cao nhất trong một mô-đun, bạn có thể sử dụng hàm reload () . Hàm reload () nhập lại một mô-đun đã nhập trước đó. Cú pháp của hàm reload () là:

reload(module_name)

Ở đây, module_name là tên của mô-đun bạn muốn tải lại và không phải là chuỗi chứa tên mô-đun. Ví dụ: để tải lại mô-đun hello , hãy làm như sau:

reload(hello)

Các gói bằng Python

Gói là một cấu trúc thư mục tệp phân cấp xác định một môi trường ứng dụng Python duy nhất bao gồm các mô-đun và các gói con và gói con con, v.v.

Xem xét một tệp Pots.py có sẵn trong thư mục Điện thoại . Tệp này có dòng mã nguồn sau:

#!/usr/bin/python 
def Pots():
print "I'm Pots Phone"

Theo cách tương tự, chúng ta có hai tệp khác có các chức năng khác nhau có cùng tên như trên –

  • Tệp Phone / Isdn.py có hàm Isdn ()
  • Tệp Phone / G3.py có chức năng G3 ()

Bây giờ, hãy tạo thêm một tệp __init__.py trong thư mục Điện thoại

  • Điện thoại / __ init__.py

Để cung cấp tất cả các chức năng của bạn khi bạn nhập Điện thoại, bạn cần đặt các câu lệnh nhập rõ ràng trong __init__.py như sau:

from Pots import Pots
from Isdn import Isdn
from G3 import G3

Sau khi bạn thêm các dòng này vào __init__.py, bạn có tất cả các lớp này khi nhập gói Điện thoại.

#!/usr/bin/python 
# Now import your Phone Package.
import Phone
Phone.Pots()
Phone.Isdn()
Phone.G3()

Khi đoạn mã trên được thực thi, nó tạo ra kết quả sau:

I'm Pots Phone
I'm 3G Phone
I'm ISDN Phone

Trong ví dụ trên, chúng tôi đã lấy ví dụ về một hàm duy nhất trong mỗi tệp, nhưng bạn có thể giữ nhiều hàm trong tệp của mình. Bạn cũng có thể xác định các lớp Python khác nhau trong các tệp đó và sau đó bạn có thể tạo các gói của mình từ các lớp đó.

LEAVE A REPLY

Please enter your comment!
Please enter your name here