Python lấy mã nguồn của mô-đun

Bạn đã bao giờ tự hỏi làm cách nào để lấy mã nguồn Python một cách nhanh chóng chưa? . Đây là một số mã để đọc thêm nguồn Python

Mật mã

Nguồn/dự án ở đây

import argparse
import importlib
import inspect
import pydoc

Đây là nơi điều kỳ diệu xảy ra [tín dụng cho chủ đề Stack Overflow này]. chúng tôi sử dụng

# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
8 để nhập mô-đun từ một chuỗi và lấy lớp hoặc hàm từ mô-đun đã nhập này bằng cách sử dụng
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
9

# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]

Sau đó, chúng tôi in nó ra. Theo mặc định, chúng tôi sử dụng

# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
0, nhưng nếu
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
0 là
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
1, chúng tôi sử dụng
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
2 hoạt động giống như Unix
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
3. nó đợi bạn nhấn phím cách và bạn có thể sử dụng
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
4 để tìm kiếm/khớp chuỗi, khá tuyệt

# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]

Để làm cho nó gắn kết, hãy xem một ví dụ khác về

# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
5 và đây là một ví dụ khác về
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
6

Cuối cùng trong

# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
7, chúng tôi xử lý các đối số dòng lệnh. Chúng tôi yêu cầu một
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
8 mà chúng tôi muốn xem nguồn và chúng tôi có một đối số
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
0 tùy chọn. Sau đó, chúng tôi gọi hai chức năng

# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
3

[Tôi đã sử dụng

# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]
0 trong lần lặp đầu tiên của mình, nhưng
# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]
1 làm cho điều này sạch hơn và có thể mở rộng hơn rất nhiều. Tất nhiên cũng có nhiều lựa chọn hơn…]

Gọi nó từ bên trong Vim

Tôi đã lưu tập lệnh này trong thư mục

# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]
2 của mình và Michael đã rất tốt bụng khi nghĩ ra một bí danh để sử dụng nó trong Vim

# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
7

Anh ấy thậm chí còn làm bản trình diễn gif nhỏ xinh này về cách nó gọi kịch bản khi bạn nhấn

# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]
3 khi bạn đang ở trên
# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]
4 hoặc
# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]
5

Ở đây chúng tôi thực sự muốn biết làm thế nào

# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]
6 đã nạp chồng toán tử [câu trả lời. nó thực hiện
# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]
7]

Tất nhiên bạn cũng có thể gọi nó từ dòng lệnh

# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
3

Hoặc khi sử dụng phân trang

# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
4

PyPI

Tôi đã biến nó thành một gói và tải nó lên PyPI [nếu bạn tò mò về cách bạn có thể làm điều này, hãy xem bài viết này]

Nhân tiện, bài học kinh nghiệm. gọi thư mục nguồn của bạn một cái gì đó có liên quan bởi vì đó là cách nó kết thúc trong môi trường ảo của bạn ________ 78 thư mục

Hãy tự mình thử. Chỉ cần cài đặt nó như

# src/pysource.py
def print_source[func, pager=False]:
    output = pydoc.pager if pager else print
    output[inspect.getsource[func]]
9 [đừng nhầm với
# src/pysource.py
def get_callable[arg]:
    module_str, name = arg.rsplit[".", 1]
    module = importlib.import_module[module_str]
    return getattr[module, name]
30, một gói khác/không liên quan trên PyPI, cảm ơn Nils]

Đây vẫn là thử nghiệm nhưng tôi hy vọng nó sẽ giúp bạn đọc thêm mã Python [Thư viện chuẩn] dễ dàng hơn

Tôi có thể xem mã nguồn Python ở đâu?

Vì Python là mã nguồn mở nên bạn có thể đọc mã nguồn. Để biết một mô-đun hoặc chức năng cụ thể được triển khai trong tệp nào, bạn thường có thể in thuộc tính __file__ . Ngoài ra, bạn có thể sử dụng mô-đun kiểm tra, xem phần Truy xuất mã nguồn trong tài liệu về kiểm tra.

Làm cách nào để đọc một mô-đun trong Python?

Trong Python, các mô-đun được truy cập bằng cách sử dụng câu lệnh nhập . Khi bạn làm điều này, bạn thực thi mã của mô-đun, giữ phạm vi của các định nghĩa để [các] tệp hiện tại của bạn có thể sử dụng các định nghĩa này.

Mã nguồn trong Python là gì?

Mã nguồn là cái mà chúng tôi gọi là các hướng dẫn máy tính mà con người có thể đọc được do các lập trình viên viết . Nó được viết bằng văn bản đơn giản. Chúng tôi viết nó mà không cần định dạng đặc biệt, chẳng hạn như in đậm, in nghiêng hoặc các loại phông chữ khác nhau. Nó chủ yếu chỉ là các nhân vật thực tế.

Chủ Đề