Tôi đang cố gắng nhập một mô-đun từ bên trong một hàm và có sẵn cho toàn bộ tệp của tôi giống như cách tôi nhập vào bên ngoài bất kỳ hàm nào và trước tất cả các mã khác. Lý do nó nằm trong một hàm là bởi vì tôi không có nhiều quyền kiểm soát cấu trúc của tập lệnh. Điều này có thể xảy ra nếu không sử dụng những thứ như hack __builtin__ hoặc chuyển những gì tôi cần xung quanh mã của tôi?Có thể nhập vào phạm vi toàn cục từ bên trong một hàm (Python) không?
Trả lời
Làm thế nào về một cái gì đó giống như globals()["os"] = __import__("os")?
Tôi đoán đây có thể được bọc trong một hàm tổng quát nếu bạn muốn vì tên mô-đun là một chuỗi.
Điều này là tốt vì chỉ mục có thể được sử dụng để mô phỏng hành vi "nhập dưới dạng" không phải là (tôi tin) được xây dựng trong '__import __()'. Nó chỉ ra rằng điều này không giải quyết vấn đề của tôi, nhưng nó trả lời câu hỏi tôi hỏi. – scott77777
Xem nhận xét mới của bạn, tôi muốn nhấn mạnh rằng điều này nghe có vẻ không cần thiết. Bạn đang thực sự sửa đổi tập lệnh nhiều hơn bằng cách nhập trong một hàm bằng cách nhập ở đầu tập lệnh theo cách thông thường. Tuy nhiên, theo tinh thần trả lời câu hỏi, tôi để lại câu trả lời trước của tôi.
Tôi thành thật không chắc chắn đây là cách chính xác để làm điều này, nhưng một kiểm tra nhanh chóng khẳng định rằng nếu bạn khai báo tên mô-đun như global
trong chức năng trước khi nhập khẩu, nó được nhập khẩu vào không gian tên toàn cầu.
>>> def import_re():
... global re
... import re
...
>>> re
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 're' is not defined
>>> import_re()
>>> re
<module 're' from '/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/re.pyc'>
Đừng làm điều này trừ khi bạn thực sự phải - rồi viết nó bằng chữ màu đỏ lớn, để nói.
- 1. Tại sao tôi có thể gọi hàm tạo riêng từ phạm vi toàn cục?
- 2. Phạm vi Python bên trong một hàm lồng nhau bên trong một lớp?
- 3. Chuỗi hàm phạm vi bên trong JavaScript?
- 4. biến toàn cầu không có phạm vi toàn cầu
- 5. Có cách nào để đặt phạm vi require_once() một cách rõ ràng thành toàn cục không?
- 6. Sửa đổi một biến toàn cục bên trong một hàm
- 7. Javascript phạm vi biến toàn cục vấn đề
- 8. Python hàm lồng nhau phạm vi
- 9. Có tương đương với hàm phạm vi Python trong MATLAB không?
- 10. Tạo một biến toàn cục có thể truy cập được cho mọi hàm bên trong một lớp
- 11. Hạn chế phạm vi của Python nhập
- 12. Phạm vi bối cảnh Servlet vs biến toàn cục
- 13. Tôi có thể sử dụng một trình trang trí để thay đổi phạm vi cục bộ của một hàm trong Python không?
- 14. Có một phạm vi tương đương Python (n) cho các phạm vi đa chiều không?
- 15. Ngày kiểm tra dựa vào phạm vi ngày trong Python
- 16. Truy cập phạm vi bên ngoài trong Python 2.6
- 17. Phạm vi biến trong các hàm VBScript
- 18. javascript phạm vi khai báo hàm
- 19. PHP Phạm vi bảo tồn khi gọi một hàm
- 20. Hiểu phạm vi hàm JavaScript
- 21. Có cách nào để thay đổi hằng số được nhập cục bộ từ * bên ngoài * thường trình khai báo không?
- 22. Tại sao Python 2.6 thêm một hàm global() toàn cục?
- 23. python biến phạm vi
- 24. Biến chuỗi biến xây dựng cho "$ GLOBALS" hoạt động trong phạm vi toàn cầu, nhưng không hoạt động phạm vi
- 25. Trong Python, điều gì xảy ra khi bạn nhập vào bên trong một hàm?
- 26. Sử dụng một phạm vi từ một mô hình có liên quan trong phạm vi khác
- 27. Câu hỏi phạm vi biến cục bộ
- 28. Truy cập PHP biến toàn cục trong hàm
- 29. Làm thế nào để gọi một hàm từ API toàn cục trong các biểu thức Góc?
- 30. ASP.NET MVC 4 - Dao cạo bên trong hàm Javascript Trong phạm vi @Section gây ra lỗi phạm vi
Đừng làm điều đó nếu bạn quan tâm đến người tiếp theo phải đọc mã của bạn (có thể là chính bạn). Có vẻ như bạn đang sử dụng thực hành tổ chức kém như một cái cớ để thực hành mã hóa kém; cố gắng sửa chữa nguyên nhân gốc rễ. – msw
Tôi đang sửa đổi một dự án mã nguồn mở và cố gắng thay đổi mức tối thiểu tuyệt đối cần thiết. – scott77777
Vì vậy, bằng cách cố gắng thay đổi mức tối thiểu cần thiết, bạn sẽ làm cho nó không thể hiểu được đối với tất cả những người đóng góp khác. Đó là một sự đánh đổi kém. – msw