Assigning empty value or string in Python
我想了解分配空值和空输出之间是否存在差异,如下所示:
1>分配这样的值
1 | string ="" |
2>作为输出返回的空值
1 2 | string ="abcd:" str1, str2 = split(':') |
换句话说,1>中的"string"值和2>中的"str2"值有区别吗?如果将"str2"作为参数传递,一个方法将如何看到它的值?
与
1 2 3 4 5 6 7 8 9 | >>> string ="" >>> s ="abcd:" >>> str1, str2 = s.split(':') >>> str1 'abcd' >>> str2 '' >>> str2 == string True |
也许你是想和
或者检查两个字符串是否为空:
1 2 3 4 5 | >>> not str2 True >>> not string True >>> |
所以两个都是空的…
如果您在case-1中检查
1 2 | def mine(str1, str2): print str1, str2 |
参见上面的方法,您可以调用
In other words, is there a difference in values of 'string' in 1> and 'str2' in 2>?
不,没有区别,两者都是空字符串
And how would a method see the value of 'str2' if it is passed as an argument?
方法会将其视为长度为0的字符串,换句话说,是一个空字符串。
空字符串是一个文本,在python中,文本是不可变的对象,并且值永远不会更改。但是,在某些情况下,具有相同值的两个文本对象可以具有不同的标识(对象的标识是cpython中内存位置的地址,您可以使用id(obj)获取它),以便回答您的问题。
1 2 | print id(string) == id(str2) # Can output either True or False print string == str2 # Will always output True |
注意,大多数时间id(字符串)应该等于id(str2):)。
您可以在python语言参考中阅读有关数据模型的信息,以获取进一步的详细信息。我引用了与问题有关的文本:
Types affect almost all aspects of object behavior. Even the
importance of object identity is affected in some sense: for immutable
types, operations that compute new values may actually return a
reference to any existing object with the same type and value, while
for mutable objects this is not allowed. E.g., after a = 1; b = 1, a
and b may or may not refer to the same object with the value one,
depending on the implementation, but after c = []; d = [], c and d are
guaranteed to refer to two different, unique, newly created empty
lists. (Note that c = d = [] assigns the same object to both c and d.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | >>> 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'> |
不,没有区别
你可以自己看看。
1 2 3 4 5 | >>> s1 = '' >>> s2 = 'abcd:' >>> s3, s4 = s2.split(':') >>> s1 == s4 True |
1 2 3 4 5 6 7 8 9 | >>> string1 ="" >>> string2 ="abcd:" >>> str1, str2 = string.split(':') >>> str1 'abcd' >>> str2 '' >>> string1 == str2 True |
不,两个空字符串没有区别。在所有情况下,他们的行为都是一样的。