yieldPython中关键字的用途是什么?它有什么作用?
例如,我试图理解这段代码1:
def _get_child_candidates(self, distance, min_dist, max_dist):
if self._leftchild and distance - max_dist < self._median:
yield self._leftchild
if self._rightchild and distance + max_dist >= self._median:
yield self._rightchild
Run Code Online (Sandbox Code Playgroud)
这是来电者:
result, candidates = [], [self]
while candidates:
node = candidates.pop()
distance = node._get_dist(obj)
if distance <= max_dist and distance >= min_dist:
result.extend(node._values)
candidates.extend(node._get_child_candidates(distance, min_dist, max_dist))
return result
Run Code Online (Sandbox Code Playgroud)
_get_child_candidates调用该方法时会发生什么?列表是否返回?单个元素?它又被召唤了吗?后续通话何时停止?
1.代码来自Jochen Schulz(jrschulz),他为度量空间创建了一个很棒的Python库.这是完整源代码的链接:模块mspace.
selfPython 中这个词的目的是什么?我理解它指的是从该类创建的特定对象,但我不明白为什么它明确需要作为参数添加到每个函数.为了说明,在Ruby中我可以这样做:
class myClass
def myFunc(name)
@name = name
end
end
Run Code Online (Sandbox Code Playgroud)
我很容易理解.但是在Python中我需要包括self:
class myClass:
def myFunc(self, name):
self.name = name
Run Code Online (Sandbox Code Playgroud)
谁能跟我说说这个?这不是我在(无可否认的有限)经历中遇到的事情.
这两个班级有何不同?
class A():
x=3
class B():
def __init__(self):
self.x=3
Run Code Online (Sandbox Code Playgroud)
有什么显着差异吗?
我不明白以下示例中的区别.有一次类的一个实例可以改变另一个实例的类变量,而另一个实例却不能?
例1:
class MyClass(object):
mylist = []
def add(self):
self.mylist.append(1)
x = MyClass()
y = MyClass()
x.add()
print "x's mylist: ",x.mylist
print "y's mylist: ",y.mylist
Run Code Online (Sandbox Code Playgroud)
输出:
x的mylist:[1]
你的mylist:[1]
因此,这里的实例x类A是能够访问和修改类属性mylist,这也是该实例的属性y的A.
例2:
class MyBank(object):
crisis = False
def bankrupt(self) :
self.crisis = True
bankX = MyBank()
bankY = MyBank()
bankX.bankrupt()
print "bankX's crisis: ",bankX.crisis
print "bankY's crisis: ",bankY.crisis
Run Code Online (Sandbox Code Playgroud)
bankX的危机:是的
bankY的危机:错误
为什么这个例子不起作用?
class Number():
list = []
number = Number()
number.list.append(0)
print number.list # [0]
newNumber = Number()
newNumber.list.append(1)
print newNumber.list # [0,1]
Run Code Online (Sandbox Code Playgroud)
我创建了两个实例,为什么newNumber.list对象有0?为什么number和newNumber使用相同的列表?有人可以帮帮我吗?为什么'i'在后面没有变化?
class Number:
i = 0
number = Number()
number.i = 1
print number.i # 1
newNumber = Number()
print newNumber.i # 0
Run Code Online (Sandbox Code Playgroud)