Конкатенация строк без оператора' +



Я играл с 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


теперь у меня есть два вопроса:




  1. почему оператор 3 не работает, а оператор 1 делает?

  2. есть ли какие-либо технические различия, такие как скорость расчета и т. д. между утверждением 1 и 2?

656   7  

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" - две константы того же типа. Итак, заявление сработало.

если мы сделаем следующее, мы получим SyntaxError

string1 = "Hello" 1

причина в том, что мы предоставили несколько констант в одном назначении переменной. Это смутило python, и он выбросил его как ошибку.

оператор 3 Все о назначении переменной на основе двух переменных. Это произведет SyntaxError поскольку python не знает, что он может сделать с 2 переменными, прежде чем назначить его переменной.

есть ли какие-либо технические различия, такие как скорость расчета и т. д. между утверждением 1 и 2?

да. Единственное техническое отличие-это читаемость, а не что-либо еще. Читаемость имеет наибольшее значение в Python. Для нетренированного глаза,"hello" "world" может выглядеть так, что компилятор добавит пространство к строкам. Но это не так.

,
"hello" + "world"

является явным и нормальным. Почти всегда, явное лучше, чем неявное.

Comments

    Ничего не найдено.