2014-03-04 1 views
10

В C++, вы можете сделать это, чтобы заставить локальную область видимости:Как заставить локальную область в Python?

{ 
    int i = 1; 
    // Do stuff 
} 
// local variable i is destroyed 
{ 
    int i = 7; 
    // Do more stuff 
} 

Это имеет то преимущество, что к концу вынужденной локальной области видимости, все переменные, объявленные в кронштейне ушел. Это может помочь предотвратить использование ранее определенной переменной x в месте позже, когда вы не собираетесь использовать x.

Можете ли вы сделать это в Python? Если да, то как?

== UPDATE ==

Я в курсе функций - что это очевидная вещь. Мне было интересно, если бы был быстрый способ сделать это, когда код прост и не стоит создавать отдельную функцию для - только несколько быстрых обозначений, чтобы подчеркнуть, что переменные в этом блоке не должны использоваться нигде в функции.

От того, что люди говорили до сих пор, короткий ответ - нет.

(Я понимаю, что существуют такие умные способы, как «del», или что это желание иметь блоки может предлагать рефакторинг в отдельную функцию в любом случае. Однако я хотел бы подчеркнуть, что это всего лишь короткие фрагменты, в которых вы хотите подчеркнуть переменные в этом небольшом блоке не должны быть использованы в другом месте.)

+2

В любом случае вы переназначаете 'i', правильно? Почему бы вам не сделать то же самое на Python? – thefourtheye

+1

Нет, это невозможно в Python. Правила определения диапазона здесь разные, если вы хотите, чтобы локальная область использовала функцию. –

+0

Возможный дубликат [Как создать новые области в python] (http://stackoverflow.com/questions/541926/how-can-one-create-new-scopes-in-python) –

ответ

7

в Python, если объявить переменную внутри функции, она является локальной и не могут быть доступны вне функции

>>> def x(): 
    i = 5 


>>> x() 
>>> i 

Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    i 
NameError: name 'i' is not defined 
>>> 

в качестве альтернативы, вы может удалить переменную из пространства имен в конце, чтобы вы не могли ее повторно использовать.

>>> i = 5 
>>> del i 
>>> i 

Traceback (most recent call last): 
    File "<pyshell#8>", line 1, in <module> 
    i 
NameError: name 'i' is not defined 
>>> 
1

Если вы не любите del решение, вы можете функции гнезда определения:

def one_function(): 
    x=0 
    def f(): 
     x = 1 
    f() 
    print(x) # 0 

Конечно, я думаю, что лучший подход, чтобы просто разделить вещи на более мелкие функции, так что нет необходимости в этом руководстве. В C++ самая крутая вещь в том, что деструктор автоматически вызывается - в Python вы не можете гарантировать, что деструктор будет вызван, поэтому это определение не было бы очень полезным, даже если бы это было возможно.

1

В C++, вы используете локальную область с кронштейнами {}, чтобы избежать переменных переопределения или конфликтов имен:

{ 
    int var=3; 
} 
{ 
    float var=1.0f; 
} 

В то время как в питоне, нет явного переменной определения, вы просто присвоить некоторые объекты в вар имя, когда вы хотите использовать его, и пересвязать же имя в какой-то новой переменной:

var=3 
#do something 
var=1.0 #no need to "del var", var refers to a float object now 
#do more stuff 

Примечание, что использование scope в C++ может указывать на то, что ваш код должен быть реорганизован на функции или методы, которые можно назвать и использовать повторно. И то же самое с python.

Смежные вопросы