Nhập mô-đun bằng Python với các ví dụ – cách nhập mô-đun trong python

Các mô-đun trong Python là gì? Mô-đun là một tệp có mã python. Mã có thể ở dạng biến, hàm hoặc lớp được định nghĩa. Tên tệp trở thành tên mô-đun. Ví dụ: nếu

Bạn đang xem: cách nhập mô-đun trong python

Các mô-đun trong Python là gì?

Mô-đun là một tệp có mã python. Mã có thể ở dạng biến, hàm hoặc lớp được định nghĩa. Tên tệp trở thành tên mô-đun.

Ví dụ: nếu tên tệp của bạn là guru99.py, tên mô-đun sẽ là guru99 . Với chức năng mô-đun, bạn có thể chia mã của mình thành các tệp khác nhau thay vì ghi mọi thứ vào trong một tệp.

Trong hướng dẫn này, bạn sẽ học:

Mô-đun nhập Python là gì?

Một tệp được coi là một mô-đun trong python. Để sử dụng mô-đun, bạn phải nhập mô-đun đó bằng cách sử dụng từ khóa nhập khẩu . Hàm hoặc các biến có bên trong tệp có thể được sử dụng trong tệp khác bằng cách nhập mô-đun. Chức năng này khả dụng ở các ngôn ngữ khác, chẳng hạn như typecript, JavaScript, java, ruby, v.v.

Làm cách nào để tạo và nhập mô-đun bằng Python?

Bây giờ, chúng tôi sẽ tạo một mô-đun và nhập mô-đun đó vào một tệp khác.

Đây là quy trình để tạo và nhập mô-đun như được hiển thị trong ảnh chụp màn hình:

Làm theo các bước được cung cấp để tạo mô-đun trong python.

Cấu trúc thư mục được sử dụng để kiểm tra mã như sau:

 modtest /
test.py
display.py

Bước 1) Tạo tệp và đặt tên là test.py

Bước 2) Inside test.py tạo một hàm có tên là display_message ()

 Def display_message ():
    return "Chào mừng bạn đến với Hướng dẫn Guru99!"

Bước 3) Bây giờ, hãy tạo một tệp khác display.py.

Bước 4) Bên trong display.py nhập tệp moduletest.py, như được hiển thị bên dưới:

 kiểm tra nhập

Trong khi nhập, bạn không phải đề cập đến test.py mà chỉ cần nhắc đến tên của tệp.

Bước 5)

Sau đó, bạn có thể gọi hàm display_message () từ test.py bên trong display.py, bạn cần sử dụng module_name. functions_name.

Ví dụ: test.display_message ().

 Nhập thử nghiệm
print (test.display_message ())

Bước 6)

Khi bạn thực thi display.py, bạn sẽ nhận được kết quả sau:

 Chào mừng bạn đến với Hướng dẫn Guru99!

Nhập một lớp bằng Python

Trước đó, chúng ta đã thấy một mô-đun đơn giản với một chức năng. Tại đây sẽ tạo một lớp và tham chiếu lớp bên trong một tệp khác.

Cấu trúc thư mục để kiểm tra mã như sau:

 myproj /
Car.py
display.py

Tạo một tệp có tên Car.py bằng mã sau:

Tên tệp: Car.py

Xe hạng

:
brand_name = "BMW"
model = "Z4"
manu_year = "2020"

def __init __ (self, brand_name, model, manu_year):
self.brand_name = brand_name
self.model = người mẫu
self.manu_year = manu_year

def car_details (self):
print ("Thương hiệu xe hơi là", self.brand_name)
print ("Kiểu xe là", self.model)
print ("Năm sản xuất ô tô là", self.manu_year)


def get_Car_brand (tự):
print ("Thương hiệu xe hơi là", self.brand_name)

def get_Car_model (self):
print ("Kiểu xe là", self.model)

Trong tệp Car.py, có các thuộc tính brand_name, model và manu_year. Các hàm được định nghĩa bên trong lớp là car_details (), get_Car_brand (), get_Car_model ().

Bây giờ, hãy để chúng tôi sử dụng tệp Car.py làm mô-đun trong một tệp khác có tên là display.py.

Tên tệp: display.py

 nhập khẩu ô tô
