<p>在python3.x中,可以使用<a href="http://www.python.org/dev/peps/pep-3107/#syntax" rel="nofollow noreferrer">function annotations</a>:</p>
<pre><code>>>> def foo(indict: dict(apple=None, pear=None)):
... print(indict)
...
>>> foo(dict())
{}
</code></pre>
<p>您甚至可以疯狂地使用现在更为广泛接受的(由解释器)<code>Ellipsis</code>文本</p>
^{pr2}$
<p>正如您从我的第一个示例中看到的那样,它的注释并没有实施任何东西。您必须在函数本身中执行验证,尽管我认为如果您想保持干燥,您可以从注释<sup>1</sup>中反省所需的键,但仅为2个键所做的努力可能不值得。。。在</p>
<p>在python2.x(以及更传统的)中,也许您只想将信息放入docstring;—)——我建议您对python3.x也这样做,因为这是查找文档的传统位置。。。在</p>
<p><sup><sup>1</sup><code>keys = foo.__annotations__['indict'].keys() - {'extra_items'}</code></sup></p>
<p><strong>更新</strong>
请注意,现在有了像mypy这样的花哨事物,这个答案可能有点过时了。您可以考虑使用<a href="https://github.com/python/mypy/blob/master/extensions/mypy_extensions.py" rel="nofollow noreferrer">^{<cd3>}</a>从<code>mypy_extensions</code>进行注释。这应该为用户设置期望值,如果使用<code>mypy</code>之类的类型检查器,甚至可能有助于捕获一些错误。在</p>
<pre><code>from mypy_extensions import TypedDict
class Apple:
"""Represent an Apple."""
class Pear:
"""Represent a Pear."""
# "annotation-type" for a dictionary that has an apple and pear key whose values are Apple and Pear instances.
FruitBowl = TypedDict("FruitBowl": {"apple": Apple, "Pear": Pear})
def foo(indict: FruitBowl) -> int:
...
</code></pre>