Python chuyển biến giữa các mô-đun

otugaPosts. 65Tham gia. Thứ hai 12 Tháng bảy 2021 7. 41 giờ chiều

biến toàn cục giữa các mô-đun

  • Trích dẫn

T3 06/09/2022 10. 08 giờ sáng

Tôi đang gặp khó khăn khi sử dụng các biến toàn cục với python. đây là cấu trúc mã của tôi.

nhà\chính. py
home\data\variables. py
home\khởi tạo\khởi tạo. py
chính. p

Mã số. Chọn tất cả

from source.initialization  import Init
from data.variables import start_time

   if __name__ == "__main__":
      global start_time
      Init[]
      print["Main -> start time: "+ str[start_time]]
     

biến. py

Mã số. Chọn tất cả

start_time = 0

khởi tạo. py

Mã số. Chọn tất cả

from data.global_variables import start_time

def Init[]:
   global start_time
   start_time = 100
   print["Initialization -> start Time: " + str[start_time]]
   

my output is:

2022-09-06 10:37:52.333199 --> Initialization -> start Time: 100
2022-09-06 10:37:52.336050 --> Main -> start time: 0

What am I doing wring? why is start_time not passing through?

Lần sửa cuối bởi otuga vào Thứ ba, ngày 06 tháng 9 năm 2022 10. 49 giờ sáng, tổng cộng đã chỉnh sửa 1 lần

ghpPosts. 2927Đã tham gia. Thứ tư 12 Tháng sáu 2013 12. 41 giờ chiềuĐịa điểm. Stuttgart Đức

Lại. biến toàn cục giữa các mô-đun

  • Trích dẫn

T3 06/09/2022 1. 55 giờ chiều

Hmmm, có một số sự cố không mong muốn khi chạy mã.
Tệp "chính. py", dòng 4
if __name__ == "__main__".
Lỗi thụt đầu dòng. thụt lề không mong muốn

Đã sửa lỗi này, sau đó
Truy xuất lại [lần gọi gần đây nhất].
Tệp "chính. py", dòng 1, trong
từ nguồn. khởi tạo import Init
ModuleNotFoundError. Không có mô-đun nào có tên là 'nguồn'
Không có mô-đun nào có tên là nguồn. Thay đổi từ "nguồn. init init" thành "từ init init khởi tạo"

Sau đó
Truy xuất lại [lần gọi gần đây nhất].
Tệp "chính. py", dòng 1, trong
từ quá trình khởi tạo import Init
ImportError. không thể nhập tên 'Init' từ 'khởi tạo' [vị trí không xác định]
Đã sửa lỗi này thành "từ khởi tạo. khởi tạo import Ban đầu"

Sau đó
Truy xuất lại [lần gọi gần đây nhất].
Tệp "chính. py", dòng 1, trong
từ quá trình khởi tạo. nhập khởi tạo Init
Tệp "khởi tạo\khởi tạo. py", dòng 1, trong
từ dữ liệu. global_variables nhập start_time
ModuleNotFoundError. Không có mô-đun nào có tên 'dữ liệu. global_variables'
Đã sửa lỗi này thành "từ dữ liệu. biến nhập start_time"

Sau đó, ít nhất không có Ngoại lệ trong khi thực thi.

Các biến.
chính. py, "từ dữ liệu. biến nhập start_time" nhập biến vào chính. global[] và có giá trị ban đầu.
khởi tạo. py, "từ dữ liệu. biến nhập start_time" nhập biến vào khởi tạo. global[] và có giá trị ban đầu. Thay đổi biến trong Init[] chỉ sửa đổi khởi tạo. start_time, vì vậy cái hiện có trong mô-đun.

Một giải pháp khả thi. thay vì "từ nhập khẩu này" sử dụng tên đầy đủ đủ điều kiện.
khởi tạo. p

Mã số. Chọn tất cả

# just for analysis
from data.variables import start_time
# better
import data.variables

print["initialization.start_time", start_time]

def Init[]:
   global start_time
   print["start_time", start_time]
   # changes the module's variable only
   start_time = 100
   data.variables.start_time = 101
   print["Init[] start_time ", start_time]
   print["Init[] data.variables.start_time  ", data.variables.start_time]

chính. py

Mã số. Chọn tất cả

# for analysis only
from initialization.initialization  import Init
from data.variables import start_time
# better
import initialization.initialization
import data.variables

if __name__ == "__main__":
    Init[]
    print["---------- results"]
    print["main -> start time: ", start_time]
    print["main -> data.variables.start time: ", data.variables.start_time]
    print["main -> initialization.initialization.start time: ", initialization.initialization.start_time]

It is pretty clear that by using improper import there are three 'start_time' variables in the modules [happily causing confusion].

Thay vì chuyển UserId trực tiếp cùng với một hành động của máy chủ [thực sự có thể bị thao túng], tôi kiểm tra UserId khi đăng nhập và thực hiện một Hành động máy chủ từ lõi trong khi chuyển "CustomerId". CustomerId này được ánh xạ tới UserId trong chính Ứng dụng web và trước khi gửi CustomerId tới Core Server Action, nó được kiểm tra xem người dùng đã đăng nhập có thực sự được phép gửi CustomerId đó tới core hay không

Sau đó, trong cốt lõi, tôi lọc theo CustomerId [điều mà dù sao tôi cũng phải làm, vì tôi không có "UserId trong bất kỳ Thực thể nào của mình].  

Tôi cũng dự định thực hiện một kiểm tra khác trong chính Hành động máy chủ lõi để kiểm tra xem CustomerId đã qua có bị thao túng hay không, nhưng hiện tại điều này đã giải quyết được sự cố của tôi

Các biến toàn cầu có được chia sẻ giữa các mô-đun không?

Tôi có thể chia sẻ biến toàn cục trên các tệp khác nhau không? . the global variable is unique to its own module.

Làm cách nào để biến một biến có thể truy cập được đối với tất cả các hàm trong Python?

Thông thường, khi bạn tạo một biến bên trong một hàm, biến đó là cục bộ và chỉ có thể được sử dụng bên trong hàm đó. Để tạo một biến toàn cục bên trong một hàm, bạn có thể sử dụng từ khóa toàn cầu .

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

Một trong những điểm mạnh của Python là có nhiều tiện ích bổ sung tích hợp sẵn - hoặc mô-đun - chứa các hàm, lớp và biến hiện có which allow you to do complex tasks in only a few lines of code.

Sử dụng biến toàn cục trong Python có ổn không?

Việc sử dụng biến toàn cục trong python được coi là thông lệ không tốt và thường nên tránh . Thay vào đó, người dùng có thể thử và sử dụng tham số để truyền giá trị vào hàm hoặc trả về giá trị để lấy giá trị đó.

Chủ Đề