Есть ли что-то вроде этого:вызова метода на нескольких экземплярах в Python
a,b,c = a,b,c.method()
?
Это просто пример, я хочу знать, самый короткий путь, чтобы сделать это
Есть ли что-то вроде этого:вызова метода на нескольких экземплярах в Python
a,b,c = a,b,c.method()
?
Это просто пример, я хочу знать, самый короткий путь, чтобы сделать это
Не совсем, что короткие, но если я понимаю, что вы исправить, это будет работать:
a, b, c = (x.method() for x in (a, b, c))
(Обратите внимание, что если a
, b
или c
относятся к одному и тому же объекту, метод будет называться несколько раз).
Не короткий. Но вот альтернатива, использующая operator.methodcaller
.
a, b, c = map(operator.methodcaller('method'), (a,b,c))
Пример:
>>> import operator
>>> a, b, c = [1,2,3], [4,5,6], [7,8,9]
>>> a, b, c = map(operator.methodcaller('pop'), (a,b,c))
>>> a
3
>>> b
6
>>> c
9
>>> m = operator.methodcaller('pop') # If you call `method` multiple times,
# keep a reference to the methodcaller
>>> a, b, c = [1,2,3], [4,5,6], [7,8,9]
>>> a, b, c = map(m, (a,b,c))
>>> a
3
>>> b
6
>>> c
9
Если все объекты одного типа, вы можете использовать несвязанный метод. Например, a
, b
, c
здесь все экземпляры списка. Таким образом, вы можете использовать list.pop
вместо operator.methodcaller('pop')
.
Например:
>>> a, b, c = [1,2,3], [4,5,6], [7,8,9] # a, b, c are all `list` objects.
>>> a, b, c = map(list.pop, (a,b,c))
>>> a
3
>>> b
6
>>> c
9
Использование генератора было бы самым простым способом. Например, если a, b и с были строки:
a, b, c = 'asdf', 'quer', 'zxcv'
И вы хотите, чтобы капитализировать начало каждой строки, вы можете сделать:
a, b, c = (x.capitalize() for x in (a, b, c))
Ну, 'а, б, в = (x.method() для x в (a, b, c)) 'достаточно хорошо? – bereal
Чтобы быть понятным, вы хотите вернуть результаты вызова метода() 'на каждый объект обратно в сами объекты? –
Почему бы не использовать списки? 'l2 = [x.method() для x в l1]' может быть хорошим способом сделать то, что вам нужно. – user2357112