python - 如何在 Python 中创建 "optional"参数?

标签 python

我正在编写一个名为“Bag”的简单 Python 类:

class Bag:
def __init__(self, items=None):
    if self.items == None:
        self.items = defaultdict()
    else:
        temp_dict = defaultdict()
        for key in self.items:
            temp_dict[key] += 1
        self.items = temp_dict 

变量items接受一个对象列表,例如:

['d','a','b','d','c','b','d']

从那里,“def __init__(self, items=None)”将:

  1. items初始化为一个空的defaultdict,如果没有传递给items,或者
  2. 如果将对象列表传递到 items,则初始化传入的参数。

例如,这应该有效:

b = Bag()

没有参数应该没问题,因为 items 默认设置为 _None

但是,这总是引发异常(来自检查错误的脚本):

*Error: b = Bag() raised exception AttributeError: 'Bag' object has no attribute 'items'

我想初始化 Bag() 而不向 items 传递参数。

希望一切都清楚,如果不是请告诉我。

有什么想法或代码有什么问题吗?

最佳答案

from collections import defaultdict

class Bag(object):

def __init__(self, items=None):
    self.items = items or list()
    if not self.items:
        self.items = defaultdict()
    else:
        temp_dict = defaultdict()
        for key in self.items:
            temp_dict[key] += 1
        self.items = temp_dict

我做了一些更正:

1) 创建 self.items 并用 items 初始化 2) 使用 is None 或简单地 not self.items 与 None 进行比较,因为空列表的计算结果为 False

关于python - 如何在 Python 中创建 "optional"参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43554486/

相关文章:

php - int((0.1+0.7)*10) = 7 在多种语言中。如何防止这种情况?

python - 如何使用python基于正则表达式分割大文本文件

python - 在Windows x64上编译Python模块

python - 如何强制 Airflow 任务失败?

python - 如何在 Keras、Tensorflow 中导入 LSTM

javascript - 不正确配置 : Error importing middleware django. contrib.admindocs.middleware: "No module named middleware"

python - 多重处理 - 生产者/消费者设计

python - h2o python 的 one_hot_explicit 参数引发错误

python - 在 python 中自动激活多处理管理器()字典

python - 我如何在 Windows 中运行 python doctest?