¿Cómo transponer dos argumentos de una función en Python?

Pregunta:

¿Cómo puedo intercambiar dos argumentos en una llamada a una función de Python?

Si pongo un point en el espacio entre estos dos argumentos:

self.assertEqual(json.loads(some.data), json_data)

y luego Mt ( transpose-words ), obtengo:

self.assertEqual(json.loads(some.json), data_data)

Por otro lado con CMt ( transpose-sexps ) obtengo:

self.assertEqual(json.loadsjson_data, (some.data))

Lo que quiero es:

self.assertEqual(json_data, json.loads(some.data))

¿Hay algún comando que haga eso?

Respuesta:

Utilizo una variación de transpose-sexps que busca el caso que usted describe y transpone cosas separadas por comas, o simplemente hace transpose-sexps regulares. También deja el cursor en su lugar en lugar de arrastrarlo hacia adelante, lo cual es un poco diferente pero a mí personalmente me gusta.

(defun my-transpose-sexps ()
  "If point is after certain chars transpose chunks around that.
Otherwise transpose sexps."
  (interactive "*")
  (if (not (looking-back "[,]\\s-*" (point-at-bol)))
      (progn (transpose-sexps 1) (forward-sexp -1))
    (let ((beg (point)) end rhs lhs)
      (while (and (not (eobp))
                  (not (looking-at "\\s-*\\([,]\\|\\s)\\)")))
        (forward-sexp 1))
      (setq rhs (buffer-substring beg (point)))
      (delete-region beg (point))
      (re-search-backward "[,]\\s-*" nil t)
      (setq beg (point))
      (while (and (not (bobp))
                  (not (looking-back "\\([,]\\|\\s(\\)\\s-*" (point-at-bol))))
        (forward-sexp -1))
      (setq lhs (buffer-substring beg (point)))
      (delete-region beg (point))
      (insert rhs)
      (re-search-forward "[,]\\s-*" nil t)
      (save-excursion
        (insert lhs)))))

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım