2016-06-28 2 views
0

Возьмем следующий Perl код:Как я могу создать переменные с блочной областью в Python?

$a = 5; 

if($a == 5) 
{ 
    print $a; 
    my $a = 8; 
    print $a; 
} 

print $a; 

Это выводит 585 потому что my $a создает новую лексическую переменную, которая распространяется до if блока.

Я хочу сделать то же самое в Python, но это:

a = 5; 
b = 9; 

if a == 5:   
    print "inside function", b 
    b = 'apple'; 

print b 

выходы

inside function 9 
apple 

Переменная b переписывается внутри if. Есть ли способ создать локальную переменную b внутри инструкции if? Я хочу использовать одно и то же имя переменной с локальной областью внутри if.

+0

Блоки Python 'if' находятся в том же объеме, что и их окружение. Если вам нужна новая область, извлеките и вызовите функцию. – jonrsharpe

+0

Спасибо @jonrsharpe за быстрый ответ. но мы не можем использовать функцию каждый раз, когда вы устанавливаете ритуал? нет явного способа сделать его локальным, как «мои» или «местные» вары в других языках? – syam

+1

Что? В общем, вы не нуждаетесь в отдельной области внутри 'if', но ** если вы это делаете **, вы можете создать новую область с функцией. – jonrsharpe

ответ

0

Коды не эквивалентны; в коде Perl my внутри блока if создает совершенно новую переменную, которая выходит за пределы области действия, когда заканчивается содержащийся блок.

Вы можете сделать что-то подобное с менеджером контекста в Python, но синтаксис будет сильно отличаться.

0

Это вы что искали?

a = 5 
b = 9 

def my_func(a): 
    if a == 5:   
     b = 'apple' 
     print("inside function: ", b) 

my_func(a) 
print("outside function: ", b) 

> inside function: apple 
> outside function: 9 

b является локальной переменной внутри функции my_func, которая равна apple, не оказывая влияния на глобальную переменную b, которая равна 9.

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