在 Python 中分配空值或字符串
Posted
技术标签:
【中文标题】在 Python 中分配空值或字符串【英文标题】:Assigning empty value or string in Python 【发布时间】:2014-03-25 15:13:08 【问题描述】:我想了解一下赋值空值和空输出是否有区别,如下:
1> 像这样赋值
string = ""
2> 一个空值作为输出返回
string = "abcd:"
str1, str2 = split(':')
也就是说,'string' in 1> 和 'str2' in 2> 的值有区别吗?如果将“str2”作为参数传递,方法将如何查看它的值?
【问题讨论】:
为什么会有差异?无论如何,如果你想对此进行测试,你可以使用==
来找出答案。
空字符串是一个空字符串。不过,不要将它们与 is
进行比较 :-)
@roippi: is
在这种情况下实际上返回 True
@DavidRobinson 我知道,我应该说不要将一般字符串与is
进行比较。我们不希望更多的那些问题被欺骗:-)
【参考方案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 = 1 之后; b = 1,一个 并且 b 可能会或可能不会引用值为 1 的同一对象, 取决于实现,但在 c = []; 之后d = [],c 和 d 是 保证引用两个不同的、唯一的、新创建的空 列表。 (注意 c = d = [] 将同一个对象分配给 c 和 d。)
【讨论】:
【参考方案2】:用==
检查相等性
>>> 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
>>>
所以两者都是空的......
【讨论】:
【参考方案3】:如果你在 case-1 中检查id(string)
,在 case2 中检查id(str2)
,它会给你相同的值,两个字符串对象是相同的。
def mine(str1, str2):
print str1, str2
查看上述方法,您可以调用mine(* string.split(':'))
,它会将'abcd:'
传递为str1 = 'abcd' 和str2 = ''。
【讨论】:
【参考方案4】:也就是说,'string' in 1>和'str2' in 2>的值有区别吗?
不,没有区别,都是空字符串""
。
如果将'str2'作为参数传递,方法将如何查看它的值?
该方法会将其视为长度为 0 的字符串,即空字符串。
【讨论】:
【参考方案5】:>>> 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】:你可以自己看看。
>>> s1 = ''
>>> s2 = 'abcd:'
>>> s3, s4 = s2.split(':')
>>> s1 == s4
True
【讨论】:
【参考方案7】:>>> string1 = ""
>>> string2 = "abcd:"
>>> str1, str2 = string.split(':')
>>> str1
'abcd'
>>> str2
''
>>> string1 == str2
True
没有。两个空字符串没有区别。它们在所有情况下的行为都相同。
【讨论】:
以上是关于在 Python 中分配空值或字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何将具有隐藏字符的空白/单元格转换为空值或以其他方式删除隐藏字符