307
Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.
Tôi hơi bối rối về cách các biến toàn cầu hoạt động. Tôi có một dự án lớn, với khoảng 50 tệp và tôi cần xác định các biến toàn cầu cho tất cả các tệp đó.
Những gì tôi đã làm là xác định chúng trong tệp
# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
0 dự án của mình, như sau:# ../myproject/main.py
# Define global myList
global myList
myList = []
# Imports
import subfile
# Do something
subfile.stuff[]
print[myList[0]]
Tôi đang cố gắng sử dụng
# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
1 trong # ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
2, như sau# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
Một cách khác tôi đã thử, nhưng cũng không hoạt động
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
Và bên trong
# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
2 Tôi đã có điều này:# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
Nhưng một lần nữa, nó không hoạt động. Làm thế nào tôi nên thực hiện điều này? Tôi hiểu rằng nó không thể hoạt động như vậy, khi hai tệp không thực sự biết nhau [cũng không biết chính], nhưng tôi không thể nghĩ ra cách làm điều đó, mà không sử dụng IO Writing hoặc Pickle, mà Tôi không muốn làm.
Martineau
Huy hiệu vàng 116K2525 gold badges160 silver badges285 bronze badges
Đã hỏi ngày 23 tháng 10 năm 2012 lúc 15:54Oct 23, 2012 at 15:54
4
Vấn đề là bạn đã xác định
# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
1 từ # ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
0, nhưng # ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
2 cần sử dụng nó. Dưới đây là một cách sạch sẽ để giải quyết vấn đề này: Di chuyển tất cả các toàn cầu vào một tệp, tôi gọi tệp này # ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
7. Tệp này chịu trách nhiệm xác định toàn cầu và khởi tạo chúng:# settings.py
def init[]:
global myList
myList = []
Tiếp theo,
# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
8 của bạn có thể nhập Globals:# subfile.py
import settings
def stuff[]:
settings.myList.append['hey']
Lưu ý rằng
# ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
8 không gọi ________ 40 Nhiệm vụ đó thuộc về # ../myproject/subfile.py
# Import globfile
import globfile
# Save "hey" into myList
def stuff[]:
globfile.myList.append["hey"]
0:# main.py
import settings
import subfile
settings.init[] # Call only once
subfile.stuff[] # Do stuff with global var
print settings.myList[0] # Check the result
Bằng cách này, bạn đạt được mục tiêu của mình trong khi tránh khởi tạo các biến toàn cầu nhiều lần.
Đã trả lời ngày 23 tháng 10 năm 2012 lúc 16:16Oct 23, 2012 at 16:16
Hai Vuhai VuHai Vu
35K11 Huy hiệu vàng63 Huy hiệu bạc91 Huy hiệu Đồng11 gold badges63 silver badges91 bronze badges
12
Xem tài liệu của Python về việc chia sẻ các biến toàn cầu trên các mô -đun:
Cách kinh điển để chia sẻ thông tin trên các mô -đun trong một chương trình là tạo một mô -đun đặc biệt [thường được gọi là Cấu hình hoặc CFG].
config.py:
x = 0 # Default value of the 'x' configuration setting
Nhập mô -đun cấu hình trong tất cả các mô -đun của ứng dụng của bạn; Các mô -đun sau đó trở thành có sẵn như một tên toàn cầu.
main.py:
import config print [config.x]
Nói chung, don lồng sử dụng từ nhập Modulename *. Làm như vậy củng cố không gian tên của nhà nhập khẩu, và làm cho các linters khó phát hiện các tên không xác định hơn nhiều.don’t use from modulename import *. Doing so clutters the importer’s namespace, and makes it much harder for linters to detect undefined names.
Đã trả lời ngày 12 tháng 8 năm 2017 lúc 4:24Aug 12, 2017 at 4:24
Ogaga Uzohogaga UzohOgaga Uzoh
1.9171 Huy hiệu vàng9 Huy hiệu bạc12 Huy hiệu đồng1 gold badge9 silver badges12 bronze badges
7
Bạn có thể nghĩ về các biến toàn cầu Python là các biến "mô -đun" - và như vậy chúng hữu ích hơn nhiều so với "biến toàn cầu" truyền thống từ C.
Một biến toàn cầu thực sự được xác định trong
# settings.py
def init[]:
global myList
myList = []
2 của mô -đun và có thể được truy cập từ bên ngoài mô -đun đó dưới dạng thuộc tính mô -đun.Vì vậy, trong ví dụ của bạn:
# ../myproject/main.py
# Define global myList
# global myList - there is no "global" declaration at module level. Just inside
# function and methods
myList = []
# Imports
import subfile
# Do something
subfile.stuff[]
print[myList[0]]
And:
# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
0
Morgoth
4.6537 Huy hiệu vàng42 Huy hiệu bạc62 Huy hiệu Đồng7 gold badges42 silver badges62 bronze badges
Đã trả lời ngày 23 tháng 10 năm 2012 lúc 16:04Oct 23, 2012 at 16:04
JSbuenojsbuenojsbueno
89,8K10 Huy hiệu vàng139 Huy hiệu bạc193 Huy hiệu Đồng10 gold badges139 silver badges193 bronze badges
3
Sử dụng
# settings.py
def init[]:
global myList
myList = []
3 nên khắc phục sự cố của bạn. Nó xác định mọi thứ để nó có sẵn trên toàn cầu [ngoại trừ các biến cục bộ trong nhập khẩu tất nhiên].Ví dụ:
# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
1and:
# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
2Đã trả lời ngày 23 tháng 10 năm 2012 lúc 15:59Oct 23, 2012 at 15:59
Đó là ninjait ninjaIT Ninja
6.0369 Huy hiệu vàng41 Huy hiệu bạc64 Huy hiệu đồng9 gold badges41 silver badges64 bronze badges
3
Câu trả lời Hai VU hoạt động tuyệt vời, chỉ một bình luận:
Trong trường hợp bạn đang sử dụng toàn cầu trong mô -đun khác và bạn muốn đặt toàn cầu một cách linh hoạt, hãy chú ý nhập các mô -đun khác sau khi bạn đặt các biến toàn cầu, ví dụ::
# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
3Đã trả lời ngày 23 tháng 12 năm 2015 lúc 9:23Dec 23, 2015 at 9:23
Lastboylastboylastboy
5564 Huy hiệu bạc12 Huy hiệu đồng4 silver badges12 bronze badges
Nỗ lực thứ 2 của bạn sẽ hoạt động hoàn hảo và thực sự là một cách thực sự tốt để xử lý các tên biến mà bạn muốn có sẵn trên toàn cầu. Nhưng bạn có một lỗi tên trong dòng cuối cùng. Đây là cách nó nên như vậy:
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
Xem dòng cuối cùng? Mylist là một attr của globfile, không phải là phụ. Điều này sẽ hoạt động như bạn muốn.
Mike
Đã trả lời ngày 23 tháng 10 năm 2012 lúc 16:08Oct 23, 2012 at 16:08
MikehuntermikehunterMikeHunter
4,0041 Huy hiệu vàng18 Huy hiệu bạc13 Huy hiệu đồng1 gold badge18 silver badges13 bronze badges
0
Dựa trên các câu trả lời và liên kết trên trong tôi đã tạo một mô -đun mới có tên
# settings.py
def init[]:
global myList
myList = []
4:# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
5Sau đó, trong mô -đun chính của tôi, tôi sử dụng điều này:
# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
6Trong một mô -đun nhập khẩu khác, tôi có thể sử dụng:
# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
7Tôi chỉ dành một vài phút để thử nghiệm trong hai chương trình nhiều mô-đun Python khác nhau nhưng cho đến nay nó hoạt động hoàn hảo.
Đã trả lời ngày 7 tháng 7 năm 2021 lúc 0:05Jul 7, 2021 at 0:05
WinEunuuchs2UnixWinEunuuchs2UnixWinEunuuchs2Unix
1.5821 Huy hiệu vàng15 Huy hiệu bạc28 Huy hiệu đồng1 gold badge15 silver badges28 bronze badges
Tôi vừa bắt gặp bài đăng này và nghĩ đến việc đăng giải pháp của mình, chỉ trong trường hợp bất kỳ ai ở trong tình huống tương tự như tôi, nơi có khá nhiều tập tin trong chương trình được phát triển và bạn không có thời gian để suy nghĩ toàn bộ Nhập trình tự các mô -đun của bạn [nếu bạn không nghĩ về điều đó ngay từ đầu, chẳng hạn như tôi đã làm].
Trong những trường hợp như vậy, trong tập lệnh mà bạn bắt đầu [các] toàn cầu của mình, chỉ cần mã hóa một lớp có nội dung như:
# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
8và sau đó sử dụng, thay vì dòng trong tập lệnh mà bạn đã bắt đầu
# ../myproject/subfile.py
# Save "hey" into myList
def stuff[]:
globals[]["myList"].append["hey"]
9sử dụng
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
0Sau đó tôi đã có thể truy xuất / thay đổi các giá trị của bất kỳ thế giới nào trong số này thông qua
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
1Trong bất kỳ tập lệnh nào và những thay đổi này cũng tự động được áp dụng cho tất cả các tập lệnh khác bằng cách sử dụng chúng. Tất cả đều hoạt động, bằng cách sử dụng các báo cáo nhập khẩu chính xác mà trước đây đã thất bại, do các vấn đề được đề cập trong bài đăng / thảo luận này ở đây. Tôi chỉ đơn giản nghĩ về các thuộc tính của đối tượng toàn cầu đang thay đổi một cách linh hoạt mà không cần phải xem xét / thay đổi bất kỳ logic nhập khẩu nào, so với việc nhập đơn giản các biến toàn cầu và đó chắc chắn là cách tiếp cận nhanh nhất và dễ nhất [để truy cập sau này] để giải quyết loại vấn đề này cho tôi.
Đã trả lời ngày 28 tháng 10 năm 2020 lúc 18:04Oct 28, 2020 at 18:04
DeveljoedeveljoeDevelJoe
6761 Huy hiệu vàng7 Huy hiệu bạc17 Huy hiệu đồng1 gold badge7 silver badges17 bronze badges
Những cơn ác mộng không gian tên phát sinh khi bạn làm
# settings.py
def init[]:
global myList
myList = []
5. Điều đó không thể bị căng thẳng đủ.Bạn có thể sử dụng
# settings.py
def init[]:
global myList
myList = []
6 ở những nơi khác.Bạn thậm chí có thể có một mô -đun cấu hình hoàn toàn trống.
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
2# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
3# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
4result:
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
5Nhưng sử dụng các đối tượng bạn kéo vào với
# settings.py
def init[]:
global myList
myList = []
6 sẽ đưa bạn xuống một con đường thất vọng.# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
6result:
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
7Và có lẽ bạn sẽ cố gắng sửa nó như thế này:
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
8result:
# ../myproject/main.py
# Import globfile
import globfile
# Save myList into globfile
globfile.myList = []
# Import subfile
import subfile
# Do something
subfile.stuff[]
print[globfile.myList[0]]
9Và sau đó có thể bạn sẽ tìm thấy trang này và cố gắng giải quyết nó bằng cách thêm một phương thức init [].
Nhưng toàn bộ vấn đề là
# settings.py
def init[]:
global myList
myList = []
6.Đã trả lời ngày 12 tháng 9 năm 2021 lúc 20:38Sep 12, 2021 at 20:38
Qelqelqel
8647 Huy hiệu bạc7 Huy hiệu đồng7 silver badges7 bronze badges