OO JavaScript: Категорическое объяснение переменного объема

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

df['col2']=df.col1.transform(lambda x: pd.factorize(x)[0]*100)

Или предложение @jezrael:

df.col1.apply(lambda x: np.arange(len(x))*100)


print(df)

                                                   col1  \
row1  [0.0, 6.33839991, 3.93961207, 5.27702178, 8.27...   
row2          [0.0, 5.93961207, 4.27702178, 4.12702178]   
row3  [0.0, 6.44428501, 3.93961207, 8.27702178, 4.27...   

                                   col2  
row1  [0, 100, 200, 300, 400, 500, 600]  
row2                 [0, 100, 200, 300]  
row3            [0, 100, 200, 300, 400] 
19
задан javito 19 September 2008 в 05:40
поделиться

3 ответа

Глобальные переменные

Каждая переменная в JavaScript являются именованным атрибутом объекта. Поскольку example:-

var x = 1;

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

window.x = 1;

Теперь, что, если мы изменяем этот to:-

function fn()
{
    var x = 1;
}

, Когда fn назван новым объектом, создается, звонил контекст выполнения также называемый объем (я использую эти термины попеременно). x добавляется как атрибут к этому объекту объема. Следовательно каждый вызов к fn получит свой собственный экземпляр объекта объема и поэтому свой собственный экземпляр атрибута x, присоединенного к тому объекту объема.

Закрытие

Теперь позволяет, обращают это Внимание further:-

function fnSequence()
{
    var x = 1;
    return function() { return x++; }
}

var fn1 = fnSequence();
var fn2 = fnSequence();

WScript.Echo(fn1())
WScript.Echo(fn2())
WScript.Echo(fn1())
WScript.Echo(fn2())
WScript.Echo(fn1())
WScript.Echo(fn1())
WScript.Echo(fn2())
WScript.Echo(fn2())

: Замена WScript.Echo с любыми записями к stdout в Вашем контексте.

последовательность, которую необходимо получить, является:-

1 1 2 2 3 4 3 4

Поэтому, что произошло здесь? Мы имеем fnSequence, который инициализирует переменную x к 1 и возвращает анонимную функцию, которая возвратит значение [1 110] и затем увеличит его.

, Когда эта функция сначала выполняется, объект объема создается, и атрибут x добавляется к тому объекту объема со значением 1. Также созданный в том же объекте выполнения анонимная функция. Каждый функциональный объект будет иметь атрибут объема, который указывает на контекст выполнения, в котором он создается. Это создает то, что, знают как цепочка объема , в который мы приедем позже. Ссылка на эту функцию возвращается [1 112] и хранится в [1 113].

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

Теперь эта та же последовательность происходит при присвоении [1 117]. fn2 будет указывать на другую анонимную функцию, которая была создана в другом контексте выполнения, который был, создают, когда fnSequence был назван этот второй раз.

Цепочка Объема

, Что происходит, когда функция, сохраненная [1 120], выполняется в первый раз? Новый контекст выполнения создается для выполнения анонимной функции. Возвращаемое значение должно быть найдено от идентификатора x. Объект объема функции осмотрен для x атрибут, но ни один не найден. Это - то, где цепочка объема входит. Приведение к сбою найти x в текущем контексте выполнения, JavaScript берет объект, сохраненный объемом функции, приписывает, и ищет x там. Это находит его, так как объем функций был создан в выполнении [1 125], получает свое значение и увеличивает его. Следовательно 1 производится, и x в этом объеме увеличен к 2.

Теперь, когда fn2 выполняется, это в конечном счете присоединено к другому контексту выполнения, чей x атрибут равняется все еще 1. Следовательно выполнение fn2 также результаты в 1.

, Как Вы видите fn1 и fn2, каждый генерирует их собственную независимую последовательность чисел.

35
ответ дан 30 November 2019 в 03:21
поделиться

Переменные, не объявленные с var, глобальны в объеме. Функции представляют объем, но отмечают это, если блоки и другие блоки не представляют объем.

я мог также видеть много информации об этом путем поиска с помощью Google объема JavaScript. Это действительно, что я рекомендовал бы. http://www.digital-web.com/articles/scope_in_javascript/

4
ответ дан 30 November 2019 в 03:21
поделиться

Функции представляют объем. Можно объявить функции в других функциях, таким образом, создав вложенный объем. Внутренний объем может получить доступ к внешнему объему, но внешнее не может получить доступ к внутреннему объему.

Переменные связываются с объемом, с помощью ключевое слово var . Все переменные неявно связываются с объемом верхнего уровня. Таким образом, при исключении ключевого слова var Вы неявно обращаетесь к переменной, связанной с верхним уровнем. В браузере верхний уровень объект окна . Обратите внимание, что окно - это сам переменная, таким образом окно == window.window

1
ответ дан 30 November 2019 в 03:21
поделиться
Другие вопросы по тегам:

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