Hướng dẫn what is the scope of a for loop in python? - phạm vi của vòng lặp for trong python là gì?

240

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi không hỏi về các quy tắc phạm vi của Python; Tôi hiểu nói chung làm thế nào phạm vi hoạt động trong Python cho các vòng lặp. Câu hỏi của tôi là tại sao các quyết định thiết kế được đưa ra theo cách này. Ví dụ (không có ý định chơi chữ):

for foo in xrange(10):
    bar = 2
print(foo, bar)

Trên đây sẽ in (9,2).

Điều này gây ấn tượng với tôi là kỳ lạ: 'Foo' thực sự chỉ là điều khiển vòng lặp và 'thanh' được xác định bên trong vòng lặp. Tôi có thể hiểu tại sao nó có thể cần thiết cho 'thanh' có thể truy cập được bên ngoài vòng lặp (nếu không, đối với các vòng lặp sẽ có chức năng rất hạn chế). Điều tôi không hiểu là tại sao biến điều khiển vẫn cần duy trì phạm vi sau khi vòng lặp thoát ra. Theo kinh nghiệm của tôi, nó chỉ đơn giản là tạo ra không gian tên toàn cầu và khiến cho việc theo dõi các lỗi sẽ bị các phiên dịch viên bắt gặp hơn trong các ngôn ngữ khác.

Khi được hỏi ngày 31 tháng 8 năm 2010 lúc 17:52Aug 31, 2010 at 17:52

Hướng dẫn what is the scope of a for loop in python? - phạm vi của vòng lặp for trong python là gì?

Chimeracoderchimeracoderchimeracoder

19.7K20 Huy hiệu vàng60 Huy hiệu bạc59 Huy hiệu Đồng20 gold badges60 silver badges59 bronze badges

15

Câu trả lời dễ hiểu nhất là nó chỉ giữ cho ngữ pháp đơn giản, không phải là một vấp ngã để nhận con nuôi, và nhiều người đã hài lòng khi không phải định hướng phạm vi mà một cái tên thuộc về khi gán cho nó trong một cấu trúc vòng lặp. Các biến không được khai báo trong một phạm vi, nó được ngụ ý bởi vị trí của các câu lệnh gán. Từ khóa global tồn tại chỉ vì lý do này (để biểu thị rằng việc chuyển nhượng được thực hiện ở phạm vi toàn cầu).

Cập nhật

Đây là một cuộc thảo luận tốt về chủ đề: http://mail.python.org/pipermail/python-ideas/2008-oC tháng 10/002109.html

Các đề xuất trước đây để thực hiện các biến vòng lặp cục bộ vào vòng lặp đã vấp ngã về vấn đề mã hiện tại dựa trên biến vòng lặp giữ giá trị của nó sau khi thoát khỏi vòng lặp và dường như đây được coi là một tính năng mong muốn.

Nói tóm lại, bạn có thể đổ lỗi cho cộng đồng Python: P

Hướng dẫn what is the scope of a for loop in python? - phạm vi của vòng lặp for trong python là gì?

Hans Ginzel

7.1933 Huy hiệu vàng23 Huy hiệu bạc22 Huy hiệu đồng3 gold badges23 silver badges22 bronze badges

Đã trả lời ngày 31 tháng 8 năm 2010 lúc 18:22Aug 31, 2010 at 18:22

Jeremy Brownjeremy BrownJeremy Brown

17.3k3 Huy hiệu vàng34 Huy hiệu bạc27 Huy hiệu đồng3 gold badges34 silver badges27 bronze badges

5

Python không có khối, cũng như một số ngôn ngữ khác (chẳng hạn như C/C ++ hoặc Java). Do đó, đơn vị phạm vi trong Python là một chức năng.

Đã trả lời ngày 31 tháng 8 năm 2010 lúc 18:04Aug 31, 2010 at 18:04

4

Một trường hợp thực sự hữu ích cho điều này là khi sử dụng enumerate và bạn muốn tổng số đếm cuối cùng:

for count, x in enumerate(someiterator, start=1):
    dosomething(count, x)
print "I did something {0} times".format(count)

Điều này có cần thiết không? Không. Nhưng, nó chắc chắn là thuận tiện.

Một điều khác cần nhận thức: Trong Python 2, các biến trong danh sách toàn diện cũng bị rò rỉ:

>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> x
9

Nhưng, điều tương tự không áp dụng cho Python 3.

Hướng dẫn what is the scope of a for loop in python? - phạm vi của vòng lặp for trong python là gì?

Đã trả lời ngày 31 tháng 8 năm 2010 lúc 17:57Aug 31, 2010 at 17:57

Carlcarlcarl

48.9K17 Huy hiệu vàng73 Huy hiệu bạc82 Huy hiệu Đồng17 gold badges73 silver badges82 bronze badges

6

Một trong những ảnh hưởng chính của Python là ABC, một ngôn ngữ được phát triển ở Hà Lan để giảng dạy các khái niệm lập trình cho người mới bắt đầu. Người tạo ra Python, Guido Van Rossum, đã làm việc trên ABC trong vài năm vào những năm 1980. Tôi hầu như không biết gì về ABC, nhưng vì nó dành cho người mới bắt đầu, tôi cho rằng nó phải có một số lượng giới hạn phạm vi, giống như những điều cơ bản ban đầu.

Hướng dẫn what is the scope of a for loop in python? - phạm vi của vòng lặp for trong python là gì?

Jay Soyy

6.7518 huy hiệu vàng49 Huy hiệu bạc79 Huy hiệu đồng8 gold badges49 silver badges79 bronze badges

