2011-05-29 4 views
50

Когда код на других языках, вы иногда будете создавать блок сферы, например:блок области видимости в Python

statement 
... 
statement 
{ 
    statement 
    ... 
    statement 
} 
statement 
... 
statement 

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

Есть ли идиоматический способ сделать то же самое в Python?

+1

'Одна цель (из многих) заключается в улучшении читаемости кода - код Python, написанный правильно (т. Е. После [zen of python] (http://www.python.org/dev/peps/pep-0020 /)) не нуждался бы в таком гарнире для удобочитаемости. На самом деле, это одна из многих вещей, которые мне нравятся в Python. –

+0

Я попытался сыграть с '__exit__' и' with', изменив 'globals()', но я потерпел неудачу. –

+0

было бы очень полезно определить время жизни переменной, связанное с приобретением ресурса –

ответ

50

Нет, языковая поддержка для создания области блока отсутствует. Единственное средство для создания области - это функции, классы или модули.

+0

@Alaya Да и другие языки. Но вопрос был конкретно о Python. – ThomasH

+0

Извините, я неправильно прокомментировал ваш ответ как «нет языка, который поддерживает область обзора» ... – Alaya

+0

@Alaya, да, может, удалите свой комментарий? – JoelFan

30

Идиоматический способ в Python - сохранить ваши функции короткими. Если вы считаете, что вам нужно это, отредактируйте свой код! :)

Python создает новую область действия для каждого выражения модуля, класса, функции или генератора (в Python 3.x также для понимания списков). Кроме того, внутри функций нет встроенных областей.

+3

«Самая важная вещь в программировании - это способность дать что-то имя. Вторая важная вещь - не требовать, чтобы дать что-то имя». По большей части Python требует, чтобы области (для переменных и т. Д.) Были указаны именами. В этом отношении переменная Python является вторым наиболее важным тестом. –

+5

Самое важное в программировании - это возможность управлять зависимостями вашего приложения и управлять областями блоков кода. Анонимные блоки позволяют ограничить срок службы обратных вызовов, тогда как в противном случае ваши обратные вызовы будут использоваться только один раз, но живут в течение всего срока действия программы, это вызывает глобальный беспорядок и вредит читабельности кода. – Dmitry

2

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

def my_func(): 
    shared_variable = calculate_thing() 

    def do_first_thing(): 
     ... = shared_variable 
    do_first_thing() 

    def do_second_thing(): 
     foo(shared_variable) 
     ... 
    do_second_thing() 

Если вы не знаете, почему вы можете захотеть сделать это, то this video может убедить вас.

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

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