Hướng dẫn how do you access a variable from one module to another in python? - làm cách nào để bạn truy cập một biến từ mô-đun này sang mô-đun khác trong python?

Tôi tự hỏi liệu có thể tránh được một số nhược điểm của việc sử dụng các biến toàn cầu không (xem ví dụ: http://wiki.c2.com/?globalvariablesarebad) bằng cách sử dụng không gian tên lớp thay vì không gian tên toàn cầu/mô -đun để truyền các giá trị của các biến . Mã sau đây chỉ ra rằng hai phương thức về cơ bản là giống hệt nhau. Có một lợi thế nhỏ trong việc sử dụng các không gian tên lớp như được giải thích dưới đây.

Các đoạn mã sau cũng cho thấy các thuộc tính hoặc biến có thể được tạo động và xóa trong cả không gian tên toàn cầu/mô -đun và không gian tên lớp.

wall.py

# Note no definition of global variables

class router:
    """ Empty class """

Tôi gọi mô -đun này là 'tường' vì nó được sử dụng để thoát ra các biến. Nó sẽ hoạt động như một không gian để định nghĩa tạm thời các biến toàn cầu và các thuộc tính toàn lớp của bộ định tuyến 'lớp trống'.

source.py

import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg

Mô -đun này nhập tường và xác định một hàm duy nhất

import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg
1 xác định thông báo và phát ra nó theo hai cơ chế khác nhau, một qua toàn cầu và một thông qua hàm bộ định tuyến. Lưu ý rằng các biến
import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg
2 và
import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg
3 được xác định ở đây lần đầu tiên trong các không gian tên tương ứng của chúng.

dest.py

import wall
def destfn():

    if hasattr(wall, 'msg'):
        print 'global: ' + wall.msg
        del wall.msg
    else:
        print 'global: ' + 'no message'

    if hasattr(wall.router, 'msg'):
        print 'router: ' + wall.router.msg
        del wall.router.msg
    else:
        print 'router: ' + 'no message'

Mô -đun này xác định một hàm

import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg
4 sử dụng hai cơ chế khác nhau để nhận các thông điệp được phát ra bởi nguồn. Nó cho phép khả năng biến 'MSG' có thể không tồn tại.
import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg
4 cũng xóa các biến khi chúng đã được hiển thị.

main.py

import source, dest

source.sourcefn()

dest.destfn() # variables deleted after this call
dest.destfn()

Mô -đun này gọi các hàm được xác định trước đó theo trình tự. Sau cuộc gọi đầu tiên đến

import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg
6, các biến
import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg
2 và
import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg
8 không còn tồn tại.

Đầu ra từ chương trình là:

Toàn cầu: Xin chào Thế giới! Bộ định tuyến: Xin chào Thế giới! Toàn cầu: Không có bộ định tuyến tin nhắn: Không có tin nhắn
router: Hello world!
global: no message
router: no message

Các đoạn mã trên cho thấy các cơ chế biến/lớp/lớp toàn cầu và lớp học về cơ bản là giống hệt nhau.

Nếu rất nhiều biến được chia sẻ, ô nhiễm không gian tên có thể được quản lý bằng cách sử dụng một số mô-đun loại tường, ví dụ: Wall1, Wall2, v.v. hoặc bằng cách xác định một số lớp loại bộ định tuyến trong một tệp. Loại thứ hai hơi gọn gàng hơn, vì vậy có lẽ đại diện cho một lợi thế cận biên để sử dụng cơ chế biến thể lớp.

3 Câu trả lời cho câu hỏi này.

Cách tốt nhất để chia sẻ các biến toàn cầu trên các mô -đun trên một chương trình là tạo mô -đun cấu hình. & NBSP; chỉ cần nhập mô -đun cấu hình trong tất cả các mô -đun trong ứ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.

config.py

x = 0

mod.py:

import config
config.x = 1

main.py:

import config
import mod
print(config.x)

Hy vọng nó hoạt động!!

Nếu bạn là người mới bắt đầu và cần biết thêm về Python, thì bạn nên tham gia Chứng nhận & NBSP; Python & NBSP; khóa học hôm nay.

Thanks!

Hướng dẫn how do you access a variable from one module to another in python? - làm cách nào để bạn truy cập một biến từ mô-đun này sang mô-đun khác trong python?
Đã trả lời ngày 24 tháng 7 năm 2019by Faiza Jul 24, 2019 by Faiza

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). Chỉ cần nhập mô -đun cấu hình trong tất cả các mô -đun trong ứ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. Bởi vì chỉ có một trường hợp của mỗi mô -đun, bất kỳ thay đổi nào được thực hiện đối với đối tượng mô -đun được phản ánh ở mọi nơi. Ví dụ:

config.py:

x = 0   # Default value of the 'x' configuration setting

mod.py:

import config
config.x = 1

main.py:

import wall
def sourcefn():
    msg = 'Hello world!'
    wall.msg = msg
    wall.router.msg = msg
0

Lưu ý rằng sử dụng một mô -đun cũng là cơ sở để thực hiện mẫu thiết kế Singleton, vì lý do tương tự.

  1. :

.

Hướng dẫn how do you access a variable from one module to another in python? - làm cách nào để bạn truy cập một biến từ mô-đun này sang mô-đun khác trong python?
Đã trả lời ngày 15 tháng 12 năm 2020by Roshni • & NBSP; 10,520 điểm Dec 15, 2020 by Roshni
• 10,520 points

Các câu hỏi liên quan trong Python