2013-07-23 4 views
0

Я смотрел на некоторый код, который возвращает второй по величине элемент списка и натолкнулся на странное использование запятых. Надеюсь, кто-то может объяснить мне:Распаковка? странные запятые в python

это

m1, m2 = x, m1 

часть следующего кода:

def second_largest(numbers): 
    m1, m2 = None, None 

    for x in numbers: 
     if x >= m1: 
      m1, m2 = x, m1 
     elif x > m2: 
      m2 = x 

    return m2 

Что становится назначено, что в этом случае заявление?

+1

'x' присваивается' m1' и 'm1'' 'm2', в унисон. – voithos

+0

Это плохое кодирование по той причине, почему вам было не совсем ясно, что здесь происходит на первый взгляд. Хотя это заставка, это менее очевидно, что вы пытаетесь сделать, и делает ваш код труднее читать. – scohe001

+0

Я бы сказал, что трудно читать - это имена переменных 'm1' и' m2'. Множественное присвоение является стандартным Python. – user2357112

ответ

3

По существу, кортеж (m1,m2) получает значения в кортеже (x,m1). После утверждения m1 будет иметь старое значение x и m2 будет иметь старое значение m1. Пример:

>>> x = 2 
>>> y = 3 
>>> z = 4 
>>> x,y = y,z 
>>> x 
3 
>>> y 
4 

Кортеж (x,m1) создается прежде, чем любые задания сделаны. В результате этот синтаксис часто используется для замены двух переменных. Например, x,y = y,x будет менять значения в x и y.

2

Этот код: m1, m2 = x, m1 средство хранения значения x к m1 и значение m1 к m2.

Смежные вопросы