Hướng dẫn python global variable in for loop - biến toàn cục python trong vòng lặp for

Mã này đưa ra lỗi:

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
9 Nhưng
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
0 được khởi tạo rõ ràng vì nếu tôi nhận xét dòng bên dưới câu lệnh in, nó không có lỗi và in
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
1 như mong đợi. Tôi không hiểu điều gì đó về Python ?? Những gì đang xảy ra ở đây?

LINES = []

def foo[]:
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]

hỏi ngày 15 tháng 7 năm 2013 lúc 0:05Jul 15, 2013 at 0:05

Anthonybellanthonybellanthonybell

5.5307 Huy hiệu vàng41 Huy hiệu bạc59 Huy hiệu Đồng7 gold badges41 silver badges59 bronze badges

Bạn có thể truy cập biến toàn cầu từ bên trong

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
2, nhưng bạn không thể sử dụng từ khóa
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
3

Vì vậy, bạn có thể sử dụng

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
4 hoặc
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
5 vì chúng chỉ đơn thuần là sửa đổi danh sách các dòng tham chiếu.

Khi bạn cố gắng gán cho

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
0 bằng cách sử dụng
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
7, Python biết rằng nó cần tạo một mục nhập cho các dòng trong các biến cục bộ các chức năng. Vì bạn đang cố gắng sử dụng
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
8 trước khi gán bất cứ điều gì cho biến cục bộ, nó gây ra lỗi

Bạn có thể kiểm tra

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
2 như thế này

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']

Nếu bạn xác định

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
2 một lần nữa mà không có
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
7, bạn sẽ thấy Python không còn đánh dấu nó là một biến cục bộ.

Đã trả lời ngày 15 tháng 7 năm 2013 lúc 0:17Jul 15, 2013 at 0:17

John La Rooyjohn La RooyJohn La Rooy

Phù bằng vàng 287K5151 gold badges359 silver badges500 bronze badges

Bạn cần sử dụng từ khóa

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
3:

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

Nếu không, Python sẽ nghĩ rằng

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
0 là cục bộ và in ra giá trị trước khi đặt nó thành
LINES = []
4 sẽ là một vấn đề

Bạn có thể nhận được giá trị của biến toàn cầu

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
0 bằng cách in nó ra, nhưng khi bạn có câu lệnh

LINES = []

trong đó cố gắng đặt

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
0 thành một danh sách mới, Python diễn giải nó như một biến cục bộ

Đã trả lời ngày 15 tháng 7 năm 2013 lúc 0:07Jul 15, 2013 at 0:07

1

Như mong muốn đăng nhập,

Vì bạn gán cho các dòng trong hàm ví dụ của mình, Python biết không sử dụng biến toàn cầu, nhưng bạn cố gắng truy cập biến này trước khi bạn xác định nó.

Đây không phải là kết thúc, bạn có thể khắc phục điều này bằng cách sử dụng từ khóa toàn cầu, nói với Python rằng

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
0 trong hàm giống như
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
0 bên ngoài hàm.

Try:

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]

Đã trả lời ngày 15 tháng 7 năm 2013 lúc 0:27Jul 15, 2013 at 0:27

CharmoniumqcharmoniumqcharmoniumQ

5.0544 Huy hiệu vàng30 Huy hiệu bạc49 Huy hiệu đồng4 gold badges30 silver badges49 bronze badges

Python trước tiên sẽ xem xét phạm vi hàm cho biến của bạn, trước khi nó nhìn vào phạm vi toàn cầu [cấp độ mô -đun]. Vì bạn gán cho

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
0 trong chức năng ví dụ của mình, Python biết không sử dụng biến toàn cầu, nhưng bạn cố gắng truy cập biến này trước khi bạn xác định nó. Bạn nên khởi tạo
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
0 trước câu lệnh in hoặc bỏ câu lệnh
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
7.

Đã trả lời ngày 15 tháng 7 năm 2013 lúc 0:20Jul 15, 2013 at 0:20

Biến toàn cầu

Trong Python, một biến được khai báo bên ngoài hàm hoặc trong phạm vi toàn cầu được gọi là biến toàn cầu. Điều này có nghĩa là một biến toàn cầu có thể được truy cập bên trong hoặc bên ngoài hàm.

Hãy xem một ví dụ về cách một biến toàn cầu được tạo ra trong Python.

Ví dụ 1: Tạo một biến toàn cầu

x = "global"

def foo[]:
    print["x inside:", x]


foo[]
print["x outside:", x]

Đầu ra

x inside: global
x outside: global

Trong mã trên, chúng tôi đã tạo X như một biến toàn cầu và xác định

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2 để in biến x toàn cầu X. Cuối cùng, chúng tôi gọi
LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2 sẽ in giá trị của x.

Điều gì sẽ xảy ra nếu bạn muốn thay đổi giá trị của x bên trong một hàm?

x = "global"

def foo[]:
    x = x * 2
    print[x]

foo[]

Đầu ra

UnboundLocalError: local variable 'x' referenced before assignment

Đầu ra cho thấy một lỗi vì Python coi X là biến cục bộ và X cũng không được xác định bên trong

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2.

Để thực hiện công việc này, chúng tôi sử dụng từ khóa

def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
3. Truy cập từ khóa toàn cầu Python để tìm hiểu thêm.

Các biến cục bộ

Một biến được khai báo bên trong cơ thể của hàm hoặc trong phạm vi cục bộ được gọi là biến cục bộ.

Ví dụ 2: Truy cập biến cục bộ bên ngoài phạm vi

def foo[]:
    y = "local"


foo[]
print[y]

