相关疑难解决方法(0)

如何在Python中创建常量?

有没有办法在Python中声明一个常量?在Java中,我们可以用这种方式创建常量值:

public static final String CONST_NAME = "Name";
Run Code Online (Sandbox Code Playgroud)

Python中上述Java常量声明的等价物是什么?

python constants

903
推荐指数
23
解决办法
91万
查看次数

动态设置局部变量

你如何在Python中动态设置局部变量?

(变量名称是动态的)

更新:我知道这不是一个好的做法,而且这些言论是合法的,但这不是一个坏问题,只是一个更理论的问题 - 我不明白为什么这证明了这一点.

python dynamic

97
推荐指数
3
解决办法
6万
查看次数

修改globals()的输出是否安全?

locals()函数文档特别警告不要修改其输出,因为解释器可能无法反映本地范围的更改.我假设这意味着Python规范不需要它,即使它在CPython中工作.

我想知道globals()是否相同.文档中没有任何警告,但我觉得奇怪的是,这会有所不同,因为每个函数显然在不同的范围内执行相同的操作.

如果它是安全的,修改globals()'输出将改善我正在处理的项目的简单性和兼容性.

python globals

21
推荐指数
1
解决办法
1979
查看次数

有什么方法可以修改本地词典吗?

locals是一个内置函数,返回本地值的字典.文件说:

警告

不应修改此词典的内容; 更改可能不会影响解释器使用的局部变量的值.

不幸的是,exec在Python 3.0中也有同样的问题.这有什么办法吗?

用例

考虑:

@depends("a", "b", "c", "d", "e", "f")
def test():
    put_into_locals(test.dependencies)
Run Code Online (Sandbox Code Playgroud)

depends将其参数中提供的字符串存储在列表中test.dependences.这些字符串是字典中的键d.我希望能够编写,put_into_locals以便我们可以将值拉出d并将它们放入本地.这可能吗?

python local-variables

14
推荐指数
3
解决办法
1万
查看次数

在Python记录器中覆盖lineno的最佳方法

我编写了一个装饰器,它记录用于调用特定函数或方法的参数.如下图所示,除了报告logRecord的行号是装饰器的行号而不是func正在包装的行号之外,它运行良好:

from functools import wraps
import inspect
import logging

arg_log_fmt = "{name}({arg_str})"


def log_args(logger, level=logging.DEBUG):
    """Decorator to log arguments passed to func."""
    def inner_func(func):
        line_no = inspect.getsourcelines(func)[-1]

        @wraps(func)
        def return_func(*args, **kwargs):
            arg_list = list("{!r}".format(arg) for arg in args)
            arg_list.extend("{}={!r}".format(key, val)
                            for key, val in kwargs.iteritems())
            msg = arg_log_fmt.format(name=func.__name__,
                                     arg_str=", ".join(arg_list))
            logger.log(level, msg)
            return func(*args, **kwargs)
        return return_func

    return inner_func

if __name__ == "__main__":
    logger = logging.getLogger(__name__)
    handler = logging.StreamHandler()
    fmt = "%(asctime)s %(levelname)-8.8s [%(name)s:%(lineno)4s] %(message)s"
    handler.setFormatter(logging.Formatter(fmt)) …
Run Code Online (Sandbox Code Playgroud)

python logging decorator

10
推荐指数
3
解决办法
1966
查看次数