Hướng dẫn how do you share a variable across a module in python? - làm thế nào để bạn chia sẻ một biến trên một mô-đun trong python?

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.

Hướng dẫn how do you share a variable across a module in python? - làm thế nào để bạn chia sẻ một biến trên một mô-đun trong python?

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

Hướng dẫn how do you share a variable across a module in python? - làm thế nào để bạn chia sẻ một biến trên một mô-đun trong python?

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")
1

and:

# ../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")
5

Sau đó, 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")
6

Trong 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")
7

Tô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

Hướng dẫn how do you share a variable across a module in python? - làm thế nào để bạn chia sẻ một biến trên một mô-đun trong python?

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")
8

và 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")
9

sử 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])
0

Sau đó 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])
1

Trong 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])
4

result:

# ../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])
5

Như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])
6

result:

# ../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])
7

Và 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])
8

result:

# ../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])
9

Và 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

Hướng dẫn how do you share a variable across a module in python? - làm thế nào để bạn chia sẻ một biến trên một mô-đun trong python?

Qelqelqel

8647 Huy hiệu bạc7 Huy hiệu đồng7 silver badges7 bronze badges

Làm thế nào để bạn truy cập một biến từ mô -đun này sang mô -đun khác trong Python?

Để nhập các biến từ một tệp khác, chúng tôi phải nhập tệp đó từ chương trình hiện tại ...
Nhập và sau đó sử dụng. để truy cập biến ..
từ nhập và sử dụng các biến ..
từ nhập * và sau đó sử dụng các biến trực tiếp ..

Làm thế nào để bạn tạo một biến được chia sẻ trong Python?

Ví dụ: trước tiên chúng ta có thể tạo một hàng đợi. Với chức năng của chúng ta, chúng ta có thể xác định biến cục bộ của mình và gán một số giá trị. Chúng ta có thể chia sẻ biến cục bộ của chúng ta với một chủ đề khác bằng cách đặt nó vào hàng đợi.Thể hiện hàng đợi sau đó có thể được chia sẻ với một chủ đề khác có thể thực thi một số chức năng khác.create a queue. Within our function, we can define our local variable and assign it some value. We can then share our local variable with another thread by putting it in a queue. The queue instance can then be shared with another thread that may execute some other function.

Các mô -đun Python có thể có biến không?

Mỗi mô -đun/tệp có biến toàn cầu riêng mà mỗi lệnh trong tệp Python này có thể truy cập, đọc và sửa đổi giá trị của biến, nghĩa là nó trở thành một biến toàn cầu.Bạn cũng có thể làm rõ một biến được xác định trong các chức năng trên toàn cầu bằng cách tuyên bố nó toàn cầu. Every command in this Python file can access, read, and modify the value of the variable, that is, it becomes a global variable. You can also explicitly make a variable defined within the functions globally by declaring it global.

Các biến toàn cầu trên các mô hình trong Python là gì?

Biến toàn cầu trong Python là gì?Trong thế giới lập trình, một biến toàn cầu trong Python có nghĩa là có một phạm vi trong suốt chương trình, tức là, một giá trị biến toàn cầu có thể truy cập được trong suốt chương trình trừ khi bị che mờ.Một biến toàn cầu trong Python thường được tuyên bố là đỉnh của chương trình.having a scope throughout the program, i.e., a global variable value is accessible throughout the program unless shadowed. A global variable in Python is often declared as the top of the program.