小编sat*_*esh的帖子

新式课程中的方法解决顺序(MRO)?

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 method-resolution-order

86
推荐指数
3
解决办法
5万
查看次数

python:try/except/else和continue语句

为什么下面的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)

python python-2.7

7
推荐指数
1
解决办法
1万
查看次数

没有return语句的python方法的行为

我有一个与程序行为改变有关的问题,缺少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).

我的问题是:

  • 尾部调用优化是上面的Python代码块中显示的行为的原因.
  • 如果是这种情况那么为什么perl代码的行为会有所不同,这也不会产生TCO.

python perl

2
推荐指数
1
解决办法
159
查看次数

将流量路由到kubernetes集群

我有一个与Kubernetes网络相关的问题。

我有一个在通过端口提供请求的Pod中运行的微服务(例如numcruncherpod9000,并且我已经创建了一个相应的服务类型NodePortnumcrunchersvc)和该服务公开的节点端口30900

我的集群有3个具有以下IP的节点:

  1. 192.168.201.70,
  2. 192.168.201.71
  3. 192.168.201.72

我将通过反向代理(nginx)将流量路由到我的集群。据我在nginx中了解,我需要指定所有这些集群节点的IP才能将流量路由到集群,我的理解正确吗?

我担心的是,由于nginx不会了解群集,因此确定流量应发送到的群集节点可能不是一个很好的判断。那么是否有更好的方法将流量路由到我的kubernetes集群?

PS:我没有在任何云平台上运行群集。

kubernetes

2
推荐指数
2
解决办法
1891
查看次数