Pythonic方法创建一个稍后会成为对象的变量?

时间:2017-06-27 01:46:50

标签: python

创建一个稍后会为其分配了其他字符串的变量时,通常会这样做:

my_string = ""

表示数组:

my_array = []

等等。对于稍后会为其分配对象的变量,您可以为其分配任何内容,但是pythonic要做什么?使用' empty'创建一个类的实例似乎是一种浪费。事情传递给它。

3 个答案:

答案 0 :(得分:1)

您可以使用None

或者,如果您有可能想要将其与None进行比较,并希望了解其中的差异,则可以使用object()。虽然您仍然需要创建一个未使用的对象,但如果my_object is object尚未更新,则True只会返回my_object

答案 1 :(得分:1)

在你的示例中,字符串和列表,通常是设置每个添加到空对象。字符串支持连接和列表支持空列表上的无数功能。

以下是字符串的示例,如果您没有s='',则逻辑会中断:

>>> vowels='aeiou'
>>> s=''
>>> for ch in 'This is a longer string':
...   if ch in vowels: s+=ch
... 
>>> s
'iiaoei'

如果你有一个支持构建或添加空事物的对象,你可以调用构造函数。

foo()   # object foo that I will add to later...

或者,经典Python示例:

>>> from collections import Counter
>>> c=Counter()
>>> c=Counter()
>>> c+=Counter('123')
>>> c+=Counter('11222233333')
>>> c
Counter({'3': 6, '2': 5, '1': 3})

所以:

  1. 第一种情况: 如果要添加对象,请创建一个对象。调用像Counter()这样的构造函数或像[]

  2. 这样的快捷构造函数
  3. 第二种情况:如果您希望稍后在程序中发送一个对象为'truthy' or 'falsy'的信号作为某个逻辑快捷方式(您的对象要填充对象)或已测试)使用TrueFalse。或者,如果您发送此对象为空或无效或尚未处理的信号,请使用None

  4. 如果不是第一种情况'或者'第二个案例'上面 - 然后。你是混淆的。

答案 2 :(得分:0)

如果您担心构建不必要的对象,可以使用None。因为它是一个单例(即每个Python解释器只有一个None副本),所以你不会浪费时间和内存来创建一个完整的对象。以下是一个示例用法:

>>> user_input = None
>>> try:
    user_input = int(input('Enter a digit: '))
except ValueError:
    user_input = 'failed'


Enter a digit: abjkjsds
>>> user_input
'failed'
>>> 

由于TrueFalse也是单身,因此您可以使用它们来产生相同的效果。可能存在使用布尔值而不是简单地使用None更合适的情况。