Đầu ra

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
0

Đầu ra cho thấy một lỗi vì chúng tôi đang cố gắng truy cập một biến cục bộ y trong phạm vi toàn cầu trong khi biến cục bộ chỉ hoạt động bên trong

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2 hoặc phạm vi cục bộ.

Hãy xem một ví dụ về cách một biến cục bộ được tạo trong Python.

Ví dụ 3: Tạo một biến cục bộ

Thông thường, chúng tôi khai báo một biến bên trong hàm để tạo một biến cục bộ.

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
1

Đầu ra

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
2

Chúng ta hãy xem xét vấn đề trước đó trong đó X là một biến toàn cầu và chúng tôi muốn sửa đổi X bên trong

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2.

Các biến toàn cầu và địa phương

Ở đây, chúng tôi sẽ chỉ ra cách sử dụng các biến toàn cầu và các biến cục bộ trong cùng một mã.

Ví dụ 4: Sử dụng các biến toàn cầu và cục bộ trong cùng một mã

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
3

Đầu ra

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
4

Trong mã trên, chúng tôi tuyên bố X là toàn cầu và y là biến cục bộ trong

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2. Sau đó, chúng tôi sử dụng toán tử nhân
LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
9 để sửa đổi biến toàn cầu X và chúng tôi in cả X và Y.

Sau khi gọi

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2, giá trị của X trở thành
x = "global"

def foo[]:
    print["x inside:", x]


foo[]
print["x outside:", x]
1 vì chúng tôi đã sử dụng
x = "global"

def foo[]:
    print["x inside:", x]


foo[]
print["x outside:", x]
2 để in hai lần
def foo[]:
  global LINES
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []
3. Sau đó, chúng tôi in giá trị của biến cục bộ y i.e
x = "global"

def foo[]:
    print["x inside:", x]


foo[]
print["x outside:", x]
4.

Ví dụ 5: Biến toàn cầu và biến cục bộ cùng tên

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
5

Đầu ra

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
6

Trong mã trên, chúng tôi đã sử dụng cùng tên X cho cả biến toàn cầu và biến cục bộ. Chúng tôi nhận được một kết quả khác khi chúng tôi in cùng một biến vì biến được khai báo trong cả hai phạm vi, tức là phạm vi cục bộ bên trong

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2 và phạm vi toàn cầu bên ngoài
LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2.

Khi chúng tôi in biến bên trong

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2, nó sẽ xuất ra
x = "global"

def foo[]:
    print["x inside:", x]


foo[]
print["x outside:", x]
8. Đây được gọi là phạm vi cục bộ của biến.

Tương tự, khi chúng tôi in biến bên ngoài

LINES = []

def foo[]:
  global lines
  for prob in range[1,3]:
    print "len[lines] = %d" % len[LINES]
    LINES = []

if __name__ == "__main__":
  foo[]
2, nó xuất ra toàn cầu X: 5. Đây được gọi là phạm vi toàn cầu của biến.

Biến không thuộc địa điểm

Các biến không thuộc địa được sử dụng trong các hàm lồng nhau có phạm vi cục bộ không được xác định. Điều này có nghĩa là biến có thể không ở trong địa phương cũng như phạm vi toàn cầu.

Chúng ta hãy xem một ví dụ về cách một biến không địa điểm được sử dụng trong Python.

Chúng tôi sử dụng các từ khóa

x inside: global
x outside: global
0 để tạo các biến không thuộc địa.

Ví dụ 6: Tạo một biến không thuộc địa điểm

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
7

Đầu ra

>>> foo.func_code.co_nlocals
2
>>> foo.func_code.co_varnames
['prob', 'LINES']
8

Trong mã trên, có hàm

x inside: global
x outside: global
1 lồng nhau. Chúng tôi sử dụng các từ khóa
x inside: global
x outside: global
0 để tạo một biến không thuộc địa điểm. Hàm
x inside: global
x outside: global
1 được xác định trong phạm vi của một hàm khác
x inside: global
x outside: global
4.

Lưu ý: Nếu chúng tôi thay đổi giá trị của biến không thuộc địa, các thay đổi xuất hiện trong biến cục bộ. : If we change the value of a nonlocal variable, the changes appear in the local variable.

Bạn có thể gán một biến cho một vòng lặp không?

Thông thường biến điều khiển A For For Loop chỉ cần cho các mục đích của vòng lặp và không được sử dụng ở nơi khác.Khi đây là trường hợp, có thể khai báo biến bên trong phần khởi tạo của FOR.it is possible to declare the variable inside the initialization portion of the for.

Tôi có thể sử dụng nhiều biến trong For Loop Python không?

Bạn có thể có 2 biến trong A For Loop Python không?Bằng cách sử dụng zip [] và liệt kê [], chúng ta có thể lặp lại với hai biến trong vòng lặp.Chúng ta cũng có thể lặp lại với hai yếu tố trong một từ điển trực tiếp sử dụng cho vòng lặp.By using zip[] and enumerate[], we can iterate with two variables in a for loop. We can also iterate with two elements in a dictionary directly using for loop.

Bạn có thể tuyên bố biến toàn cầu trong Python không?

Một biến toàn cầu trong Python thường được tuyên bố là đỉnh của chương trình.Nói cách khác, các biến được khai báo bên ngoài hàm được gọi là biến toàn cầu.Bạn có thể truy cập các biến toàn cầu trong Python cả bên trong và bên ngoài hàm.. In other words, variables that are declared outside of a function are known as global variables. You can access global variables in Python both inside and outside the function.

Bài Viết Liên Quan

Chủ Đề