Chúng ta thường thấy
print[f'The __name__ from script1 is "{__name__}"']
8 trong các tập lệnh Python mà chúng tôi tìm thấy trực tuyến hoặc một trong nhiều tập lệnh do chúng tôi tự viếtTại sao chúng ta sử dụng câu lệnh if đó khi chạy các chương trình Python của mình?
Thuộc tính __name__ và phạm vi __main__
Thuộc tính
print[f'The __name__ from script1 is "{__name__}"']
9 theo mặc định là một trong những tên trong phạm vi cục bộ hiện tại. Trình thông dịch Python tự động thêm giá trị này khi chúng tôi đang chạy tập lệnh Python hoặc nhập mã của chúng tôi dưới dạng mô-đunHãy thử lệnh sau trên trình thông dịch Python của bạn. Bạn có thể phát hiện ra rằng
print[f'The __name__ from script1 is "{__name__}"']
9 thuộc danh sách các thuộc tính trong print[f'The __name__ from script1 is "{__name__}"']
1dir[]
print[f'The __name__ from script1 is "{__name__}"']
9 trong Python là một biến đặc biệt xác định tên của lớp hoặc mô-đun hiện tại hoặc tập lệnh mà từ đó nó được gọiTạo một thư mục mới có tên là
print[f'The __name__ from script1 is "{__name__}"']
3 để chúng tôi có thể viết một vài đoạn mã để hiểu cách thức hoạt động của tất cả. Trong thư mục đó, tạo một tệp mới, print[f'The __name__ from script1 is "{__name__}"']
4 với mã sauprint[f'The __name__ from script1 is "{__name__}"']
Đó là một đường cong. Chúng tôi hy vọng rằng tên đó sẽ là
print[f'The __name__ from script1 is "{__name__}"']
5, vì hồ sơ của chúng tôi. Đầu ra print[f'The __name__ from script1 is "{__name__}"']
6 nghĩa là gì?Theo mặc định, khi một tập lệnh được thực thi, trình thông dịch sẽ đọc tập lệnh và gán chuỗi
print[f'The __name__ from script1 is "{__name__}"']
6 cho từ khóa print[f'The __name__ from script1 is "{__name__}"']
9Nó thậm chí còn thú vị hơn khi tập lệnh trên được nhập vào tập lệnh khác. Hãy xem xét một tệp Python có tên
print[f'The __name__ from script1 is "{__name__}"']
9 với đoạn mã sauNhư bạn có thể thấy, khi tập lệnh được thực thi, đầu ra được đưa ra là
print[f'The __name__ from script1 is "{__name__}"']
5 biểu thị tên của tập lệnh. Câu lệnh in cuối cùng nằm trong phạm vi của dir[]
01 và khi nó được thực thi, đầu ra sẽ được in dưới dạng. print[f'The __name__ from script1 is "{__name__}"']
6Bây giờ chúng ta đã hiểu cách Python sử dụng phạm vi
print[f'The __name__ from script1 is "{__name__}"']
9 và khi nó cung cấp cho nó giá trị "__main__", hãy xem lý do tại sao chúng ta kiểm tra giá trị của nó trước khi thực thi mãnếu __name__ == "__main__" trong Hành động
Chúng tôi sử dụng câu lệnh if để chạy các khối mã chỉ khi chương trình của chúng tôi là chương trình chính được thực thi. Điều này cho phép chương trình của chúng ta có thể tự thực thi được, nhưng thân thiện với các mô-đun Python khác, những người có thể muốn nhập một số chức năng mà không cần phải chạy mã
Hãy xem xét các chương trình Python sau
a]
dir[]
04 chứa một hàm có tên là dir[]
05 chỉ được gọi từ ngữ cảnh chínhdir[]
0Đây là kết quả khi
dir[]
04 được gọiHãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó
Khi tập lệnh được thực thi trực tiếp, từ khóa
print[f'The __name__ from script1 is "{__name__}"']
9 được gán cho print[f'The __name__ from script1 is "{__name__}"']
6 và khối mã theo điều kiện print[f'The __name__ from script1 is "{__name__}"']
8 được thực thib] Đây là điều xảy ra khi đoạn mã này được nhập từ
dir[]
70dir[]
7Khối bên dưới
print[f'The __name__ from script1 is "{__name__}"']
8 từ dir[]
04 đã không thực thi, như mong đợi. Điều này xảy ra vì từ khóa print[f'The __name__ from script1 is "{__name__}"']
9 hiện được gán với tên của tập lệnh. dir[]
74. Điều này có thể được xác minh bằng câu lệnh in đã cho in giá trị được gán cho từ khóa print[f'The __name__ from script1 is "{__name__}"']
9__name__ == "__main__" giúp phát triển như thế nào?
Dưới đây là một số trường hợp sử dụng để sử dụng câu lệnh if đó khi tạo tập lệnh của bạn
- Kiểm thử là một cách thực hành tốt không chỉ giúp bắt lỗi mà còn đảm bảo mã của bạn hoạt động theo yêu cầu. Các tệp thử nghiệm phải nhập một hàm hoặc đối tượng cho chúng. Trong những trường hợp này, chúng tôi thường không muốn tập lệnh được chạy dưới dạng mô-đun chính
- Bạn đang tạo một thư viện nhưng muốn đưa vào bản trình diễn hoặc các trường hợp thời gian chạy đặc biệt khác cho người dùng. Bằng cách sử dụng câu lệnh if này, các mô-đun Python sử dụng mã của bạn làm thư viện sẽ không bị ảnh hưởng
Tạo một __main__. Tệp py cho Mô-đun
Mục đích của việc có khối
print[f'The __name__ from script1 is "{__name__}"']
8 là để đoạn mã có điều kiện được thực thi khi tập lệnh nằm trong phạm vi print[f'The __name__ from script1 is "{__name__}"']
6. Tuy nhiên, khi tạo các gói bằng Python, sẽ tốt hơn nếu mã được thực thi trong ngữ cảnh print[f'The __name__ from script1 is "{__name__}"']
6 được viết trong một tệp riêng biệtHãy xem xét ví dụ sau - một gói để thực hiện các phép tính. Cấu trúc cây tệp cho một kịch bản như vậy có thể được hình dung như
Cấu trúc cây chứa
dir[]
79 làm thư mục gốc và thư mục con được gọi là print[f'The __name__ from script1 is "{__name__}"']
40. print[f'The __name__ from script1 is "{__name__}"']
41 trong thư mục dir[]
79 chứa nội dung sauprint[f'The __name__ from script1 is "{__name__}"']
4print[f'The __name__ from script1 is "{__name__}"']
43 chứaprint[f'The __name__ from script1 is "{__name__}"']
9Và
print[f'The __name__ from script1 is "{__name__}"']
44 chứaprint[f'The __name__ from script1 is "{__name__}"']
1Ngay bên ngoài thư mục
dir[]
79, tập lệnh có thể được thực thi và logic bên trong print[f'The __name__ from script1 is "{__name__}"']
41 được thực thi bằng cách gọiprint[f'The __name__ from script1 is "{__name__}"']
4Cấu trúc này cũng cung cấp giao diện gọn gàng hơn cho vị trí không gian làm việc, cách tổ chức các thư mục và điểm vào được xác định bên trong một tệp riêng biệt có tên là
print[f'The __name__ from script1 is "{__name__}"']
41Phần kết luận
print[f'The __name__ from script1 is "{__name__}"']
48 chỉ chạy các khối mã khi tập lệnh Python của chúng tôi đang được thực thi trực tiếp từ người dùng. Điều này rất hữu ích vì nó cho phép mã của chúng ta có hành vi khác khi nó được thực thi dưới dạng chương trình thay vì được nhập dưới dạng mô-đunKhi viết các mô-đun lớn, chúng ta có thể chọn cách tiếp cận có cấu trúc hơn là có tệp
print[f'The __name__ from script1 is "{__name__}"']
41 để chạy mô-đun. Đối với tập lệnh độc lập, bao gồm print[f'The __name__ from script1 is "{__name__}"']
8 là phương pháp đơn giản hơn để tách API khỏi chương trình