提问人:Wör Du Schnaffzig 提问时间:8/23/2023 更新时间:8/23/2023 访问量:65
Python 如何处理重新声明的函数
How Python deals with redeclared function
问:
我在 python 代码库中意外重新声明了函数。这些事件是简单的函数定义,不涉及。我想解决这个问题。但是,我不知道 python 实际使用了哪些函数。我只想保留这个功能。functools.singledispatch
请理解,我问这个问题是为了了解幕后发生的事情以及如何正确解决问题。当然,我知道在 python 中重新声明函数是糟糕的编码实践。我也知道棉绒可以暗示你这一点。但是,如果问题存在并且我想解决这个问题,我必须了解并找出所有应该删除的事件。
我做了一个小测试,似乎 python 实际上使用了最后一个定义:
def func1(a: int):
print("Num", a)
def func1(a: int):
print("A number: ", a)
func1(100)
->
/home/user/PycharmProjects/project/.venv/bin/python /home/user/.config/JetBrains/PyCharm2023.1/scratches/redeclared_func.py
A number: 100
我只是想问一下,以确保这种解释是正确的。当然,在那种情况下,除了最后一次出现之外,我不会保留任何内容。 例如,Python 版本、Python 解释器等之间可能存在差异。 如果导入了具有重新声明函数的模块,然后再次重新声明该函数,会发生什么情况?
答:
4赞
user21508463
8/23/2023
#1
成立的定义是执行流程中满足的最后一个定义,就像您正在分配一个变量一样。
F.D.公司
def F():
print("First")
F()
if True:
def F():
print("Second")
F()
else:
def F():
print("Third")
F()
F()
说
First
Second
Second
评论
0赞
Wör Du Schnaffzig
8/23/2023
这听起来很合乎逻辑!但是,它使解决问题变得更加困难,因为根据实际函数调用此定义或其他定义,可能会使用此定义。因此,我必须跟踪代码流,以查看每个调用使用哪个函数。
0赞
Anentropic
8/23/2023
如果您从另一个模块导入函数,那么我相信最后一个定义是要导入的定义,这可能会有所帮助
1赞
8/23/2023
@WörDuSchnaffzig:让函数在被调用时发出一条消息来标识自己是没有问题的。除非函数定义和调用是“静态”进行的,否则您不能保留跟踪。
0赞
ekhumoro
8/23/2023
@WörDuSchnaffzig 什么“问题”?变量阴影只是一个无关紧要的副作用,除非您的代码实际上需要访问被阴影的对象。在这种情况下,您可以简单地使用不同的名称(即在当前范围内)。
上一个:在 C 语言中定义函数指针?
评论
func1(100)
func1 = 1; func1 = 2
func1 = func0
def