在Python中分配空值或字符串

时间:2014-02-24 05:31:26

标签: python

我想了解分配空值和空输出之间是否存在差异,如下所示:

1>分配像这样的值

string = ""

2 - ;作为输出返回的空值

string = "abcd:"
str1, str2 = split(':')

换句话说,1>中'string'的值是否存在差异?和'str2'在2>?如果一个方法作为参数传递,它将如何看到'str2'的值?

7 个答案:

答案 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。)