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

Как в Powershell установить значения переменных внутри функции и сделать это значение доступным в родительской области?

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

 $BackupFile = $null
$TaskSequenceID = $нуль
$OSDComputerName = $null
$capturedWimPath = $null
Функция Set-OsToBuild
{
  переключатель ($OsToBuild)
  {
    "Вин7х64"
        {
            $BackupFile = "Win7x64-SP1.wim"
            $TaskSequenceID = "WIN7X64BC"
            $OSDComputerName = "Ref-Win7x64"
            $capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
        }
  }
}
 

Проблема в том, что эти значения для $BackupFile, $TaskSequenceID, $OSDComputerName и $capturedWimPath являются пустыми/нулевыми вне этой функции.

Как правильно это сделать? Я хочу установить эти значения в этой функции и сделать эти значения доступными позже в сценарии в родительской области.

  • функция
  • переменные
  • powershell
  • область действия

1

Переменные создаются в

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

 Глобальный:
    Область, которая действует, когда Windows PowerShell
    начинается. Переменные и функции, присутствующие при
    Запуски Windows PowerShell были созданы в
    глобальный охват. Сюда входят автоматические переменные и
    переменные предпочтений. Это также включает в себя переменные, псевдонимы,
    и функции, которые находятся в вашей Windows PowerShell
    профили.
Местный:
    Текущая область. Локальная область может быть глобальной.
    сфера или любая другая сфера.
Скрипт:
    Область, которая создается во время выполнения файла скрипта. Только
    команды в скрипте выполняются в области скрипта. К
    команды в сценарии, областью действия сценария является локальная
    объем.
 

Источник: about_Scopes

Если вам нужно, чтобы переменные были доступны для скрипта, то пропишите их в область

скрипта .

 $BackupFile = $null
$TaskSequenceID = $нуль
$OSDComputerName = $null
$capturedWimPath = $null
Функция Set-OsToBuild
{
  переключатель ($OsToBuild)
  {
    "Вин7х64"
        {
            $script:BackupFile = "Win7x64-SP1. wim"
            $script:TaskSequenceID = "WIN7X64BC"
            $script:OSDComputerName = "Ref-Win7x64"
            $script:capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
        }
  }
}
 

Если вы хотите сохранить значения для целых сеансов (пока вы не закроете процесс powershell), вам следует использовать глобальную область .

 $global:BackupFile = $null
$global:TaskSequenceID = $null
$global:OSDComputerName = $null
$global:capturedWimPath = $null
Функция Set-OsToBuild
{
  переключатель ($OsToBuild)
  {
    "Вин7х64"
        {
            $global:BackupFile = "Win7x64-SP1.wim"
            $global:TaskSequenceID = "WIN7X64BC"
            $global:OSDComputerName = "Ref-Win7x64"
            $global:capturedWimPath = "$($PathToMdtShare)\Captures\$BackupFile"
        }
  }
}
 

Справочный документ powershell about_scope — это то, что вы хотите прочитать для этого.

Конкретно в этом разделе:

Области Windows PowerShell

 Области в Windows PowerShell имеют как имена, так и номера.  Названный
области определяют абсолютную область. Цифры относительны и отражают
отношения между областями.
Глобальный:
    Область, которая действует, когда Windows PowerShell
    начинается. Переменные и функции, присутствующие при
    Запуски Windows PowerShell были созданы в
    глобальный охват. Сюда входят автоматические переменные и
    переменные предпочтений. Это также включает в себя переменные, псевдонимы,
    и функции, которые находятся в вашей Windows PowerShell
    профили.
Местный:
    Текущая область. Локальная область может быть глобальной.
    сфера или любая другая сфера.
Скрипт:
    Область, которая создается во время выполнения файла скрипта. Только
    команды в скрипте выполняются в области скрипта. К
    команды в сценарии, областью действия сценария является локальная
    объем.
Частный:
    Элементы в частной области не могут быть видны за пределами текущего
    объем. Вы можете использовать частную область для создания частной версии
    элемента с тем же именем в другой области.
