如何检测内置函数的名称已被另一个模块导入

问题描述 投票:0回答:1

背景故事

坦白说,我用过

import *
并且感受到了痛苦。

具体来说,我有

from pyspark.sql.functions import *
,然后尝试使用已被自由导入覆盖的内置函数。

看看两者中存在多少相同的命名函数,我想我遇到碰撞只是时间问题:

>>> from pprint import pprint
>>> from pyspark.sql import functions as F
>>> pprint(list(set(dir(F)) & set(dir(__builtin__))))
['sum',
 '__package__',
 '__doc__',
 'round',
 'abs',
 'min',
 'bin',
 'filter',
 'ascii',
 '__spec__',
 'hex',
 '__loader__',
 'slice',
 'hash',
 'pow',
 'max',
 '__name__']

愿望

我尝试过更主动一点,看看我的全局命名空间发生了什么变化,但特别是内置函数让我感到困惑。

>>> ORIGINAL_GLOBALS = globals().copy()
>>> from pyspark.sql.functions import *
>>> MUTATED_GLOBALS = {key: value for key, value in globals().items() if (key in ORIGINAL_GLOBALS and ORIGINAL_GLOBALS[key] != value)}
>>> print(MUTATED_GLOBALS)
{}

我希望上面列出了被

import *
隐藏的上述功能,但是它是空的。

问题

  • 我是否正在寻找正确的位置来询问全局命名空间?
  • 如果是这样,
    builtins
    是否发生了一些我需要考虑的定制事情?
  • 如果
    builtins
    有什么不寻常的地方,还有其他东西有相同的侧门吗?

TL;博士

有没有一种好的 Python 方式可以让我检测全局命名空间中发生的更改?

python python-import built-in
1个回答
0
投票

Builtins 不在全局命名空间中。内置命名空间是上一层。

import builtins
并检查一下。

© www.soinside.com 2019 - 2024. All rights reserved.