car_det = Car.Car ("BMW", "Z5", 2020)
print (car_det.brand_name)
print (car_det.car_details ())
print (car_det.get_Car_brand ())
print (car_det.get_Car_model ())

Đầu ra:

 BMW
Thương hiệu xe hơi là BMW
Mô hình xe là Z5
Năm sản xuất ô tô là 2020
Thương hiệu xe hơi là BMW
Mô hình xe là Z5

Vì vậy, chúng tôi có thể truy cập tất cả các biến và hàm từ Car.py bằng mô-đun Xe hơi.

Sử dụng từ để nhập mô-đun

Bạn chỉ có thể nhập một phần nhỏ của mô-đun, tức là chỉ các hàm và tên biến bắt buộc từ mô-đun thay vì nhập toàn bộ mã.

Khi bạn chỉ muốn nhập những thứ cụ thể, bạn có thể sử dụng từ khóa “from” để nhập những thứ bạn muốn.

Vì vậy, cú pháp là

 từ mô-đun nhập tên_hàm, biến, ... v.v. của bạn.

Cấu trúc thư mục được sử dụng để kiểm tra mã như sau:

 modtest /
test.py
display.py

Trong test.py có 2 hàm như hình:

Tên tệp: test.py

 defdisplay_message ():
return "Chào mừng bạn đến với Hướng dẫn Guru99!"

def display_message1 ():
return "Tất cả về Python!"

Bây giờ bạn muốn có hàm display_message (). Bạn có thể truy cập trực tiếp vào hàm hoặc biến mà bạn đang nhập như hình dưới đây:

Tên tệp: display.py

 từ lần nhập thử nghiệm display_message
print (display_message ())

Đầu ra:

 Chào mừng bạn đến với Hướng dẫn Guru99!

Bây giờ nếu bạn tình cờ sử dụng hàm display_message1 (), nó sẽ xuất hiện một lỗi rằng hàm không được xác định như hình dưới đây:

 từ lần nhập thử nghiệm display_message
print (display_message1 ())

Đầu ra:

 Traceback (cuộc gọi gần đây nhất):
Tệp "display.py", dòng 3, trong & lt; mô-đun & gt;
print (display_message1 ())
Lỗi tên: tên 'display_message1' không được xác định

Nhập mọi thứ từ mô-đun

Nhập cho phép bạn nhập toàn bộ mô-đun bằng cách sử dụng nhập theo sau là tên mô-đun, tức là tên tệp hoặc thư viện sẽ được sử dụng.

Xem Thêm  Sự khác biệt giữa ref và type trong lược đồ XML là gì? - xsd ref so với loại

Cú pháp:

 Nhập mô-đun

Hoặc bằng cách sử dụng

 từ nhập mô-đun *

Cấu trúc thư mục được sử dụng để kiểm tra mã như sau:

 modtest /
test.py
display.py

Sau đây là các chi tiết mã bên trong test.py

 my_name = "Guru99"
my_address = "Mumbai"

defdisplay_message ():
return "Chào mừng bạn đến với Hướng dẫn Guru99!"


def display_message1 ():
return "Tất cả về Python!"

Sử dụng mô-đun nhập

Chỉ sử dụng tên mô-đun nhập, để tham chiếu đến các biến và chức năng bên trong mô-đun, nó phải có tiền tố là tên mô-đun.

Ví dụ

Tên tệp: display.py

 Nhập thử nghiệm
print (test.display_message ())
print (test.display_message1 ())
print (test.my_name)
print (test.my_address)

Kiểm tra tên mô-đun được sử dụng để tham chiếu đến hàm và các biến bên trong kiểm tra mô-đun.

Đầu ra:

 Chào mừng bạn đến với Hướng dẫn Guru99!
Tất cả về Python!
Guru99
Mumbai

Sử dụng nhập *

Hãy để chúng tôi xem một ví dụ bằng cách sử dụng nhập * . Bằng cách sử dụng import * , các hàm và biến có thể truy cập trực tiếp, như thể hiện trong ví dụ bên dưới:

 từ nhập thử nghiệm *

print (display_message ())
print (display_message1 ())
print (my_name)
print (my_address)

Đầu ra:

 Chào mừng bạn đến với Hướng dẫn Guru99!
Tất cả về Python!
Guru99
Mumbai

Hàm dir ()

