2013-10-11 23 views
5

Tôi đã có một bài kiểm tra toán ngày hôm nay và một trong những câu hỏi tín dụng thêm trong bài thi làGiới thiệu về phạm vi biến đổi?

product = 1 
for i in range(1,7,2): 
    print i 
    product = product * i 
print i 
print product 

Chúng tôi đã dự định ra khỏi danh sách các bước của vòng lặp đó là dễ dàng; nhưng nó khiến tôi suy nghĩ, tại sao chương trình này lại chạy? thứ hai print i dường như không phù hợp với tôi. Tôi sẽ nghĩ rằng các i chỉ tồn tại cho vòng lặp for và sau đó nhận được bị phá hủy vì vậy khi bạn gọi print i thứ hai không có biến i và bạn nhận được một lỗi.

Tại sao i vẫn là biến toàn cầu?

+0

sử dụng 'sản phẩm * = i') – alexvassel

+0

Tôi sẽ có, đó là bài kiểm tra của giáo viên của tôi. Đó là toán học rời rạc nên không có nhiều người có kinh nghiệm lập trình để tôi có thể hiểu lý do của anh ta không giới thiệu quá nhiều thành phần lập trình python/lập trình vào thời điểm này. – spitfiredd

Trả lời

9

The Devil là trong chi tiết

Naming and binding

Một khối là một đoạn văn bản chương trình Python được thực hiện như một đơn vị. Sau đây là các khối: mô-đun, nội dung chức năng và định nghĩa lớp học .

Hoặc nói cách đơn giản, một for loop không phải là một khối

Một phạm vi xác định tầm nhìn của một tên trong một khối. Nếu biến số cục bộ được xác định trong một khối, phạm vi của nó bao gồm khối đó. Nếu định nghĩa xảy ra trong khối chức năng, phạm vi mở rộng cho bất kỳ khối nào chứa trong khối xác định, trừ khi khối được giới thiệu một ràng buộc khác cho tên.

Vì vậy, bất kỳ biến được xác định là có thể nhìn thấy từ quan điểm của định nghĩa đến hết phạm vi của khối, function, module hoặc class nét.

Tại sao tôi vẫn là biến toàn cầu?

Từ ngữ pháp danh pháp, tôi sẽ gọi i biến toàn cục, nếu mã được đánh dấu là một phần của mô-đun chứ không phải hàm được xác định.

1

Python không có phạm vi chặn. Bất kỳ biến nào được định nghĩa trong một hàm chỉ hiển thị từ điểm đó cho đến khi kết thúc hàm.

+1

-1: 'Python không có phạm vi block.' .. Điều này không đúng. Trong Python, một phạm vi khối là một mô-đun, chức năng hoặc một định nghĩa lớp. – Abhijit