Cách lấy một biến từ một tập lệnh python khác

làm cách nào để nhập một biến trong một tệp python khác mà không cần nhập các hàm của nó, vd. = kịch bản1. py print["cái gì đó"] số nguyên = 123 script2. py nhập script1 print[script1. số nguyên] nếu tôi chạy tập lệnh 2, tôi nhận được thứ gì đó 123

Trong trường hợp đơn giản nhất, chúng tôi viết mã trong một tệp Python [tên tệp kết thúc bằng. py]. Chúng tôi chạy nó và mọi thứ hoạt động như mong đợi, và chúng tôi rất vui. Tuy nhiên, mọi thứ có thể trở nên phức tạp một chút khi bạn phải chia mã của mình thành nhiều tệp Python, thường là để dễ đọc và quản lý mã hơn. Trong bài viết này, tôi sẽ hướng dẫn bạn một số sai lầm phổ biến mà tôi đã mắc phải và tôi hy vọng bạn sẽ không mắc phải những sai lầm giống như tôi.

Trong Python, mỗi tệp Python thực sự có một thuật ngữ cụ thể được gọi là “Mô-đun” và khi bạn sử dụng cú pháp import nổi tiếng, bạn đang xây dựng kết nối giữa một số mô-đun Python khác nhau để đạt được một nhiệm vụ phức tạp trong ngữ cảnh của mình. Ở đây, tôi sẽ minh họa các chủ đề sau

  1. Mỗi tệp có biến toàn cục riêng
  2. Hàm luôn ghi nhớ nơi nó được tạo
  3. Python là "vượt qua tham chiếu"
  4. Sử dụng một tệp riêng để giữ biến TOÀN CẦU trên nhiều tệp Python

Nếu chúng là thứ bạn muốn biết thêm một chút, hãy tiếp tục đọc

Mỗi Mô-đun/tệp có biến toàn cục riêng

Khi bạn tạo một biến [không nằm trong hàm] trong tệp Python, bạn gắn biến này vào không gian tên của mô-đun hiện tại. Mọi lệnh trong tệp Python này đều có thể truy cập, đọc và sửa đổi giá trị của biến, nghĩa là nó trở thành biến toàn cục. Bạn cũng có thể tạo một biến được xác định rõ ràng trong các hàm trên toàn cục bằng cách khai báo nóglobal.

tạo một biến cục bộ toàn cầu [hình ảnh của tác giả]

Tuy nhiên, các biến toàn cục không được chia sẻ trên các tệp Python khác nhau. Để minh họa điều đó, chúng ta hãy xem ví dụ sau

Các biến toàn cục là duy nhất cho mỗi mô-đun [hình ảnh của tác giả]

Logic rất rõ ràng, tôi đã định nghĩa một hàm trong sub_module.py và thử gọi nó trong tệp main.py. Có vẻ như tôi đã định nghĩa biến num=5 trong tệp main.py nhưng hóa ra hàm không thể truy cập vào nó, lý do là sub_module.py không thể truy cập biến toàn cục trong các mô-đun Python khác, vì vậy chương trình không nhìn thấy biến num=5. Làm thế nào để sửa chữa nó?

Xác định một biến trong sub_module. py [hình ảnh của tác giả]Hàm Python luôn ghi nhớ nơi nó được tạo

Tôi không chắc liệu bạn có từng gặp bất kỳ sự nhầm lẫn nào về ví dụ trên không?

Nhưng hàm Python luôn biết nó được tạo ở đâu. Mặc dù có vẻ như test_func1 thuộc về main.py, nhưng nó vẫn thuộc về sub_module.py khi được thực thi vì đây là nơi nó được tạo ra. Bây giờ đến một lời khuyên thiết thực hữu ích khác

Hãy nhớ nhập các gói cần thiết trong mô-đun phụ

Quên nhập NumPy trong mô-đun phụ [hình ảnh của tác giả]

Trong ví dụ trên, vì chúng tôi quên nhập gói NumPy trong sub_module.py, mặc dù chúng tôi đã nhập gói này trong main.py nhưng test_func1 vẫn không thể truy cập được. Bây giờ chúng ta hãy sửa nó

cũng nhập gói Numpy trong mô-đun phụ [hình ảnh của tác giả] Truyền theo tham chiếu so với Truyền theo giá trị

Ví dụ đầu tiên hoạt động, nhưng có vẻ lạ, phải không? . Cách phổ biến để giải quyết vấn đề này thực sự là thêm num làm đối số trong test_func1 và cũng chuyển num=5 cho hàm khi gọi nó trong tệp main.py

Truyền biến làm đối số [hình ảnh của tác giả]