Dir () là một hàm tích hợp trong python. Dir () trả về tất cả các thuộc tính và phương thức, bao gồm cả các thuộc tính tích hợp của đối tượng nhất định.

Vì vậy, khi dir () được sử dụng trên mô-đun, nó sẽ cung cấp cho bạn các biến, hàm có bên trong mô-đun.

Đây là một ví dụ hoạt động của dir () trên một mô-đun. Chúng tôi có một lớp tên là Car.py, hãy nhập Car và gán cho dir () để xem kết quả.

Cấu trúc thư mục để kiểm tra mã sẽ như sau:

 test prop /
Car.py
test.py

Tên tệp: Car.py

Xe hạng

:
brand_name = "BMW"
model = "Z4"
manu_year = "2020"

def __init __ (self, brand_name, model, manu_year):
self.brand_name = brand_name
self.model = người mẫu
self.manu_year = manu_year

def car_details (self):
print ("Thương hiệu xe hơi là", self.brand_name)
print ("Kiểu xe là", self.model)
print ("Năm sản xuất ô tô là", self.manu_year)


def get_Car_brand (tự):
print ("Thương hiệu xe hơi là", self.brand_name)

def get_Car_model (self):
print ("Kiểu xe là", self.model)

Tên tệp: test.py

 nhập khẩu ô tô

class_contents = dir (Xe hơi)
print (class_contents)

Đầu ra cung cấp cho chúng ta tên của lớp và tất cả các hàm được định nghĩa trong Car.py.

Bạn cũng có thể thử sử dụng dir () trên một mô-đun tích hợp sẵn bằng Python. Hãy để chúng tôi thử tương tự trên mô-đun json như được hiển thị trong ví dụ bên dưới. Nó sẽ hiển thị tất cả các thuộc tính và phương thức có sẵn trong mô-đun json .

 Nhập json
json_details = dir (json)
print (json_details)

