Tôi đang cố gắng giải quyết một vấn đề mà tôi đã gặp phải trong một đoạn mã tôi cần xây dựng. Tôi có một mô -đun Python mà tôi cần có khả năng nhập và chuyển các đối số sau đó sẽ được phân tích cú pháp bởi mô -đun chính. Những gì tôi đã được đưa ra trông như thế này: Show
Điều tôi cần là thêm một hàm 4 có thể lấy (các) đối số và phân tích chúng và sau đó truyền chúng như vậy:
Tóm lại: Tôi cần nhập main.py và truyền trong các đối số được phân tích cú pháp bởi hàm 4 và sau đó cung cấp thông tin được trả lại cho phần 6.Chỉnh sửa để làm rõ những gì tôi đang làm To clarify what I am doing
Ngoài ra tôi vẫn muốn có thể gọi Main.py từ Shell thông qua I want to still be able to call main.py from shell via
Do đó bảo tồn tên == chínhname == main Là những gì tôi đang hỏi thậm chí có thể? Tôi đã dành phần tốt hơn của ngày hôm nay để nghiên cứu vấn đề này bởi vì tôi muốn, nếu có thể, hãy bảo tồn mô -đun chính mà tôi đã được đưa ra. Thanks, DMG Trong khi đọc một chương trình Python, bạn có thể tìm thấy biểu thức nếu __name__ == ‘__main__. Hãy để một cái nhìn về ý nghĩa của nó và tại sao bạn nên biết về nó.if __name__ == ‘__main__’. Let’s have a look at what it means and why you should know about it. Điều kiện nếu __name__ == ‘__main__, được sử dụng trong chương trình Python để thực thi mã bên trong câu lệnh IF chỉ khi chương trình được thực hiện trực tiếp bởi trình thông dịch Python. Khi mã trong tệp được nhập dưới dạng mô -đun, mã bên trong câu lệnh IF không được thực thi. Có thể không rõ ràng tại sao điều này được thực hiện và với hướng dẫn này, lý do sẽ trở nên rõ ràng. Ở đây chúng tôi đi!
Bây giờ bạn đã biết cách sử dụng biến __name__ trong các chương trình Python của bạn. Nó cho phép bao gồm mã không được thực thi nếu mô -đun của bạn được nhập bởi một chương trình khác. Hãy tưởng tượng nếu người khác muốn sử dụng các chức năng bạn đã tạo nhưng không muốn tự động thực hiện một loạt logic mà bạn đã triển khai khi ứng dụng của bạn được thực thi trực tiếp.
Và bây giờ tôi có một câu hỏi nhỏ cho bạn… Bạn có nhớ tên ngắn mà bạn có thể sử dụng cho biến __name__ thay vì gọi nó là Double Double Name Tên Double Undercore không? 🙂
OK, vì vậy sau khi nhập mô -đun ngẫu nhiên, chúng ta có thể thấy rằng giá trị của __name__ cho mô -đun là ‘ngẫu nhiên về cơ bản là tên của mô -đun. Chúng tôi đang nhận được một nơi nào đó nhưng có lẽ nếu chúng tôi tạo chương trình Python của riêng mình, điều này có thể trở nên rõ ràng hơn. Các giá trị của biến Python __name__Tạo một tệp có tên là hiểu biết_name_main.py, tệp này chứa mã sau:
Một câu lệnh in duy nhất sử dụng phương thức định dạng chuỗi để in giá trị của __name__. Hãy để xem những gì xảy ra khi:
Khi chúng tôi thực thi mã trực tiếp bằng cách tham chiếu tệp Python, giá trị của __name__ là __main__:
Thay vào đó, nếu chúng ta nhập mô -đun từ vỏ Python, giá trị của __name__ là
… Hiểu được_name_main. Vì vậy, tên của mô -đun. Theo cùng một cách chúng ta đã thấy trước đây với mô -đun ngẫu nhiên Python. Vì vậy, giá trị của __name__ thay đổi tùy thuộc vào cách thực hiện mã python của chúng tôi. Nhưng tại sao? Và làm thế nào điều này có thể giúp chúng ta với tư cách là nhà phát triển? Một ví dụ để hiểu __name__ trong PythonChúng tôi đã thấy làm thế nào giá trị của các thay đổi __name__varable tùy thuộc vào cách chúng tôi thực thi mã của chúng tôi. Nhưng, làm thế nào để chúng ta sử dụng điều kiện nếu __name__ == __main__, trong các chương trình Python của chúng ta?if __name__ == “__main__” in our Python programs? Để giải thích khái niệm này, chúng tôi sẽ tạo ra một chương trình Python gọi ba chức năng khác nhau. Chúng tôi sẽ sử dụng cùng một tệp hiểu_name_main.py:
Mã này chạy ba chức năng. Việc triển khai chức năng ba là một tuyên bố in đơn giản vì tôi muốn bạn tập trung vào khái niệm đằng sau việc này chứ không phải vào việc thực hiện các chức năng: 0Bây giờ, hãy để nói rằng một chương trình Python khác cần sử dụng chức năng Bước1 (). Để làm điều đó, chúng tôi sẽ phải nhập tệp của chúng tôi dưới dạng mô -đun. Đây là những gì xảy ra khi chúng ta làm điều đó: 1Sau khi nhập mô -đun, chúng tôi có thể thực thi hàm Bước1 (). Vấn đề là khi chúng tôi nhập mô -đun, ba dòng bên dưới sẽ tự động thực hiện: 2Làm thế nào chúng ta có thể tránh điều đó? Kiểm tra xem __name__ có bằng __main__ khi nhập mô -đun khôngĐể ngăn chặn hành vi mà chúng ta đã thấy trong phần trước xảy ra, chúng ta có thể kiểm tra xem giá trị của __name__ có bằng với __main__ hay không. Theo cách này, mã bên trong điều kiện IF chỉ được thực thi nếu tệp python được gọi trực tiếp và không khi nó được nhập dưới dạng mô -đun. Chương trình của chúng tôi trở thành: 3Hãy để xác nhận rằng ba chức năng vẫn được thực thi khi chúng tôi gọi trực tiếp chương trình Python: 0Và ba chức năng không được thực thi khi chúng tôi nhập này dưới dạng mô -đun: 5Điều đó tốt hơn rất nhiều lần này! Ngoài ra, hãy để giả sử mô -đun hiểu biết_name_main bao gồm hàng trăm chức năng và bạn không muốn nhập tất cả chúng. Làm thế nào bạn có thể chỉ nhập hàm Bước1 ()? Bạn có thể sử dụng cú pháp sau: 6Như bạn có thể thấy trong trường hợp này, chúng tôi chỉ nhập chức năng Bước 1 được thực thi thành công. Khi chúng tôi cố gắng thực thi bước 2 (), nó không thành công với nameError: name ‘bước2, không được xác định. Phương pháp chính của PythonKhái niệm chính là khá chuẩn trong các ngôn ngữ như Java hoặc C và nó đại diện cho điểm vào để thực hiện một chương trình. Một cách tiếp cận phổ biến được sử dụng trong Python là tạo một hàm gọi là main () được thực thi bên trong câu lệnh IF kiểm tra giá trị của biến __name__.function called main() executed inside the if statement that checks the value of the __name__ variable. Hàm chính () là nơi được gọi là nhiều hàm để có được kết quả cụ thể. Trong trường hợp của chúng tôi, ba chức năng sẽ được gọi từ chức năng chính: 7Đặt tên cho hàm Main () chỉ là một quy ước đặt tên phổ biến làm tăng khả năng đọc của chương trình xem xét rằng khái niệm chính cũng được các nhà phát triển khác nổi tiếng. Trong thực tế, không có gì ngăn cản chúng ta đưa ra một tên tùy ý khác cho chức năng chính. Trước khi tiếp tục với hướng dẫn này xác nhận rằng mã được cập nhật của chúng tôi hoạt động tốt trong cả hai kịch bản:
Python __name__, __main__ và đối sốBên trong điều kiện IF kiểm tra xem biến __name__ có bằng với __main__, chúng tôi cũng có thể xử lý bất kỳ tham số nào được truyền cho ứng dụng Python của chúng tôi khi được gọi trực tiếp. Để xử lý các đối số được chuyển cho ứng dụng, chúng tôi có thể sử dụng mô -đun SYS.sys module. 8Trong mã này, chúng tôi làm như sau:
Đây là những gì xảy ra khi chúng tôi chạy chương trình trong thiết bị đầu cuối: 9Như bạn có thể thấy đối số đầu tiên nhận được bởi chương trình Python là tên của chính tệp .Py. Hãy để cập nhật chức năng chính để in loại biến ARGS. 0Nó xác nhận rằng Args là một danh sách: 1Khi chuyển các đối số, chúng ta cũng có thể giải nén các đối số chúng ta cần trong chương trình của mình, ngoại trừ tên của chương trình: 2Và đây là cách chúng tôi chạy chương trình này và kết quả chúng tôi lấy lại: 3Mã này sử dụng toán tử cắt để lấy hai số được truyền qua dòng lệnh. Sau đó, nó chuyển hai số (tại thời điểm này vẫn ở định dạng chuỗi) cho hàm main ().slicing operator to take the two numbers passed via the command line. Then it passes the two numbers (at this point still in string format) to the main() function. Hàm chính sau đó trả về sản phẩm của hai số được chuyển đổi thành số nguyên. Sự kết luậnBây giờ bạn đã biết cách sử dụng biến __name__ trong các chương trình Python của bạn. Nó cho phép bao gồm mã không được thực thi nếu mô -đun của bạn được nhập bởi một chương trình khác. Hãy tưởng tượng nếu người khác muốn sử dụng các chức năng bạn đã tạo nhưng không muốn tự động thực hiện một loạt logic mà bạn đã triển khai khi ứng dụng của bạn được thực thi trực tiếp. Và bây giờ tôi có một câu hỏi nhỏ cho bạn… Bạn có nhớ tên ngắn mà bạn có thể sử dụng cho biến __name__ thay vì gọi nó là Double Double Name Tên Double Undercore không? 🙂__name__ instead of calling it “double underscore name double underscore“? 🙂 Bài viết liên quan:Tôi là một nhà lãnh đạo công nghệ, kỹ sư phần mềm và huấn luyện viên lập trình. Tôi muốn giúp bạn trong hành trình trở thành một nhà phát triển siêu! Nếu __ tên __ == làm chính trong Python?Các tệp Python có thể hoạt động như các mô -đun có thể tái sử dụng hoặc là chương trình độc lập. Nếu __name__ == Main Main: được sử dụng để thực thi một số mã chỉ khi tệp được chạy trực tiếp và không được nhập.execute some code only if the file was run directly, and not imported.
Nếu __ tên __ trong Python là gì?Về mặt cú pháp, Python's If __name__ == "__main__" Idiom chỉ là một khối có điều kiện bình thường: 1if __name__ == "__main__" Dòng 1 đánh giá là đúng.a normal conditional block: 1if __name__ == "__main__": 2 ... The indented block starting in line 2 contains all the code that Python will execute when the conditional statement in line 1 evaluates to True .
Là nếu name == chính cần thiết?Lý do đằng sau nếu __name__ == '__main__' trong Python bạn có thể đã thấy cái này trước đây: cú pháp thường bị bỏ qua vì nó dường như không cản trở việc thực thi mã của bạn.Có vẻ như không cần thiết, nhưng đó chỉ là khi bạn làm việc với một tệp Python duy nhất.It may not seem necessary, but that's only if you're working with a single Python file.
Chúng ta có thể chuyển các đối số trong main () trong Python không?Dòng lệnh args mã python chính () ở trên bắt đầu bằng một dòng tiêu chuẩn CS106A args = sys.Argv [1:] thiết lập một danh sách có tên Args để chứa các chuỗi ARG dòng lệnh.Dòng này hoạt động và bạn luôn có thể sử dụng nó.you can always use it. |