Máy Tính

Python biến toàn cục và cục bộ

Tác Giả: Peter Berry
Ngày Sáng TạO: 15 Tháng BảY 2021
CậP NhậT Ngày Tháng: 1 Tháng Sáu 2024
Anonim
CS224W: Machine Learning with Graphs | 2021 | Lecture 13.3 - Louvain Algorithm
Băng Hình: CS224W: Machine Learning with Graphs | 2021 | Lecture 13.3 - Louvain Algorithm

NộI Dung

Tôi là một nhà phát triển phần mềm rất quan tâm đến phân tích và thống kê dữ liệu.

Các biến toàn cục là những biến được khai báo bên ngoài phạm vi hàm nhưng có thể được sử dụng trong một hàm. Để khai báo và sử dụng một biến toàn cục, chúng ta có thể sử dụng từ khóa “global” trước tên biến.

Hãy để chúng tôi cố gắng hiểu khái niệm tốt hơn với sự trợ giúp của một số ví dụ.

Biến được xác định bên trong chức năng và được sử dụng bên ngoài nó

Hãy xem xét đoạn mã sau.

#! / usr / bin / python3 def myFunct (): a = 20 print (a) myFunct () print (a)

Mã sẽ dẫn đến Lỗi tên vì biến a chỉ hiển thị đối với hàm có tên myFunct. Việc in (a) ở cuối chương trình không thành công vì chương trình giả định rằng biến chưa được xác định. Điều này là do biến "a" là cục bộ của hàm có tên myFunct ().


Đầu ra của chương trình trên sẽ là: Traceback (lần gọi gần đây nhất): 20 Tệp "G: workspaces py_ws MyProj org pythontutorials globalvslocal globalAndLocal.py", dòng 13, in (a) NameError: name 'a' không được xác định

Chúng ta có thể thêm global a vào myFunct () trước khi thiết lập và in giá trị để làm cho mã hoạt động. Hãy xem xét mã nâng cao bên dưới:

#! / usr / bin / python3 def myFunct (): global aa = 20 print ("Inside myfunct (): a =", a) myFunct () print ("Giá trị của một lệnh gọi sau lần đầu tiên đến myFunct: a =", a) a = 10 print ("Sau khi đặt giá trị mới bên ngoài myFunct: a =", a) myFunct () print ("Sau khi gọi myFunct lần thứ hai: a =", a)

Đầu ra của đoạn mã trên sẽ như sau:

Inside myfunct (): a = 20 Giá trị sau lần gọi đầu tiên đến myFunct: a = 20 Sau khi đặt giá trị mới bên ngoài myFunct: a = 10 Inside myfunct (): a = 20 Sau khi gọi myFunct lần thứ hai: a = 20

Biến được xác định bên ngoài chức năng và được sử dụng bên trong nó

Chúng ta hãy xem xét một ví dụ khác:


#! / usr / bin / python3 def callMe (): print (msg) msg ​​= "Called" msg = "Đang gọi ..." callMe () print (msg)

Điều gì sẽ xảy ra nếu chúng ta thực thi mã? Nó sẽ chạy thành công?
Đầu ra của đoạn mã trên sẽ giống như sau:

Traceback (cuộc gọi gần đây nhất): Tệp "G: workspaces py_ws MyProj org pythontutorials globalvslocal scopedOutside.py", dòng 12, trong Tệp callMe () "G: workspaces py_ws MyProj org pythontutorials globalvslocal scopedOutside.py ", dòng 8, trong (các) callMe print UnboundLocalError: biến cục bộ 'msg' được tham chiếu trước khi chuyển nhượng

Nếu chúng ta kiểm tra kỹ mã, chúng ta có thể thấy rằng biến msg được gán giá trị "Đang gọi" bên ngoài hàm callMe. Sau đó callMe () được gọi. Mặc dù msg được khai báo bên ngoài hàm trước khi nó được gọi, Python vẫn "giả định" rằng chúng ta muốn một biến cục bộ do việc gán cho msg bên trong callMe (), vì vậy câu lệnh print sẽ ném ra thông báo lỗi này.

Thông thường, một biến được sử dụng bên trong một chức năng được coi là một biến cục bộ, nếu nó chưa được khai báo là một biến toàn cục.


Để khắc phục lỗi, chúng tôi cần sửa đổi mã như sau:

#! / usr / bin / python3 def callMe (): global msg print (msg) msg ​​= "Called" msg = "Đang gọi ..." callMe () print (msg)

Bây giờ, nó sẽ in "Đang gọi" và "Đã gọi" trong hai dòng riêng biệt như dự định. Đầu ra cho chương trình trên sẽ như sau:

Đang gọi ... Đã gọi

Các biến bên trong các hàm lồng nhau

Có thể xác định một hàm bên trong một hàm khác. Các hàm như vậy được gọi là các hàm lồng nhau.

Hãy xem xét đoạn mã sau:

#! / usr / bin / python3 def external (): x = 10 def inner (): global xx = 2 print ("Trước khi gọi hàm inner (): x =", x) print ("Đang gọi hàm inner () ngay .. . ") bên trong () print (" Sau khi gọi nội (): x = ", x) bên ngoài () print (" x trong hàm chính: "+ str (x))

Đầu ra của đoạn mã trên sẽ là:

Trước khi gọi nội (): x = 10 Gọi nội () bây giờ ... Sau khi gọi nội (): x = 10 x trong hàm chính: 2

Trong chương trình trên, giá trị của x được giữ lại là 10 trong hàm ngoài () bất kể nội () làm gì với biến. Sau khi gọi nội (), một biến toàn cục tồn tại với giá trị 2. Vì ngoài () gọi đến inner (), câu lệnh print trong main in ra giá trị được gán cho một biến toàn cục bởi inner ().

Phổ BiếN Trên CổNg Thông Tin

Đề XuấT Cho BạN

Hơn 150 trích dẫn và ý tưởng chú thích mì Ramen cho Instagram
Internet

Hơn 150 trích dẫn và ý tưởng chú thích mì Ramen cho Instagram

Cheeky Kid là một người dùng mạng dành nhiều thời gian để duyệt web, nắm bắt thông tin vô hạn và thích giải trí và vui chơi.Không quan trọng là b...
Cách tạo video với Camtasia
Máy Tính

Cách tạo video với Camtasia

Amelia có hơn 25 năm kinh nghiệm trong ngành CNTT, Đào tạo và Giáo dục, và Học trực tuyến.Camta ia tudio là một chương trình phần mềm quay phim màn hì...