Đầu ra:

 ['JSONDecodeError', 'JSONDecoder', 'JSONEncoder', '__all__', '__author__', '__bu
iltins__ ',' __cached__ ',' __doc__ ',' __file__ ',' __loader__ ',' __name__ ',' __pac
kage__ ',' __path__ ',' __spec__ ',' __version__ ',' _default_decoder ',' _default_en
coder ',' codecs ',' decoder ',' det_encoding ',' dump ',' dumps ',' encoder ',' loa
d ',' tải ',' máy quét ']

Gói

Một gói là một thư mục có tất cả các mô-đun được định nghĩa bên trong nó. Để làm cho một trình thông dịch Python coi nó như một gói, thư mục của bạn phải có init.pyfile. Init.py tạo thư mục dưới dạng một gói. Đây là bố cục của gói mà chúng tôi sẽ thực hiện.

Tên của gói là gói của tôi . Để bắt đầu làm việc với gói, hãy tạo một thư mục có tên là gói /. Bên trong thư mục, tạo một tệp trống có tên __init__.py. Tạo thêm 3 tệp module1.py, module2.py và module3.py và xác định các chức năng như trong ảnh chụp màn hình. Đây là chi tiết của module1.py, module2.py và module3.py

module1.py

 def mod1_func1 ():
print ("Chào mừng bạn đến với Module1 function1")

def mod1_func2 ():
print ("Chào mừng bạn đến với Module1 function2")

def mod1_func3 ():
print ("Chào mừng bạn đến với Module1 function3")

module2.py

 def mod2_func1 ():
print ("Chào mừng bạn đến với Module2 function1")

def mod2_func2 ():
print ("Chào mừng bạn đến với Module2 function2")

def mod2_func3 ():
print ("Chào mừng bạn đến với Module2 function3")

module3.py

 def mod3_func1 ():
print ("Chào mừng bạn đến với Module3 function1")

def mod3_func2 ():
print ("Chào mừng bạn đến với Module3 function2")

def mod3_func3 ():
print ("Chào mừng bạn đến với Module3 function3")

Gói đã sẵn sàng để sử dụng. Bây giờ, hãy gọi gói bên trong bất kỳ tệp nào của bạn như được hiển thị bên dưới: test.py:

Tại đây, mypackage.module1 được nhập và có tên bí danh là mod1. Tương tự, bạn có thể sử dụng các mô-đun khác module2.py và module3.py từ gói của tôi.

 nhập mypackage.module1 dưới dạng mod1

print (mod1.mod1_func1 ())
print (mod1.mod1_func2 ())
print (mod1.mod1_func2 ())

Đầu ra:

 Chào mừng bạn đến với Module1 function1
Không có
Chào mừng bạn đến với Module1 function2
Không có
Chào mừng bạn đến với Module1 function2
Không có

Chúng tôi vừa trình diễn gói với một mô-đun đơn giản với các chức năng bên trong nó. Theo dự án của bạn, bạn cũng có thể đóng gói với các gói phụ. Thư mục con / có các mô-đun với các lớp được xác định.

Xem Thêm  Thanh điều hướng ngang CSS - danh sách hiển thị css theo chiều ngang

Đường dẫn tìm kiếm mô-đun Python

Trong quá trình thực thi, khi python bắt gặp tên mô-đun nhập , trình thông dịch sẽ cố gắng xác định mô-đun. Nó tìm kiếm mô-đun trong danh sách mô-đun tích hợp. Cuối cùng, các thư mục được định nghĩa bên trong sys.path.

Tóm lại, trình thông dịch thực hiện tìm kiếm sau để xác định vị trí mô-đun:

  1. Trong thư mục hiện tại của bạn.
  2. Trong danh sách mô-đun tích hợp
  3. Bên trong các thư mục sys.path

Bạn có thể lấy chi tiết của sys.path bằng cách nhập mô-đun sys và in sys.path. Nó sẽ cung cấp cho bạn danh sách các thư mục như hình dưới đây:

 importys
print (sys.path)

Đầu ra:

 ['Python mới nhất \\ task2', 'Users \\ AppData \\ Local \\ Programs \\ Python \
\ Python37 \\ python37.zip ',' Users \\ AppData \\ Local \\ Programs \\ Python \\ P
ython37 \\ DLLs ']

Bạn cũng có thể sửa đổi đường dẫn và giữ các thư mục theo yêu cầu của bạn.

Sử dụng bí danh mô-đun trong quá trình nhập

Bạn cũng có thể chuyển đổi tên mô-đun sang dạng ngắn hơn bằng cách đặt tên bí danh cho nó. Bí danh có thể được thực hiện bằng cách sử dụng từ khóa.

Cú pháp:

 nhập tên tệp làm tên bí danh

Cấu trúc thư mục để kiểm tra mã sẽ như sau:

 Kiểm tra bản mod /
test.py
display.py

Sau đây là mã bên trong test.py

 my_name = "Guru99"
my_address = "Mumbai"

def display_message ():
return "Chào mừng bạn đến với Hướng dẫn Guru99!"

def display_message1 ():
return "Tất cả về Python!"

Bây giờ sẽ sử dụng bí danh cho test.py trong display.py

 Nhập thử nghiệm dưới dạng t

print (t.display_message ())
print (t.display_message1 ())
print (t.my_name)
print (t.my_address)

Bí danh được sử dụng cho mô-đun thử nghiệm là t. Vì vậy, hàm và các biến từ test.py có thể được tham chiếu bằng bí danh t.

Đầu ra:

 Chào mừng bạn đến với Hướng dẫn Guru99!
Tất cả về Python!
Guru99
Mumbai

Nhập tuyệt đối và tương đối bằng Python

Bây giờ bạn biết cách nhập tệp dưới dạng mô-đun bên trong tệp khác. Bây giờ chúng ta hãy xem cách quản lý các tệp có sẵn trong các thư mục. Các tệp trong các thư mục có thể được nhập bằng cách sử dụng nhập tuyệt đối hoặc tương đối.

Hãy xem xét bạn có cấu trúc thư mục dự án của mình, như được hiển thị bên dưới:

Thư mục gốc là dự án của tôi /. Nó có hai thư mục con package1 và package2.

Thư mục package1 có hai mô-đun, module1.py và module2.py.

Thư mục package2 có một lớp myclass.py, một gói con subpkg với module3.py và module4.py cuối cùng.

  • Trong module1.py, có một functioncalledmyfunc1.
  • Trong module2.py, có một functioncalledmyfunc2.
  • Trong module3.py, có một functioncalledmyfunc3.
  • Trong module4.py, có một functioncalledmyfunc4.

Sử dụng nhập khẩu tuyệt đối

Để nhập Tuyệt đối, bạn cần thêm toàn bộ đường dẫn của mô-đun của mình ngay từ thư mục gốc của dự án.

Bây giờ, hãy cùng chúng tôi xem cách sử dụng phép nhập tuyệt đối để tham khảo các chức năng có trong mỗi mô-đun.

Để làm việc với functionmyfunc1, bạn cần nhập như sau:

 từ package1.module1 nhập myfunc1
hoặc
từ package1 import module1
module1.myfunc1 ()

Để làm việc với hàm myfunc3, bạn cần nhập như sau:

 từ package1.subpkg.module3 nhập myfunc3
hoặc
từ package1.subpkg import module3
module3.myfunc3 ()

Ưu điểm và nhược điểm của việc sử dụng nhập khẩu tuyệt đối

Dưới đây là những lợi thế của việc sử dụng nhập khẩu tuyệt đối:

  • Việc truy tìm lại các mô-đun để kiểm tra mã trở nên dễ dàng.
  • Dễ sử dụng và rất đơn giản.
  • Nếu dự án được chuyển sang một con đường khác, các lần nhập sẽ vẫn như cũ.

Nhược điểm của việc sử dụng nhập khẩu tuyệt đối

Dưới đây là những bất lợi của việc sử dụng nhập khẩu tuyệt đối:

Nhược điểm:

  • Trong trường hợp, đường dẫn nhập có thể rất dài, các mô-đun được lồng vào nhau và nếu tên của các mô-đun dài.

Sử dụng Nhập tương đối

Xem xét cùng một cấu trúc thư mục được đề cập bên dưới, chúng ta sẽ thấy cách nhập giống nhau bằng cách nhập tương đối.

Trong quá trình nhập tương đối, mô-đun được nhập có liên quan đến vị trí hiện tại là vị trí mà câu lệnh nhập xuất hiện.

Cú pháp:

Khi nhập tương đối, bạn cần thêm dấu chấm (.) trước tên mô-đun khi nhập bằng from .

Sẽ có 2 dấu chấm (..) trước tên mô-đun nếu mô-đun ở vị trí hiện tại lên một cấp.

Đề cập đến hình cấu trúc thư mục được đề cập ở trên, chúng ta có các mô-đun sau với chức năng của chúng, chúng ta cần tham khảo.

  • Trong module1.py, có một functioncalledmyfunc1.
  • Trong module2.py, có một functioncalledmyfunc2.
  • Trong module3.py, có một functioncalledmyfunc3.
  • Trong module4.py, có một functioncalledmyfunc4.

Để làm việc với functionmyfunc1, bạn sẽ cần nhập như sau:

 từ .module1 nhập myfunc1

Để làm việc với hàm myfunc3, bạn cần nhập như sau:

 từ .subpkg.module3 nhập myfunc3

Ưu điểm của Nhập khẩu Tương đối

Ưu điểm:

  • Việc nhập khẩu tương đối rất dễ dàng.
  • Từ vị trí hiện tại, nhập khẩu có thể được rút ngắn so với nhập khẩu tuyệt đối.
Xem Thêm  4 Hiệu ứng Hover tuyệt vời sử dụng CSS Text Shadow | Thủ thuật CSS - nút di chuột css

Nhược điểm của Nhập khẩu Tương đối

Nhược điểm:

  • Sử dụng tính năng nhập tương đối, rất khó để theo dõi lại vị trí của mã

Tóm tắt:

  • Nhập bằng Python giúp bạn tham chiếu đến mã, tức là .functions / object được viết trong một tệp khác. Nó cũng được sử dụng để nhập các thư viện / gói python được cài đặt bằng pip (trình quản lý gói python) và sau đó bạn cần sử dụng trong mã của mình.
  • Chức năng nhập khả dụng ở các ngôn ngữ khác như typecript, JavaScript, java, ruby, v.v.
  • Mô-đun là python là mã được viết bên trong tệp, ví dụ: (test.py). Bên trong tệp của bạn, bạn có thể xác định các biến, hàm hoặc lớp của mình. Toàn bộ tệp sẽ trở thành một mô-đun và có thể được nhập vào bên trong tệp khác để tham chiếu đến mã.
  • Với chức năng mô-đun, bạn có thể chia mã của mình thành các tệp khác nhau thay vì viết mọi thứ bên trong một tệp. Sau đó, bằng cách sử dụng tính năng nhập, bạn có thể tham khảo mã bên trong tệp mà bạn cần.
  • Python có các mô-đun tích hợp và các thư viện / gói bên ngoài cũng được cài đặt bằng trình quản lý gói python (pip), ví dụ: gấu trúc, NumPy, v.v. được gọi là mô-đun.
  • Bạn chỉ có thể nhập một phần nhỏ của mô-đun, tức là chỉ các hàm và tên biến bắt buộc từ mô-đun thay vì nhập toàn bộ mã.
  • Bạn cũng có thể chuyển đổi tên mô-đun sang dạng ngắn hơn bằng cách đặt tên bí danh cho nó. Bí danh có thể được thực hiện bằng cách sử dụng từ khóa.
  • Một gói là một thư mục có tất cả các mô-đun được định nghĩa bên trong nó. Để làm cho trình thông dịch Python coi nó như một gói, thư mục của bạn phải có __init.pyfile. Init.py tạo thư mục dưới dạng một gói. Đây là bố cục của gói mà chúng tôi sẽ thực hiện.
  • Trong khi thực thi, khi python gặp tên mô-đun nhập , trình thông dịch sẽ cố gắng xác định mô-đun. Nó tìm kiếm mô-đun trong danh sách mô-đun tích hợp. Cuối cùng, các thư mục được xác định bên trong sys.path.
  • Để nhập Tuyệt đối, bạn cần thêm toàn bộ đường dẫn của mô-đun của mình ngay từ thư mục gốc của dự án.
  • Trong quá trình nhập tương đối, mô-đun được nhập có liên quan đến vị trí hiện tại, là vị trí có câu lệnh nhập.


Xem thêm những thông tin liên quan đến chủ đề cách nhập mô-đun trong python

How To Create Modules in Python 3 Easily

alt

  • Tác giả: HowToFAQ
  • Ngày đăng: 2017-07-24
  • Đánh giá: 4 ⭐ ( 7526 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: How To Make Modules in Python 3

    Signup to my Python Developers Guide to Learning Python: http://eepurl.com/c06OgL

    This video has a quick explanation with worked examples of making your own modules in python.

    Hi there, I hope you enjoyed this video!
    Like and Subscribe!

Mô đun và Gói trong Python

  • Tác giả: viblo.asia
  • Đánh giá: 4 ⭐ ( 3231 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Chào mừng mọi người đến với bài tiếp theo của phần “The Python Tutorial” của series “Khám phá Đại Bản Doanh Python“.

Làm cách nào để “đăng nhập” vào một trang web bằng mô-đun Yêu cầu của Python?

  • Tác giả: qastack.vn
  • Đánh giá: 5 ⭐ ( 9315 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: [Tìm thấy giải pháp!] Nếu thông tin bạn muốn có trên trang bạn được chuyển đến ngay sau khi đăng…

Python cơ bản

  • Tác giả: hiepsiit.com
  • Đánh giá: 3 ⭐ ( 4672 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Tìm hiểu về hoạt động của Mô-đun trong Python

  • Tác giả: t3h.edu.vn
  • Đánh giá: 5 ⭐ ( 3578 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Mô đun trong Python là một tệp chứa tất cả các chức năng mà bạn muốn đưa vào ứng dụng của mình. Nếu chưa tìm hiểu về Mô đun, đừng bỏ qua bài viết này nhé!

Module trong Python

  • Tác giả: quantrimang.com
  • Đánh giá: 3 ⭐ ( 4552 lượt đánh giá )
  • Khớp với kết quả tìm kiếm: Trong bài học Python này chúng ta sẽ biết cách để tạo và nhập một module trong Python. Chúng ta sẽ tìm hiểu vài cách để nhập, sử dụng module tùy chỉnh cũng như module được tích hợp sẵn trong Python, mời các bạn theo dõi nhé.

6. Mô-đun

  • Tác giả: www.vithon.org
  • Đánh giá: 5 ⭐ ( 9370 lượt đánh giá )
  • Khớp với kết quả tìm kiếm:

Xem thêm các bài viết khác thuộc chuyên mục: Kiến thức lập trình