Используя 'статью' Visual Studio из нормальной командной строки

, Где x найден?

x не найден, поскольку Вы не определили его.:-) можно было найти в (глобальном) code1 или code3 (локальный) при помещении его там.

code2 (участники класса) не видимы для кодирования внутренних методов того же class —  you, обычно получал бы доступ к ним использование сам. code4/code5 (циклы) живут в том же объеме как code3, поэтому если бы Вы записали в x там, то Вы изменили бы x экземпляр, определенный в code3, не делая новое x.

, Python статически ограничен по объему, поэтому при передаче ‘spam’ другому функциональному спаму, будет все еще иметь доступ к globals в модуле, это прибыло из (определенный в code1), и любой другой содержащий объемы (см. ниже). к участникам code2 снова получили бы доступ через сам.

лямбда не отличается от определения, Если Вам использовали лямбду в функции, это совпадает с определением вложенной функции. В Python 2.2 вперед, вложенные объемы доступны. В этом случае можно связать x на любом уровне функционального вложения, и Python возьмет самый внутренний экземпляр:

x= 0
def fun1():
    x= 1
    def fun2():
        x= 2
        def fun3():
            return x
        return fun3()
    return fun2()
print fun1(), x

2 0

fun3 видит экземпляр x от самого близкого, содержащего объем, который является функциональным объемом, связанным с fun2. Но другие x экземпляры, определенные в fun1 и глобально, не затронуты.

Прежде nested_scopes —  in Python пред2.1, и в 2,1, если Вы конкретно не просите функцию с помощью from-future-import —  fun1 и объемы fun2, не видимы к fun3, таким образом, ответ S.Lott содержит, и Вы получили бы глобальный x:

0 0
35
задан Tom Hennen 17 September 2008 в 16:27
поделиться

1 ответ

Уловка состоит в том, чтобы всегда использовать правильный командный файл vcvars. ЕСЛИ у вас установлена ​​только одна версия VisualStudio, это не проблема. Если вы имеете дело с несколькими версиями, как я, становится очень легко запустить сборку MSVC ++ 14 в консоли, которая была настроена с файлом vcvars MSVC ++ 15. Это может сработать, а может и не сработать, но все, что вы получите, будет отличаться от того, что вы собираетесь строить в VisualStudio.

Мы решили эту проблему в terp , создав соответствующий файл vcvars. из выбранного компилятора и всегда настраивать среду внутренне для вызова инструмента. Таким образом, у вас всегда будет правильный файл vcvars для используемого вами компилятора.

Просто повторяю: я настоятельно не рекомендую пытаться вручную дублировать то, что файл vcvars делает за вас. Вы'

1
ответ дан 27 November 2019 в 06:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: