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
Хранить ссылку на this
:
function a() {
var self = this;
self.b = 1;
self.set = setInterval(function() {console.log(self.b);}, 200);
}
Анонимная функция, которую вы передаете в setInterval
, имеет доступ к любым переменным в своей области, содержащей область видимости, то есть любые локальные переменные function a()
, Магия закрытия JS сохраняет эти переменные живыми даже после завершения a()
, и каждый вызов a()
получает свое закрытие.
Это было бы самое чистое решение, так как большую часть времени вы действительно хотите переключить этот контекст для своих последовательных вызовов методов:
// 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);
Поскольку у нас теперь ES6, я думаю, нам нужен еще один ответ:
Используйте функцию стрелки:
function a() {
this.b = 1;
this.set = setInterval(() => {console.log(this.b);}, 200);
}
Функции стрелки, противоположные нормальным функциям, не имеют контекст this
самостоятельно. Это означает, что у вас есть доступ к внешнему this
.
В вашем случае вы можете просто:
function a() {
var _this = this;
this.b = 1;
this.set = setInterval(function () {
console.log(_this.b);
}, 200);
}
Как правило, мы можем также иметь вспомогательный метод Function.prototype.bind
, чтобы исправить ссылку this
.
Просто сохраните ссылку this
в какой-либо другой переменной, которая позже не будет переопределена window
-сектором. Позже вы можете использовать эту переменную для ссылки на объект, с которым вы начали.
function a() {
this.b = 1;
var that = this;
this.set = setInterval(function() {console.log(that.b);}, 200);
}