在python中分配空值或字符串

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

也许你是想和is比较一下。这是为了测试身份:a is b相当于id(a) == id(b)

或者检查两个字符串是否为空:

1
2
3
4
5
>>> not str2
True
>>> not string
True
>>>

所以两个都是空的…


如果您在case-1中检查id(string),在case2中检查id(str2),它将给出相同的值,两个字符串对象都是相同的。

1
2
def mine(str1, str2):
    print str1, str2

参见上面的方法,您可以调用mine(* string.split(':')),它将通过'abcd:'作为str1='abcd'和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

不,两个空字符串没有区别。在所有情况下,他们的行为都是一样的。