Đã trả lời ngày 31 tháng 8 năm 2010 lúc 18:41Aug 31, 2010 at 18:41

Kindallkindallkindall

173K34 Huy hiệu vàng268 Huy hiệu bạc300 Huy hiệu đồng34 gold badges268 silver badges300 bronze badges

0

Nếu bạn có một câu lệnh ngắt trong vòng lặp (và muốn sử dụng giá trị lặp sau, có lẽ để chọn sao lưu, lập chỉ mục một cái gì đó hoặc cung cấp trạng thái), nó sẽ giúp bạn tiết kiệm một dòng mã và một bài tập, vì vậy có một sự thuận tiện.

Đã trả lời ngày 7 tháng 9 năm 2018 lúc 15:59Sep 7, 2018 at 15:59

Đây là một lựa chọn thiết kế trong Python, thường giúp một số nhiệm vụ dễ dàng hơn so với các ngôn ngữ khác với hành vi phạm vi khối điển hình.

Nhưng đôi khi bạn vẫn sẽ bỏ lỡ các phạm vi khối điển hình, bởi vì, giả sử, bạn có thể có các mảng tạm thời lớn nên được giải phóng càng sớm càng tốt. Nó có thể được thực hiện bằng các thủ thuật chức năng/lớp tạm thời nhưng vẫn có một giải pháp gọn gàng đạt được với việc điều khiển trực tiếp trạng thái phiên dịch.

from scoping import scoping
a = 2 

with scoping():
    assert(2 == a)
    a = 3
    b = 4
    scoping.keep('b')
    assert(3 == a) 

assert(2 == a) 
assert(4 == b)

https://github.com/l74d/scoping

Đã trả lời ngày 11 tháng 6 năm 2021 lúc 4:07Jun 11, 2021 at 4:07

l74dl74dl74d

Huy hiệu đồng 1471 Bạc2 Huy hiệu đồng1 silver badge2 bronze badges

Đối với người mới bắt đầu, nếu các biến là cục bộ cho các vòng lặp, các vòng lặp đó sẽ vô dụng đối với hầu hết các chương trình trong thế giới thực.

Trong tình huống hiện tại:

# Sum the values 0..9
total = 0
for foo in xrange(10):
    total = total + foo
print total

Sản lượng 45. Bây giờ, hãy xem xét cách phân công hoạt động trong Python. Nếu các biến vòng lặp là cục bộ nghiêm ngặt:

# Sum the values 0..9?
total = 0
for foo in xrange(10):
    # Create a new integer object with value "total + foo" and bind it to a new
    # loop-local variable named "total".
    total = total + foo
print total

Sản lượng 0, bởi vì

for count, x in enumerate(someiterator, start=1):
    dosomething(count, x)
print "I did something {0} times".format(count)
0 bên trong vòng lặp sau khi gán không giống như
for count, x in enumerate(someiterator, start=1):
    dosomething(count, x)
print "I did something {0} times".format(count)
0 bên ngoài vòng lặp. Điều này sẽ không phải là hành vi tối ưu hoặc mong đợi.

Đã trả lời ngày 1 tháng 9 năm 2010 lúc 1:27Sep 1, 2010 at 1:27

Hướng dẫn what is the scope of a for loop in python? - phạm vi của vòng lặp for trong python là gì?

Kirk Strauserkirk StrauserKirk Strauser

29,8K5 Huy hiệu vàng47 Huy hiệu bạc64 Huy hiệu đồng5 gold badges47 silver badges64 bronze badges

4

Phạm vi của một vòng lặp là gì?

Các ngữ nghĩa phạm vi của vòng lặp cho vòng lặp rằng sau mỗi lần thực hiện vòng lặp, đối tượng được tạo trong quá trình lặp đó sẽ bị phá hủy. Về mặt kỹ thuật, F nằm trong phạm vi bên trong hơn i.after each execution of the loop, the object that was created during that iteration will be destroyed. Technically, the f is in a more inner scope than the i .

Làm cho và trong khi các vòng có phạm vi python?

Mặt khác, trong Python, các biến được khai báo trong các khối if, các khối vòng và các khối vòng lặp không phải là các biến cục bộ và ở trong phạm vi bên ngoài khối.Do đó, chúng tôi nói rằng C ++ có phạm vi phạm vi cấp độ khối của Block, trong khi Python chỉ sử dụng phạm vi phạm vi cấp độ chức năng.variables declared in if-statements, for-loop blocks, and while-loop blocks are not local variables, and stay in scope outside of the block. Thus we say that C++ has “block-level” scoping, while Python uses only “function-level” scoping.

Phạm vi của đối tượng trong Python là gì?

Phạm vi của đối tượng và tên.• Phạm vi đề cập đến khu vực trong mã chương trình nơi các biến và tên có thể truy cập được.• Nó cũng xác định khả năng hiển thị và tuổi thọ của một biến trong mã chương trình.the region in the program code where variables and names are accessible. • It also determines the visibility and lifetime of a variable in the program code.

Phạm vi loại trong Python là gì?

Phạm vi xác định khả năng truy cập của đối tượng Python.Để truy cập biến cụ thể trong mã, phạm vi phải được xác định vì nó không thể được truy cập từ bất cứ nơi nào trong chương trình.Vùng mã hóa cụ thể nơi có thể nhìn thấy các biến được gọi là phạm vi.defines the accessibility of the python object. To access the particular variable in the code, the scope must be defined as it cannot be accessed from anywhere in the program. The particular coding region where variables are visible is known as scope.