gpt4 book ai didi

python - '全局名称 <同一 namespace 中的函数> 未定义' - 为什么会发生这种情况?

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:18 25 4
gpt4 key购买 nike

我正在尝试在 Pygame 中进行一些多边形旋转,所以我正在做一些点积并获取弧度并将 acos 应用于这些弧度。根据this link我应该使用钳位函数将点积保持在 -1 和 1 之间。但是,我收到以下错误:

d_p = (clamp(self.dot_product(other), -1.0, 1.0))
NameError: global name 'clamp' is not defined

它们似乎在同一个命名空间中——这与它们在代码中出现的完全一样。我尝试在 clamp() 上使用 @staticmethod 但它保持不变。唯一可行的是使它成为一个实例方法(签名 clamp(self, x, a, b) 但当 clamp 不需要了解特定实例时,这似乎是一个糟糕的解决方案. 解决此问题的正确方法是什么?我缺少什么概念?

class v2:
#...
def clamp(x, a, b):
return min(max(x, a), b)

def radians_between(self, other):
d_p = (clamp(self.dot_product(other), -1.0, 1.0))
cos_of_angle = d_p/(self.get_magnitude()*other.get_magnitude())
return math.acos(cos_of_angle)

最佳答案

为了解决这个问题,在定义它的类中使用它时必须使用 self.clamp()。否则你必须使用 v2.clamp() 如果您是从类外调用它。

之所以说 global name 'clamp' is not defined 是因为它认为 'clamp' 应该是全局范围内的变量、函数或类,例如:

class clamp(object):
pass

或:

clamp="I am a variable!"

或者最后:

def clamp():
print "I am clamp in a function!"

关于python - '全局名称 <同一 namespace 中的函数> 未定义' - 为什么会发生这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12994155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com