小编Sai*_*ait的帖子

静态方法语法混乱

这就是我们在Python中创建静态函数的方法:

class A:
   @staticmethod
   def fun():
      print 'hello'

A.fun()
Run Code Online (Sandbox Code Playgroud)

这按预期工作并打印hello.

如果它是成员函数而不是静态函数,我们使用self:

class A:
   def fun(self):
      print 'hello'

A().fun()
Run Code Online (Sandbox Code Playgroud)

这也按预期工作并打印hello.

我的困惑是以下情况:

class A:
   def fun():
      print 'hello'
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,没有staticmethod,也没有self.Python解释器可以使用这个定义.但是,我们不能称之为上述任何一种方法,即:

A.fun()
A().fun()
Run Code Online (Sandbox Code Playgroud)

两者都有错误.

我的问题是:有什么办法可以调用这个函数吗?如果没有,为什么Python首先不会给我一个语法错误?

python methods static-methods python-2.7

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

将无符号字符数组转换为整数

据我所知,在C编程语言中,数组是一个元素一个元素地存储在内存中的。(即,元素 0、元素 1、元素 2、...、元素 n)。我正在尝试使用以下代码查看:

unsigned char a[] = { '\1' , '\2', '\3' ,'\4' };  
printf("%d\n", (int*) a);
Run Code Online (Sandbox Code Playgroud)

由于 unsigned char 是 1 个字节,整数是 4 个字节;我认为它必须打印值:

00000001 00000010 00000011 00000100 = 2^2 + 2^8 + 2^9 + 2^17 + 2^24 = 16909060

但是,当我运行这个程序时,它会为每次试验生成不同的结果。

我在这里缺少什么?

c c++ arrays int char

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

将列表拆分为具有多个整数分隔符的块

我有两个整数列表,即numbersdelimiters.我想numbers分成块除以delimiters.

例:

numbers = [10, 13, 7, 204, 129, 44, 12, 7, 17, 49, 216, 43, 16, 7, 7, 38, 29, 76, 54, 17, 39, 7, 17, 77, 7, 24, 19]
delimiters = [7,17,77]
Run Code Online (Sandbox Code Playgroud)

输出:

result = [[10,13],[204, 129, 44, 12],[49, 216, 43, 16],[38, 29, 76, 54],[39],[24, 19]]
Run Code Online (Sandbox Code Playgroud)

正如在示例中已经看到的,如果我看到一个或多个出现,我想分割列表delimiter.

我可以通过一个简单的循环轻松地完成它,但我确信应该有更好的,可能更多的Pythonic方式.我也觉得itertools是要走的路,然而,我找不到能够解决这个问题的好功能.

python list

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

迭代有效地计算平均值

我有一长串整数:

my_list = [10,13,42,23,12,45,33,59,12]
Run Code Online (Sandbox Code Playgroud)

我想首先计算的平均i数字,都i0<i<n.

我基本上可以这样做:

averages = [ sum(my_list[0:i]) * (1.0/i) for i in range(1,len(my_list)) ]
Run Code Online (Sandbox Code Playgroud)

这给了我正确的结果,但我认为应该有一个更快的方法,因为我可以在以下计算中使用前面的总和.

我猜应该有更快的解决方案numpy,也许吧?

python numpy list

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

使用生成器生成(p,1-p)对

我想做的是:

my_list = []
for i in range(10):
   p = random.random()
   my_list.append( (p,1-p) )
Run Code Online (Sandbox Code Playgroud)

我试图用发电机做同样的事情.我尝试了以下方法:

my_list = [ (random.random(), 1-random.random()) for i in range(10) ]
Run Code Online (Sandbox Code Playgroud)

由于调用random.random()两次,因此无法按预期工作,从而产生不同的结果.

我怎么能用生成器表达式来做呢?

python

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

从C++中的其他方法调用构造函数

我不确定在C++中是否合法:

class Image
{
     Image(int w, int h) // constructor
     {
            ...
     }

     Image GetSpecialImage()
     {
          Image rVal(10,10);
          return rVal;
     }
}
Run Code Online (Sandbox Code Playgroud)

我是否需要使用另一种中级init()方法在C++中执行此操作?如果有,你能告诉我怎么样?


EDIT: 虽然你说它很好,它并没有真正做我想做的事情......让我给你一些代码:

class Image
{
     float* data;
     int w;
     int h;

     Image(int w, int h) // constructor
     {
            this->w = w;
            this->h = h;
            data = (float*) malloc ( w * h * sizeof(float) );
     }

     Image GetSpecialImage()
     {
          Image rVal(this->w,this->h);

          for(i=0;i<this->w * this->h;i++)
          {
                rVal.data[i] = this->data[i] + 1;
          }

          return rVal;
     }
} …
Run Code Online (Sandbox Code Playgroud)

c++ constructor

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

C++运算符与朋友重载

我正在尝试使用C++使用参数重载来实现这一点:

Complex c(3.0, 4.0);
double magnitude = | c; // magnitude will be 5
Run Code Online (Sandbox Code Playgroud)

我写了下面的代码:(这里只有必要的部分..)

class Complex
{
   public:
       double _real;
       double _imaginary;

       friend double operator|(const Complex &c1)
       {
           return sqrt(c1._real * c1._real + c1._imaginary * c1._imaginary);
       }
}
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

error C2805: binary 'operator |' has too few parameters
Run Code Online (Sandbox Code Playgroud)

operator |仅使用1个参数是不可能的?

c++ operator-overloading

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

判断两个HashSet是否有重复值

我需要一个像下面这样的函数,

boolean hasDuplicateValue(HashSet hs1, HashSet hs2) {        
    // return false;
}
Run Code Online (Sandbox Code Playgroud)

这个线程有效地找到可变数量的字符串集的交集讨论了类似的问题,但是在这个线程中他们还需要交集值,这是我不需要的。因此,它可能会增加我不需要的额外计算复杂性。

java hashset

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

使用生成器进行计数的最佳做法是什么

假设我有一个列表:

my_list = range(10)
Run Code Online (Sandbox Code Playgroud)

而且我想计算列表中有多少偶数.请注意,我对这些值不感兴趣,我只想要它们的数量.所以我可以:

len( [0 for i in my_list if i % 2 == 0] ) # Method 1
len( [i for i in my_list if i % 2 == 0] ) # Method 2
len( [_ for i in my_list if i % 2 == 0] ) # Method 3
Run Code Online (Sandbox Code Playgroud)

从速度或内存的角度来看,上述任何一种方法都比其他方法更好吗?

实际上我甚至不需要构建列表,但我不想:

counter = 0
for item in my_list:
   if item % 2 == 0:
      counter += 1
Run Code Online (Sandbox Code Playgroud)

那么,哪一个是用发电机计数的好方法?

PS:我的案例中的列表有更多内存繁重的项目,这就是为什么我想要尽可能优化.

python generator count

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

如何检查Python中是否存在静态变量?

这是一个相关的问题:如何检查变量是否存在?

但是,它对静态变量不起作用.

我想要做的是以下,

class A:
    def __init__(self):
        if A.var is null: # this does not work, okay
            A.var = 'foo'
            print 'assigned'
Run Code Online (Sandbox Code Playgroud)

好的,因为A.var甚至没有分配.它引起了错误.所以,我试过这个:

class A:
    def __init__(self):
        if 'A.var' not in globals(): # this seems to okay, but ..
            A.var = 'foo'
            print 'assigned'

a = A()
b = A()
Run Code Online (Sandbox Code Playgroud)

结果如下:

assigned
assigned
Run Code Online (Sandbox Code Playgroud)

这表明该if 'A.var' not in globals():行无法正常工作.

那么,我如何检查Python中是否存在静态变量?

python static-members

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