Bây giờ câu hỏi là, làm thế nào để làm như vậy khiến sub_module.py nhận ra vị trí của num? . Để minh họa, hãy xem điều gì đang thực sự xảy ra khi bạn gọi hàm

Chuyển theo tham chiếu so với chuyển theo giá trị [hình ảnh của tác giả]

Khi bạn nhập num=5 vào main.py , về cơ bản, bạn tạo một sub_module.py7 với kiểu số nguyên nằm trong một phần bộ nhớ vật lý và bạn sử dụng tên num để trỏ đến phần bộ nhớ vật lý này. Bây giờ vì Python luôn chuyển qua tham chiếu, vì vậy bạn có thể nghĩ về test_func1 sẽ biết tên num trỏ đến đâu. Kết quả là, nó sẽ có quyền truy cập vào main.py1 5 vì nó thực sự biết giá trị này nằm ở đâu

Tôi có thể có một biến toàn cầu được chia sẻ trên các tệp khác nhau không?

Như chúng ta đã thảo luận, biến toàn cục là duy nhất cho mô-đun của chính nó. Nhưng đôi khi chúng tôi thực sự muốn có một biến TOÀN CẦU có thể được truy cập, sửa đổi bởi mọi tệp Python trong thư mục. Cách kinh điển để đạt được điều này là tạo một tệp khác với các biến TOÀN CẦU của bạn

Một tệp riêng để giữ biến TOÀN CẦU [hình ảnh của tác giả]

Tôi cố ý làm cho ví dụ này hơi phức tạp; . Nhưng trong tệp main.py, tôi cũng đã tạo một tệp num=5. Nó có thể cho bạn biết sự khác biệt mặc dù cả hai đều được đặt tên là num, nhưng chúng ở một phạm vi khác. Trong main.py , chúng tôi sửa đổi biến TOÀN CẦU này bằng cách thêm 1 và thay đổi cũng sẽ được phản ánh trong sub_module.py. Lưu ý ở đây tôi phải nhập main.py9 trong hàm num=50 vì nếu tôi đặt cú pháp nhập ở đầu, thì num nó được nhập sẽ là cú pháp trước khi thực hiện dòngnum=52. Hãy nhớ rằng, num=53 đã được thực thi trong dòng num=54 , chúng ta có thể kiểm tra nó trong ví dụ sau

Thứ tự cú pháp nhập rất quan trọng [hình ảnh của tác giả]

Như bạn đã thấy, bây giờ mặc dù biến toàn cục num đã tăng thêm 1, nhưng nó không được phản ánh trong sub_module.py do biến mà họ đã nhập đến từ trước khi thực hiện thao tác. Khi nhập, Python sẽ tự động tạo một bản sao cho bạn để num=57 cũ và num=57 mới nằm trong bộ nhớ vật lý hoàn toàn khác

Sự kết luận

Dưới đây là một số phương pháp hay nhất khi xử lý nhiều tệp Python

  1. Truyền biến làm đối số, vì Python “truyền theo tham chiếu”, điều này đảm bảo rằng mô-đun con của bạn có thể truy cập vào biến mà bạn đã truyền
  2. Đừng quên nhập gói cần thiết trong mô-đun phụ, vì chức năng luôn ghi nhớ nơi nó được tạo
  3. Sử dụng một tệp riêng để giữ biến TOÀN CẦU trên các mô-đun Python nhưng hãy nhớ rằng việc nhập biến TOÀN CẦU sẽ tạo một bản sao của biến gốc, vì vậy hãy luôn kiểm tra xem bạn có đang tham khảo đúng biến trong chương trình của mình không

Đó là về nó. Tôi hy vọng bạn thấy bài viết này thú vị và hữu ích, cảm ơn vì đã đọc. Nếu bạn thích bài viết này, hãy theo dõi tôi trên phương tiện, cảm ơn bạn rất nhiều vì sự ủng hộ của bạn. Kết nối với tôi trên Twitter hoặc LinkedIn của tôi, đồng thời vui lòng cho tôi biết nếu bạn có bất kỳ câu hỏi nào hoặc loại hướng dẫn nào bạn muốn xem trong tương lai

Tôi có thể nhập một biến từ một tệp Python khác không?

Nhập các biến từ một tệp khác trong cùng một thư mục

Làm cách nào để đọc biến từ tệp py?

Để đọc một tệp văn bản trong Python, bạn làm theo các bước sau. Đầu tiên, mở một tệp văn bản để đọc bằng hàm open[]. Thứ hai, đọc văn bản từ tệp văn bản bằng phương thức tệp read[] , readline[] hoặc readlines[] của đối tượng tệp. Thứ ba, đóng tệp bằng phương thức đóng tệp []

Chủ Đề