Cộng đồng chia sẻ tri thức Lib24.vn

Python - Mô-đun

Gửi bởi: Phạm Thọ Thái Dương 19 tháng 2 2020 lúc 16:21:50


Mục lục
* * * * *

Một mô-đun cho phép bạn tổ chức một cách hợp lý mã Python của bạn. Nhóm mã liên quan vào một mô-đun làm cho mã dễ hiểu và sử dụng hơn. Một 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ể định nghĩa các chức năng, các lớp và các biến. Một mô-đun cũng có thể bao gồm mã có thể chạy được.

Thí dụ

Mã Python cho một mô-đun có tên là aname thường nằm trong một tệp có tên là aname.py . Đây là một ví dụ về một 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 dưới dạng 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 câu lệnh nhập, nó sẽ nhập mô-đun nếu mô-đun có mặt 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 hỗ trợ, 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ột mô-đun chỉ được tải một lần, bất kể số lần nhập. Điều này ngăn việc thực hiện mô-đun xảy ra lặp đi lặp lại nếu xảy ra nhiều lần nhập.

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

Câu lệnh từ 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 chức năng Dailymotion từ mô-đun sợi, hãy sử dụng câu lệnh sau -

from fib import fibonacci

Tuyên bố này không nhập toàn bộ mô-đun sợi vào không gian tên hiện tại; nó chỉ giới thiệu các mặt hàng từ mô đun sợi vào bảng ký hiệu toàn cầu của mô đun nhập khẩu.

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, tuyên bố này nên được sử dụng một cách tiết kiệm.

Mô-đun định vị

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

  1. Thư mục hiện tại.
  2. Nếu mô-đun không được tìm thấy, Python sẽ tìm kiếm từng thư mục trong biến shell PYTHONPATH.
  3. Nếu vẫn thất bại, Python kiểm tra đường dẫn mặc định. Trên UNIX, đường dẫn mặc định này là bình thường / 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à 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

Các biến là tên (định danh) ánh xạ tới các đối tượng. Một 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 một không gian tên cục bộ và trong không gian tên toàn cục . Nếu một biến cục bộ và biến toàn cục có cùng tên, biến cục bộ sẽ phủ bóng biến toàn cục.

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

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

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

Câu lệnh toàn cầu VarName nói với Python rằng VarName là một biến toàn cục. Python dừ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 loại tiền biến trong không gian tên toàn cầu. Trong hàm Money , chúng tôi gán Tiền một giá trị, do đó Python giả sử Tiền là biến cục bộ. Tuy nhiên, chúng tôi đã truy cập giá trị của biến cục bộ Tiền trước khi đặt nó, do đó, một kết quả không giới hạn là kết quả. Uncommenting tuyên bố toàn cầu sửa chữa vấn đề.

#!/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 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à chức năng đượ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à mô-đun được tải.

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

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

Nếu locals () đượ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 globalals () đượ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ầu từ hàm đó.

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

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

Khi mô-đun được nhập vào tập lệnh, mã ở 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 kiểm tra 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ô-đun đã nhập trước đó. Cú pháp của hàm reload () là thế này -

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 trong 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à gói con và gói con, v.v.

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

#!/usr/bin/python

def Pots():
   print "I'm Pots Phone"

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 -

  1. Tệp điện thoại / Isdn.py có chức năng Isdn ()
  2. Tệp điện thoại / G3.py có chức năng G3 ()

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

  1. Đ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 vào __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 bạn 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 chức năng trong mỗi tệp, nhưng bạn có thể giữ nhiều chức năng trong các tệp của mình. Bạn cũng có thể định nghĩa 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 trong số các lớp đó


Được cập nhật: 26 tháng 4 lúc 4:36:43 | Lượt xem: 409