在 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 中分配空值或字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何将具有隐藏字符的空白/单元格转换为空值或以其他方式删除隐藏字符

如何在 codeigniter form_validation 类中允许空值或数值?

NHibernate - 非空属性引用空值或瞬态值

为什么在哈希映射中使用空值或空键是有用的?

如何过滤数据表列的空值或空格

非空属性为持久值引用空值或瞬态值