2011-09-12 37 views
20

Trong Python, có các phạm vi biến bên trong if-câu lệnh có thể nhìn thấy bên ngoài câu lệnh if không? (đến từ một nền Java, do đó, tìm thấy điều này một chút lẻ)Phạm vi biến của Python trong if-statement

Trong trường hợp sau, tên được xác định đầu tiên bên trong if-block nhưng biến cũng hiển thị bên ngoài khối if. Tôi đã mong đợi một lỗi xảy ra nhưng 'joe' được in.

if 1==1: 
    name = 'joe' 
print(name) 

Trả lời

36

if tuyên bố không xác định phạm vi bằng Python.

Không làm vòng, with báo cáo, try/except vv

module Chỉ, chức năng và các lớp xác định phạm vi.

Xem Python Scopes and Namespaces trong Hướng dẫn bằng Python.

+0

@Owen, eh? tài liệu tham khảo? –

+0

Oh ... xin lỗi .. Tôi đã sai về điều đó. – Owen

+0

@Owen bạn đang nghĩ đến từ khóa 'nonlocal' mà tôi giả định, không xác định phạm vi, chỉ cần thêm cú pháp để tham chiếu đến phạm vi bao quanh nhưng không toàn cầu. – agf

1

Tất cả các biến python được sử dụng trong một hàm sống trong phạm vi mức độ chức năng. (Bỏ qua các biến toàn cục và đóng cửa)

Nó rất hữu ích trong trường hợp như thế này:

if foo.contains('bar'): 
    value = 2 + foo.count('b') 
else: 
    value = 0 

Bằng cách đó tôi không cần phải khai báo biến trước khi câu lệnh if.

+0

Dòng đầu tiên của bạn không chính xác. Nếu tôi định nghĩa một biến trong một định nghĩa lớp, nó không nằm trong phạm vi toàn cục, một phạm vi kết thúc hoặc phạm vi chức năng. – agf

+0

@agf - các lớp không định nghĩa một phạm vi mới - Tôi không thể truy cập các biến lớp từ một phương thức mà không có trình độ chuyên môn (ví dụ: tôi cần 'Class.thing' hoặc' self.thing', không chỉ 'điều'). Mặc dù vậy, chúng có không gian tên riêng. – detly

+0

@agf - thực ra, bây giờ tôi nghĩ về nó, tôi đoán bạn có thể truy cập các biến lớp từ định nghĩa lớp * bên ngoài các phương thức *, vì vậy tôi không chắc đó là gì. – detly