在Python in a Nutshell(第2版)一书中,有一个示例使用
旧样式类来演示如何以经典分辨率顺序解析方法,
以及它与新顺序的不同之处.
我通过重写新样式的示例尝试了相同的示例,但结果与使用旧样式类获得的结果没有什么不同.我用来运行该示例的python版本是2.5.2.以下是示例:
class Base1(object):
def amethod(self): print "Base1"
class Base2(Base1):
pass
class Base3(object):
def amethod(self): print "Base3"
class Derived(Base2,Base3):
pass
instance = Derived()
instance.amethod()
print Derived.__mro__
Run Code Online (Sandbox Code Playgroud)
调用instance.amethod()打印Base1,但根据我对MRO的理解,新类型的输出应该是Base3.通话Derived.__mro__打印:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
我不确定我对新样式类的MRO的理解是不正确的还是我做了一个我无法察觉的愚蠢错误.请帮助我更好地了解MRO.
为什么下面的Python代码片段的输出不只是也不例外:1,因为第一次迭代过程中没有出现的异常.来自python docs(https://docs.python.org/2.7/tutorial/errors.html).
try ... except语句有一个可选的else子句,当存在时,必须遵循所有except子句.如果try子句不引发异常,则必须执行的代码很有用.
$ cat hello.py
for x in range(1,10):
try:
if x == 1:
continue
x/0
except Exception:
print "Kaput:%s" %(x)
else:
print "No exception:%s" %(x)
break
$ python hello.py
Kaput:2
Kaput:3
Kaput:4
Kaput:5
Kaput:6
Kaput:7
Kaput:8
Kaput:9
$ python -V
Python 2.7.8
Run Code Online (Sandbox Code Playgroud) 我有一个与程序行为改变有关的问题,缺少return语句导致python方法.
下面的count方法打印给定整数中的位数.使用下面的代码块我得到结果为4,这是预期的结果.
def count(x,acc=0):
if x==0:
return acc
return count(x/10,acc+1)
print "Count is %s" %(count(1234))
Run Code Online (Sandbox Code Playgroud)
结果: 计数为4
如果我修改上面的方法,使最后一个语句不包含'return'语句,我得到的结果是'None'.
def count(x,acc=0):
if x==0:
return acc
count(x/10,acc+1)
print "Count is %s" %(count(1234))
Run Code Online (Sandbox Code Playgroud)
结果:计数为无
(我使用的Python版本是:2.7.3)
由于Python不进行尾调用优化或是否涉及任何其他推理,是否会导致上述行为?
perl中的类似代码块(AFAIK不进行尾调用优化)提供了预期的结果,而'return'不是最后一个语句的一部分.
sub counter {
my ($n,$acc) = @_;
return $acc if ($n==0);
counter(int($n/10), $acc+1);
}
print "Count is:" . counter(1234,0) ."\n"
Run Code Online (Sandbox Code Playgroud)
结果:计数为:4
(我在代码块上面运行的Perl版本是:5.14.4和5.8.5).
我的问题是:
我有一个与Kubernetes网络相关的问题。
我有一个在通过端口提供请求的Pod中运行的微服务(例如numcruncherpod)9000,并且我已经创建了一个相应的服务类型NodePort(numcrunchersvc)和该服务公开的节点端口30900。
我的集群有3个具有以下IP的节点:
我将通过反向代理(nginx)将流量路由到我的集群。据我在nginx中了解,我需要指定所有这些集群节点的IP才能将流量路由到集群,我的理解正确吗?
我担心的是,由于nginx不会了解群集,因此确定流量应发送到的群集节点可能不是一个很好的判断。那么是否有更好的方法将流量路由到我的kubernetes集群?
PS:我没有在任何云平台上运行群集。