Назначение пустого значения или строки в Python
Я хотел бы понять, существует ли разница между назначением пустого значения и пустым выходом следующим образом:
1 > Назначение такого значения
string = ""
2 > Пустое значение, возвращаемое как результат
string = "abcd:"
str1, str2 = split(':')
Другими словами, существует ли разница в значениях 'string' в 1 > и 'str2' в 2 > ? И как бы метод увидел значение 'str2', если он передан как аргумент?
Ответы
Ответ 1
Проверка равенства с ==
>>> string = ""
>>> s = "abcd:"
>>> str1, str2 = s.split(':')
>>> str1
'abcd'
>>> str2
''
>>> str2 == string
True
Возможно, вы пытались сравнить с is
. Это для проверки идентичности: a is b
эквивалентно id(a) == id(b)
.
Или проверьте обе строки для пустоты:
>>> not str2
True
>>> not string
True
>>>
Итак, оба пустые...
Ответ 2
Если вы проверите id(string)
в case-1 и id(str2)
в case2, это даст то же значение, оба строковых объекта одинаковы.
def mine(str1, str2):
print str1, str2
см. вышеупомянутый метод, который вы можете вызвать mine(* string.split(':'))
, он передаст 'abcd:'
как str1 = 'abcd' и str2 = ''.
Ответ 3
Другими словами, существует ли разница в значениях 'string' в 1 > и 'str2' в 2 > ?
Нет, нет разницы, обе являются пустыми строками ""
.
И как метод увидит значение 'str2', если он передан как аргумент?
Метод будет рассматривать его как строку длины 0, другими словами, пустую строку.
Ответ 4
>>> string1 = ""
>>> string2 = "abcd:"
>>> str1, str2 = string.split(':')
>>> str1
'abcd'
>>> str2
''
>>> string1 == str2
True
Нет. Между двумя пустыми строками нет разницы. Они будут вести себя одинаково во всех случаях.
Ответ 5
Вы можете сами убедиться.
>>> s1 = ''
>>> s2 = 'abcd:'
>>> s3, s4 = s2.split(':')
>>> s1 == s4
True
Ответ 6
>>> string = ""
>>> id(string)
2458400
>>> print string
>>> string = "abcd:"
>>> str1, str2 = string.split(':')
>>> print str1
abcd
>>> print str2
>>> id(str2)
2458400
>>> type(string)
<type 'str'>
>>> type(str2)
<type 'str'>
Нет никакой разницы
Ответ 7
Пустая строка является литералом, в литературе Python - неизменяемые объекты, и значение никогда не изменяется. Однако в некоторых случаях два литерала с одинаковым значением могут иметь разные идентификаторы (Identity объекта является адресом ячейки памяти в CPython, и вы можете получить его с помощью id (obj)), чтобы ответить на ваш вопрос
print id(string) == id(str2) # Can output either True or False
print string == str2 # Will always output True
Обратите внимание, что большая часть времени id (string) должна быть равна id (str2):).
Подробнее о модели данных можно прочитать в Python Language Reference. Я цитирую текст, относящийся к вопросу:
Типы затрагивают почти все аспекты поведения объекта. Даже важность идентичности объекта в некотором смысле затрагивается: для неизменяемых типы, операции, которые вычисляют новые значения, могут фактически вернуть ссылку на любой существующий объект с тем же типом и значением, в то время как для изменяемых объектов это недопустимо. Например, после a = 1; b = 1, a и b может или не может ссылаться на один и тот же объект со значением один, в зависимости от реализации, но после c = []; d = [], c и d являются гарантированно ссылаться на два разных, уникальных, вновь созданных пустых списки. (Обратите внимание, что c = d = [] присваивает один и тот же объект как c, так и d.)