在我的 Maya Python 脚本中,我需要在实例化自己的参数之前检查是否传入了 Logger 参数。我怎么做?
In my Python script for Maya, I need to check if a Logger argument is being passed in before I instantiate my own. How do I do that?
我正在使用 Python 为 Maya 创建一个工具,我需要在实例化我自己的记录器之前检查是否传入了记录器。我该怎么做,我是否可以创建一个函数来专门处理日志记录?我想可能会有更高级别的,比如 Shotgun Maya。
# this is a global variable
LOGGER = logging.logger(etc etc)
def function(logger=LOGGER):
如果我理解正确你想做什么,习惯用法是为关键字参数分配一个假值,然后继续分配默认值(这里是全局变量)或你显式传递给函数的值:
LOGGER = ... # global instance
...
def f(..., logger=None):
...
logger = logger if logger else LOGGER
...
...
f(...) # uses LOGGER
f(..., logger=logging.logger(...)) # uses new instance
重要的是要注意,当你说 def f(..., var=something)
时,对 var
的赋值发生在编译时,所以如果你省略对假值的赋值并直接说 def f(..., logger=LOGGER)
你有两个问题 ① 如果 LOGGER
在编译时没有绑定你会出错 ② 如果在运行时你改变全局 LOGGER
你的函数将继续使用定义的 LOGGER
在编译时。
我正在使用 Python 为 Maya 创建一个工具,我需要在实例化我自己的记录器之前检查是否传入了记录器。我该怎么做,我是否可以创建一个函数来专门处理日志记录?我想可能会有更高级别的,比如 Shotgun Maya。
# this is a global variable
LOGGER = logging.logger(etc etc)
def function(logger=LOGGER):
如果我理解正确你想做什么,习惯用法是为关键字参数分配一个假值,然后继续分配默认值(这里是全局变量)或你显式传递给函数的值:
LOGGER = ... # global instance
...
def f(..., logger=None):
...
logger = logger if logger else LOGGER
...
...
f(...) # uses LOGGER
f(..., logger=logging.logger(...)) # uses new instance
重要的是要注意,当你说 def f(..., var=something)
时,对 var
的赋值发生在编译时,所以如果你省略对假值的赋值并直接说 def f(..., logger=LOGGER)
你有两个问题 ① 如果 LOGGER
在编译时没有绑定你会出错 ② 如果在运行时你改变全局 LOGGER
你的函数将继续使用定义的 LOGGER
在编译时。