小编Mik*_*lla的帖子

python类中的范围令人惊讶的行为

以下代码将导致执行print语句

class C1(object):

    print 'I am some code executing in C1'

    def method1(self):
        print 'I am method1'
    def method2(self):
        print 'I am method2'
        pass
Run Code Online (Sandbox Code Playgroud)

我对此感到惊讶,因为我认为只有在实例化课程时才能执行,有人能解释这背后的想法吗?

python oop

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

为什么这个Fibonacci在Python中的评估要比Haskell快得多

我有一个计算第n个Fibonacci数的算法,在Python中它表示为:

def fib(n):
    if n == 0:
        return 1
    if n == 1:
        return 1
    else:
        return fib(n-1) + fib(n-2)
Run Code Online (Sandbox Code Playgroud)

在哈斯克尔:

fib :: Integer -> Integer
fib 0 = 1
fib 1 = 1
fib n = fib (n-1) + fib (n-2)
Run Code Online (Sandbox Code Playgroud)

我希望Haskell能够更快地或大约在同一时间进行评估,但是如果使用上面的数字说n = 40,python代码会更快地评估(~x3).我正在使用GHCi和Ipython,但我认为这不应该有所作为.

python haskell

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

实例化具有任意数量属性的类

这个问题特别是在Python类的上下文中,但可以更加通用化.我正在创建一个m将使用四个变量初始化的类,然后我将其分配给类的实例化.现在,这看起来像这样:

class mm(object):
  def __init__(self, a, b, c, r):
    self.a = a
    self.b = b
    self.c = c
    self.r = r
  # etc.
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够将变量分配到self一行,类似于伪代码:

def __init__(self, a, b, c, r):
  self.varname = var for var in [a, b, c, r]
Run Code Online (Sandbox Code Playgroud)

如果将它推广到任意数量的变量会更好,这样你就可以得到类似的东西:

def __init__(self, **kwargs):
  assign(self, varname, value) for varname, value in kwargs.iteritems()
Run Code Online (Sandbox Code Playgroud)

但是,据我所知,这样的语句不可能循环.有谁知道这样做的方法?

python variables class variable-assignment

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

我应该将自己的单个下划线属性视为私有吗?

如果我对一个类中的属性使用单个前导下划线,那么从另一个对象访问它是不对的?是一个单下划线说"我会按照我的意愿使用它,但是用户不应该触摸它"或者甚至开发人员应该将它视为私有?

python

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

为什么我可以在调整大小后仍然访问矢量数据?

以下代码不会引发错误:

int main()
{
typedef std::vector<int> intstack;

intstack mystack;

mystack.push_back(7);
mystack.push_back(8);
mystack.push_back(9);

mystack.pop_back();
std::cout << mystack.size(); //prints 2
std::cout << mystack[2]; // prints 9
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我原以为该行std::cout << mystack[2]会引发错误,因为该pop_back操作已调整了向量.为什么数据仍可访问?是因为底层数组中的数据仍然存在而且向量pop_back操作只修改了迭代器吗?

c++ vector stdvector

0
推荐指数
1
解决办法
85
查看次数

标签 统计

python ×4

c++ ×1

class ×1

haskell ×1

oop ×1

stdvector ×1

variable-assignment ×1

variables ×1

vector ×1