Python интерпретирует
tuple(ele*float(poly.index(ele)))
как cast , а не как оболочку .Вы даете ему один аргумент, и он предполагает, что этот аргумент является итеративным объектом, который вы хотите переформатировать в кортеж.Фактически, вы действительно хотите создать одноэлементный кортеж, содержащий объект.Это может произойти и со списками и наборами, и я подозреваю, что если вы выполните одно из следующих действий:
list(ele*float(poly.index(ele)))
set(ele*float(poly.index(ele)))
, вы увидите ту же ошибку, что и сейчас.
Самое простое решение этого - просто использовать литерал tuple
вместо функции tuple()
:
der += (ele*float(poly.index(ele)),)
(для ясности, (value,)
- этосинтаксис для одноэлементного кортежа, потому что круглые скобки были бы неоднозначными. Если вы хотите, чтобы максимально ясно, вы могли бы просто использовать список вместо этого большую часть времени - литерал списка просто []
иустановленный литерал {}
)