首页 > 解决方案 > 函数签名中的默认参数初始化

问题描述

为什么在加载模块时会执行函数签名中的默认参数?示例test.py

import os


def environment_key(key=os.environ["MY_ENV_KEY"]):
    print(key)

当我在test.pyon cmd 行加载时,python -m test.py 出现以下错误:

bash-4.2# python -m test.py
Traceback (most recent call last):
  File "/usr/lib64/python2.7/runpy.py", line 163, in _run_module_as_main
    mod_name, _Error)
  File "/usr/lib64/python2.7/runpy.py", line 102, in _get_module_details
    loader = get_loader(mod_name)
  File "/usr/lib64/python2.7/pkgutil.py", line 462, in get_loader
    return find_loader(fullname)
  File "/usr/lib64/python2.7/pkgutil.py", line 472, in find_loader
    for importer in iter_importers(fullname):
  File "/usr/lib64/python2.7/pkgutil.py", line 428, in iter_importers
    __import__(pkg)
  File "test.py", line 4, in <module>
    def environment_key(key=os.environ["MY_ENV_KEY"]):
  File "/usr/lib64/python2.7/UserDict.py", line 40, in __getitem__
    raise KeyError(key)
KeyError: 'MY_ENV_KEY'

据我所知,Python 尝试在模块加载时初始化默认参数。我可以防止(延迟加载)这种行为吗?

谢谢

标签: pythonpython-3.x

解决方案


推荐阅读