Пронумерованные области: Вы можете обращаться к областям по имени или номеру, который описывает относительное положение одного прицела по отношению к другому. Область 0 представляет текущую или локальную область. Область 1 указывает непосредственную родительскую область. Область 2 указывает на родитель родительской области и так далее. Пронумерованные области полезны, если вы создали много рекурсивных масштабы.

Таким образом, в зависимости от ваших конкретных потребностей вы можете использовать любой из следующих вариантов.

  1. $global:BackupFile = "Win7x64-SP1.wim"
  2. $script:BackupFile = "Win7x64-SP1.wim"
  3. $1:BackupFile = "Win7x64-SP1.wim"

Чтобы установить $BackupFile снаружи, ваша функция должна записать в $script:$BackupFile .

Но есть одна загвоздка! Если ваш скрипт вызывается (используя и , этого не происходит при точечном поиске) из другого скрипта, тогда $BackupFile будет унаследовано от вызывающего, но $script:$BackupFile будет пустым.

Таким образом, вы должны читать из $BackupFile , но записывать в $script:$BackupFile . Также остерегайтесь синтаксиса вроде $script:BackupFile += ".bin" , потому что он считывается из неправильной переменной.

Возможный обходной путь, позволяющий избежать ошибок, состоит в том, чтобы начать функцию с $script:BackupFile = $BackupFile .

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

изменение глобальных переменных внутри функции в python

Задавать вопрос

спросил

Изменено 1 год, 3 месяца назад

Просмотрено 27 тысяч раз

Я новичок в Python.

Я не совсем понимаю, как мне нужно устанавливать переменные и изменять их внутри функции, которая будет использоваться позже. Мой сценарий должен получить значения x и y от функции, которые определяются размером диаграммы, создаваемой функцией. Эти переменные необходимо передать команде печати позже в скрипте для вывода html. Допустим, у меня есть глобальные переменные:

 исходный_процент = 0,125
    исходный_процент = 0,11
 

Но их нужно будет изменить при запуске функции…

 def makeplot(temp, entropy,preq):
        originx_pct = origin.get_points()[0][0]
        originy_pct = origin.get_points()[0][1]
 

Затем печатается в javascript html-страницы, написанной позже…

 print('var originx_pct = {};'.format(originx_pct))
    print('var originy_pct = {};'.format(originy_pct))
 

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

Если я передам функции 2 переменные в качестве аргументов, как мне вернуть значения для части печати сценария?

  • python
  • переменные
  • область видимости

3

В вашей функции необходимо использовать глобальное ключевое слово .

 исходный_процент = 0,125
исходный_процент = 0,11
def makeplot (temp, entropy, preq):
    глобальный originx_pct, originy_pct
    originx_pct = origin.get_points()[0][0]
    originy_pct = origin.get_points()[0][1]
 

Подробнее о global можно прочитать здесь.

0

В вашей функции вам нужно вернуть значения. Измените свой makeplot на следующее:

 def makeplot(temp, entropy, preq):
    local_originx_pct = origin.get_points()[0][0]
    local_originy_pct = origin.get_points()[0][1] # local_ в именах ничего не значит, это просто для ясности.
вернуть local_originx_pct, local_originy_pct

Затем, когда вы вызываете функцию, установите ваши переменные в ее возвращаемое значение.

 originx_pct, originy_pct = makeplot(args_and_stuff)
 

Это считается лучшей практикой, чем прямое изменение глобальных переменных, как в ответе ltd9938. Это помогает предотвратить случайное использование других функций. Дополнительные причины не использовать global

Вы можете либо объявить глобальные переменные в функции с помощью строк global originx_pct и global originy_pct , либо вернуть их при запуске функции. Для этого вы можете сделать

 по умолчанию makeplot(temp, entropy,preq):
    возврат (origin.get_points()[0][0],origin.get_points()[0][1])
 

или

 по умолчанию makeplot (temp, entropy, preq):
    вернуть origin.get_points()[0][0:2]
 

Если origin.get_points()[0] имеет только два элемента, вы делаете следующее:

 def makeplot(temp, entropy,preq):
 вернуть origin.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *