Конкатенация строк без оператора' +
Я играл с python, и я понял, что нам не нужно использовать оператор '+' для объединения строк, если он не используется напрямую.
например:
string1 = 'Hello' 'World' #1 works fine
string2 = 'Hello' + 'World' #2 also works fine
string3 = 'Hello'
string4 = 'World'
string5 = string3 string4 #3 causes syntax error
string6 = string3 + string4 #4 works fine
теперь у меня есть два вопроса:
- почему оператор 3 не работает, а оператор 1 делает?
- есть ли какие-либо технические различия, такие как скорость расчета и т. д. между утверждением 1 и 2?
7 ответов:
С docs:
несколько соседних строковых литералов (разделенных пробелами), возможно, с использованием различных соглашений о цитировании, разрешены, и их значение совпадает с их конкатенацией. Таким образом," hello "'world' эквивалентно"helloworld".
утверждение 3 не работает, потому что:
оператор ‘ + ' должен использоваться для объединения строковых выражений при выполнении время.
обратите внимание, что заголовок подзаголовка в документах также является "конкатенацией строковых литералов". Это работает только для строковых литералов, а не для других объектов.
там, вероятно, нет никакой разницы. Если есть, то это, вероятно, очень маленький и ничего, что кто-то должен беспокоиться.
кроме того, поймите, что это может быть опасно:
>>> def foo(bar, baz=None): ... return bar ... >>> foo("bob" ... "bill") 'bobbill'Это прекрасный пример того, как ошибки никогда не должны проходите молча. что, если бы я хотел
"bill"быть аргументомbaz? Я забыл запятую, но ошибка не возникает. Вместо этого произошла конкатенация.
чтобы ответить на ваш второй вопрос: нет никакой разницы вообще (по крайней мере с реализацией пользуюсь). Разбирая оба оператора, они отображаются как
LOAD_CONST STORE_FAST. Они эквивалентны.
можно использовать
%sкак это более эффективно, чем с помощью знака+.>>> string2 = "%s %s" %('Hello', 'World') >>> string2 'Hello World'(или)
еще один способ-это
.format>>> string2 = "{0} {1}".format("Hello", "World") >>> string2 'Hello World' >>>
это неявная конкатенация строковых литералов. Это происходит только со строковыми литералами, а не с переменными или другими выражениями, которые оценивают строки. Раньше была (крошечная) разница в производительности, но в эти дни оптимизатор peephole должен отображать формы, по существу, эквивалентные.
оператор 3 не работает, так как при объединении двух строковых выражений для создания новой строки вам нужен оператор'+'.
в то время как в случае sting 1,2 и 4 соседние литералы, разделенные пробелами, используют разные соглашения о цитировании.Поэтому им разрешено печатать их так же, как и их конкатенацию.
кроме того, не будет никакой существенной или заметной разницы во времени при выполнении этих 2 операций.
%%timeit -n 1 s1='ab' s2='ba' print(s1+s2)o/p Самый медленный пробег взял 17,08 раза дольше, чем самый быстрый. Это может означать, что промежуточный результат кэшируется. 57,8 МКС ± 92,5 МКС на петлю (среднее значение ± std. разработка. из 7 запусков, 1 цикл каждый)
%%timeit -n 1 s3='ab' 'ba' print(s3)o/p Самый медленный пробег занял в 4,86 раза больше времени, чем самый быстрый. Это может означать, что промежуточный результат кэшируется. 25,7 МКС ± 21 МКС на петлю (среднее ± std. разработка. из 7 запусков, 1 цикл каждый)
объединение двух или более строк в одну называется конкатенацией.
оператор + делает это в Python. Простое написание двух строковых литералов вместе также объединяет их.
str1 = 'Hello' str2 ='World!' # using + print('str1 + str2 = ', str1 + str2)для объединения строки с помощью " + " не требуется.
в python вступить встроенный метод есть, который делает конкатенацию веревка.
код:
def stringConcat(fname, lname): fullname=" ".join([fname,lname]) print("name of person is ",fullname) stringConcat("john", "smith")выход:
stringConcat("john", "smith") name of person is john smith
почему оператор 3 не работает, а оператор 1 делает?
потому что в первом операторе мы присваиваем некоторую константу переменной. Назначение переменной достаточно просто, так что мы можем продолжать ставить несколько констант в одну переменную, и назначение все равно будет проходить. Условия
"hello"и"world"- две константы того же типа. Итак, заявление сработало.если мы сделаем следующее, мы получим
SyntaxErrorstring1 = "Hello" 1причина в том, что мы предоставили несколько констант в одном назначении переменной. Это смутило python, и он выбросил его как ошибку.
оператор 3 Все о назначении переменной на основе двух переменных. Это произведет
SyntaxErrorпоскольку python не знает, что он может сделать с 2 переменными, прежде чем назначить его переменной.есть ли какие-либо технические различия, такие как скорость расчета и т. д. между утверждением 1 и 2?
да. Единственное техническое отличие-это читаемость, а не что-либо еще. Читаемость имеет наибольшее значение в Python. Для нетренированного глаза,
,"hello" "world"может выглядеть так, что компилятор добавит пространство к строкам. Но это не так."hello" + "world"является явным и нормальным. Почти всегда, явное лучше, чем неявное.
Comments