Python 2.7 Python:更简洁的初始化方法

Python 2.7 Python:更简洁的初始化方法,python-2.7,initialization,Python 2.7,Initialization,或者我应该说,完全不用初始化的方法 我真的很讨厌每次我想做一个简单的count变量时,我必须说,“嘿,python,这个变量从0开始。”我想说count+=1,让它在循环的第一次迭代中立即知道从0开始。也许我可以设计一些功能来适应这个count(1)将1添加到自行创建的内部count变量,该变量在循环迭代之间保持不变 我同样不喜欢将字符串/列表编辑成新的字符串/列表 (在循环之前初始化new\u string=”“/new\u list=[]) 我认为列表理解可能适用于某些列表 有人对如何解决这

或者我应该说,完全不用初始化的方法

我真的很讨厌每次我想做一个简单的count变量时,我必须说,“嘿,python,这个变量从0开始。”我想说
count+=1
,让它在循环的第一次迭代中立即知道从0开始。也许我可以设计一些功能来适应这个
count(1)
将1添加到自行创建的内部count变量,该变量在循环迭代之间保持不变

我同样不喜欢将字符串/列表编辑成新的字符串/列表

(在循环之前初始化
new\u string=”“/new\u list=[]

我认为列表理解可能适用于某些列表


有人对如何解决这个问题有什么建议吗?我是个新手,我断断续续地编程才半年。

如果你在for循环中使用计数器,你可以使用enumerate:

for counter, list_index in enumerate(list):
计数器是语句中的第一个变量,循环每次迭代都会向其添加1,下一个变量是列表中该迭代的值。我希望这能回答您的第一个问题,至于您的第二个问题,下面的代码可能会有所帮助

list_a = ["this", "is"]
list_b = ["a", "test"]
list_a += list_b
print(list_a)
["this", "is", "a", "test"]

+=也适用于字符串,因为它们本质上是列表。希望这有帮助

如果在for循环中使用计数器,则可以使用枚举:

for counter, list_index in enumerate(list):
计数器是语句中的第一个变量,循环每次迭代都会向其添加1,下一个变量是列表中该迭代的值。我希望这能回答您的第一个问题,至于您的第二个问题,下面的代码可能会有所帮助

list_a = ["this", "is"]
list_b = ["a", "test"]
list_a += list_b
print(list_a)
["this", "is", "a", "test"]

+=也适用于字符串,因为它们本质上是列表。希望这有帮助

免责声明:我不认为这会使初始化更干净。此外,如果您在计数器变量的某些用法中有输入错误,您将不会得到
namererror
,而是会静默地创建并增加第二个计数器。记住Python的禅宗:

显式比隐式好

话虽如此,您可以创建一个特殊类,该类将自动添加缺少的属性,并使用该类创建和自动初始化各种计数器:

class Counter:

    def __init__(self, default_func=int):
        self.default = default_func

    def __getattr__(self, name):
        if name not in self.__dict__:
            self.__dict__[name] = self.default()
        return self.__dict__[name]
现在您可以创建该类的单个实例来创建任意数量的相同类型的计数器。用法示例:

>>> c = Counter()
>>> c.foo
0
>>> c.bar += 1
>>> c.bar += 2
>>> c.bar
3
>>> l = Counter(list)
>>> l.blub += [1,2,3]
>>> l.blub
[1, 2, 3]
事实上,这与所做的类似,只是您可以使用点符号访问计数器,即
c.foo
而不是
c['foo']
。想想看,您甚至可以扩展
defaultdict
,使整个过程更加简单:

class Counter(collections.defaultdict):

    def __getattr__(self, name):
        return self[name]

免责声明:我不认为这会使初始化更干净。此外,如果您在计数器变量的某些用法中有输入错误,您将不会得到
namererror
,而是会静默地创建并增加第二个计数器。记住Python的禅宗:

显式比隐式好

话虽如此,您可以创建一个特殊类,该类将自动添加缺少的属性,并使用该类创建和自动初始化各种计数器:

class Counter:

    def __init__(self, default_func=int):
        self.default = default_func

    def __getattr__(self, name):
        if name not in self.__dict__:
            self.__dict__[name] = self.default()
        return self.__dict__[name]
现在您可以创建该类的单个实例来创建任意数量的相同类型的计数器。用法示例:

>>> c = Counter()
>>> c.foo
0
>>> c.bar += 1
>>> c.bar += 2
>>> c.bar
3
>>> l = Counter(list)
>>> l.blub += [1,2,3]
>>> l.blub
[1, 2, 3]
事实上,这与所做的类似,只是您可以使用点符号访问计数器,即
c.foo
而不是
c['foo']
。想想看,您甚至可以扩展
defaultdict
,使整个过程更加简单:

class Counter(collections.defaultdict):

    def __getattr__(self, name):
        return self[name]

那么,它应该初始化为
浮点
,还是
int
?或者是复杂的?如果你想数数不止一件事呢?如何重置匿名、自建的计数器变量?这似乎很不切实际。只需以正常方式初始化它。那么,它应该初始化为
浮点型
,还是
整数型
?或者是复杂的?如果你想数数不止一件事呢?如何重置匿名、自建的计数器变量?这似乎很不切实际。只需以正常方式初始化它。另外还有一个用于提及
defaultdict
。我接受了这个,因为它更灵活。谢谢。另外还有一个提到了
defaultdict
。我接受了这个,因为它更灵活。谢谢。我喜欢这个,将来也会记得。我喜欢这个,将来也会记得。