以下代码将导致执行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)
我对此感到惊讶,因为我认为只有在实例化课程时才能执行,有人能解释这背后的想法吗?
我有一个计算第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类的上下文中,但可以更加通用化.我正在创建一个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)
但是,据我所知,这样的语句不可能循环.有谁知道这样做的方法?
如果我对一个类中的属性使用单个前导下划线,那么从另一个对象访问它是不对的?是一个单下划线说"我会按照我的意愿使用它,但是用户不应该触摸它"或者甚至开发人员应该将它视为私有?
以下代码不会引发错误:
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操作只修改了迭代器吗?