В Python можно сохранять байты, используя псевдонимы, которые используются многократно. Например:
r=range
a=r(100)
b=r(200)
c=r(300)
Тем не менее, когда функции являются функциями-членами вместе, я не знаю, как их псевдоним так, чтобы разрешить цепочки. Например:
s='Hello'
// Plain code
s=s.replace('H','J').replace('e','i').replace('l','m').replace('o','y')
// What I am trying to do
q=replace
s=s.q('H','J').q('e','i').q('l','m').q('o','y')
Очевидно, то, что я пытаюсь сделать, недопустимо. И это тоже
q=s.replace
s=q('H','J') // Replaces the 'H' in 'Hello'
s=q('e','i') // Replaces the 'e' in 'Hello'... and the J is gone.
s=q('l','m')
s=q('o','y')
Есть ли другой способ псевдонима функций-членов и связанных функций, который сохраняет символы?
q
означающим, чтоreplace
означает в классе, который вы используете.q
связан с методом замены этого конкретногоstr
экземпляра. Кроме того, помните, что вы можете сделать замену одного символа с"Hello".replace(*"HJ")
Ответы:
Без проблем! Вы можете использовать псевдоним метода, но вы должны знать, как его использовать:
Ключ заключается в том, что вы должны передать
self
явно, потому что псевдоним является своего рода функцией, которая принимает дополнительный аргумент, который принимаетself
:источник
Определите свой собственный класс с более коротким именем метода.
Например, если вы используете метод,
replace()
принадлежащийString
классу, вы можете сделать так, чтобы в вашем собственном классеS
был вызван метод,q
который делает то же самое.Вот одна реализация:
Вот намного лучшая реализация:
Используйте это так:
источник
Во всяком случае, это несколько символов короче
еще короче для небольшого количества замен
конечно, это только один конкретный случай. Тем не менее, Code Golf - это поиск особых случаев, которые могут сэкономить вам байты.
Можно написать функцию-обертку, которая обрабатывает общий случай, но код будет слишком большим, чтобы иметь место в большинстве задач, связанных с гольфом кода.
Вместо этого вам нужно подумать: «Я могу эффективно выполнить это преобразование (strokewise) с помощью str.replace. Могу ли я изменить внутреннее представление своего решения, чтобы воспользоваться этим? (Не тратя так много ударов, чтобы свести на нет преимущество)»
источник
Вы можете использовать
reduce
функцию.источник
Если вы делаете много замен, вы можете сделать это:
источник
[a]
)[a]
нужно ли заменить на.get(a,a)
(в противном случае мы получим что-то вроде Key Error)? И почемуlist(s)
вместоs
?Как насчет определения лямбда-функции?
источник
str.replace
/ это / что лямбда! Смотри мой ответ.Если ваши замены не должны быть связаны, вы можете использовать `str.translate '. Числа являются порядковыми номерами ASCII. Для использования этого способа требуется Python 3:
Попробуйте онлайн
источник