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]
6Cuố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]
7Anh ấ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]
3Hoặ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]
4PyPI
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