我想了解分配空值和空输出之间是否存在差异,如下所示:
1>分配像这样的值
string = ""
2 - ;作为输出返回的空值
string = "abcd:"
str1, str2 = split(':')
换句话说,1>中'string'的值是否存在差异?和'str2'在2>?如果一个方法作为参数传递,它将如何看到'str2'的值?
答案 0 :(得分:5)
检查与==
>>> 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
>>>
这两个都是空的......
答案 1 :(得分:2)
换句话说,1>中'string'的值是否有差异?和'str2'在2>?
不,没有区别,两者都是空字符串""
。
如果方法作为参数传递,方法如何看到'str2'的值?
该方法将其视为长度为0的字符串,换句话说,是一个空字符串。
答案 2 :(得分:2)
如果你要检查case-1中的id(string)
和case2中的id(str2)
,它将给你相同的值,两个字符串对象都是相同的。
def mine(str1, str2):
print str1, str2
请参阅上述方法,您可以调用mine(* string.split(':'))
它将'abcd:'
传递为str1 ='abcd'和str2 =''。
答案 3 :(得分:1)
>>> string1 = ""
>>> string2 = "abcd:"
>>> str1, str2 = string.split(':')
>>> str1
'abcd'
>>> str2
''
>>> string1 == str2
True
没有。两个空字符串之间没有区别。在所有情况下,它们的行为都相同。
答案 4 :(得分:1)
你可以亲眼看看。
>>> s1 = ''
>>> s2 = 'abcd:'
>>> s3, s4 = s2.split(':')
>>> s1 == s4
True
答案 5 :(得分:1)
>>> 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'>
没有差别
答案 6 :(得分:1)
空字符串是一个文字,在Python文字中是不可变对象,值永远不会改变。但是,在某些情况下,具有相同值的两个文字对象可以具有不同的标识(对象的标识是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 引用具有相同类型和值的任何现有对象,而 对于可变对象,这是不允许的。例如,在a = 1之后; b = 1,a 和b可能会或可能不会引用值为1的同一对象, 取决于实现,但在c = []之后; d = [],c和d是 保证引用两个不同的,独特的,新创建的空 名单。 (注意,c = d = []将同一个对象分配给c和d。)