Tcp socket custom keep alive function [duplicate]

zip-функция решает проблему Docs: Функция ZIP-библиотеки

AIM: Чтобы поставить выходной бок о бок Проблема:

#value1 is a list
value1 = driver.find_elements_by_class_name("review-text")
#value2 is a list
value2 = driver.find_elements_by_class_name("review-date")

for val1 in value1:
    print(val1.text)
    print "\n"
for val2 in value2:
    print(val2.text)
    print "\n"

Выход: обзор1 обзор2 обзор3 дата1 дата2 дата3

Решение:

for val1, val2 in zip(value1,value2):
    print (val1.text+':'+val2.text)
    print "\n"

Результат: review1: date1 review2: date2 review3: date3

8
задан NSF 8 June 2012 в 07:27
поделиться

5 ответов

Хранить ссылку на this:

function a() {
    var self = this;
    self.b = 1;
    self.set = setInterval(function() {console.log(self.b);}, 200);
}

Анонимная функция, которую вы передаете в setInterval, имеет доступ к любым переменным в своей области, содержащей область видимости, то есть любые локальные переменные function a() , Магия закрытия JS сохраняет эти переменные живыми даже после завершения a(), и каждый вызов a() получает свое закрытие.

16
ответ дан ᴍᴀᴛᴛ ʙᴀᴋᴇʀ 28 August 2018 в 16:23
поделиться

Это было бы самое чистое решение, так как большую часть времени вы действительно хотите переключить этот контекст для своих последовательных вызовов методов:

    // store scope reference for our delegating method
    var that = this;
    setInterval(function() {
        // this would be changed here because of method scope, 
        // but we still have a reference to that
        OURMETHODNAME.call(that);
    }, 200);
5
ответ дан Dbl 28 August 2018 в 16:23
поделиться

Поскольку у нас теперь ES6, я думаю, нам нужен еще один ответ:

Используйте функцию стрелки:

function a() {
  this.b = 1;
  this.set = setInterval(() => {console.log(this.b);}, 200);
}

Функции стрелки, противоположные нормальным функциям, не имеют контекст this самостоятельно. Это означает, что у вас есть доступ к внешнему this.

3
ответ дан HoldOffHunger 28 August 2018 в 16:23
поделиться

В вашем случае вы можете просто:

function a() {
    var _this = this;
    this.b = 1;
    this.set = setInterval(function () {
      console.log(_this.b);
    }, 200);
}

Как правило, мы можем также иметь вспомогательный метод Function.prototype.bind , чтобы исправить ссылку this.

0
ответ дан Ivan 28 August 2018 в 16:23
поделиться

Просто сохраните ссылку this в какой-либо другой переменной, которая позже не будет переопределена window -сектором. Позже вы можете использовать эту переменную для ссылки на объект, с которым вы начали.

function a() {
    this.b = 1;
    var that = this;
    this.set = setInterval(function() {console.log(that.b);}, 200);
}
2
ответ дан Sirko 28 August 2018 в 16:23
поделиться
Другие вопросы по тегам:

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