小编Tha*_*tos的帖子

git commit在索引中留下变化

问题

我试图做出一些改变,但由于我不明白的原因,他们被抛在了后面:

我看一下当前的回购状态:

% git status
On branch new-master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    new file:   __init__.py
    new file:   api/__init__.py
    new file:   api/api.py
    new file:   api/common.py
    new file:   api/error.py

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   ../status/server.py
    modified:   __init__.py

Untracked files:
  (use "git add <file>..." to include in what will be committed)

    ../env/
    ../foo.db …
Run Code Online (Sandbox Code Playgroud)

git

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

如何记录鸭子类型?

我有文件臃肿在我身上,因为任何时候我遇到一个复杂的鸭子类型,我需要一些方式说"这个鸭子类型",而是陷入一个无休止的循环"你的功能需要这个输入,但不"记录它",然后记录它.这会产生臃肿,重复的文档,例如:

def Foo(arg):
    """
    Args:
      arg: An object that supports X functionality, and Y functionality,
        and can be passed to Z other functionality.
    """
    # Insert code here.

def Bar(arg):
    """
    Args:
      arg: An object that supports X functionality, and Y functionality,
        and can be passed to Z other functionality.
    """
    # Insert code here.
Run Code Online (Sandbox Code Playgroud)

等等,等等,对Baz,Qux等功能.我需要一些较短的写作方式" arg是一种(对象类型)".

对于一些鸭子类型,它就像"类似dict的对象"一样简单:我们知道我们对dict的期望,因此,我们知道要传递什么.A dict,或者可以模仿它的东西.

我觉得C++与模板类型有同样的问题.Haskell会拥有它,但是可以使用类型类的定义来记录它.(注意:Haskell类!= Java/C++/Python /等中的类.)(注意:我不是真的在Haskell中编程,所以请原谅我,如果它是一个糟糕的例子.)

我应该走传统的OO路线,只写一个基类,并在文档中说"像这个基类一样的东西"吗?代码不会强制从基类派生(因为不需要从中派生对象),并且基类除了记录接口的属性外基本上不添加任何值.

另一方面,我正在编写Python,我尝试在语言的习语中编程.(否则通常会受到伤害.)基类适用于继承功能,但是当您的基类完全是抽象的时,它似乎不会在duck-typed语言中增加值.


编辑:答案:我知道鸭子打字是什么(从帖子中可以看出这一点).我在哪里记录它是问题,尤其是.当没有类来附加文档时.

python documentation duck-typing

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

Python 3中的FastCGI WSGI库?

对于Python 3,是否存在可以作为FastCGI服务器为WSGI应用程序提供服务的库?(那么nginx可以代理请求吗?)

Python 3文档提到了flup,但是flup甚至没有安装在Python 3中:

% env3/bin/pip install flup
Downloading/unpacking flup
  Downloading flup-1.0.2.tar.gz (49kB): 49kB downloaded
  Running setup.py (path:/Users/me/tmp/env3/build/flup/setup.py) egg_info for package flup
    Traceback (most recent call last):
      File "", line 17, in 
      File "/Users/me/tmp/env3/build/flup/setup.py", line 2, in 
        from ez_setup import use_setuptools
      File "./ez_setup.py", line 98
        except pkg_resources.VersionConflict, e:
                                            ^
    SyntaxError: invalid syntax
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

  File "", line 17, in 

  File "/Users/me/tmp/env3/build/flup/setup.py", line 2, in 

    from ez_setup …

python wsgi fastcgi python-3.x

14
推荐指数
3
解决办法
7748
查看次数

std :: lower_bound和比较器函数有不同的类型?

我有一个结构数组,按结构的成员排序,如:

struct foo
{
    int bar;
    double baz;
};

// An array of foo, sorted on .bar
foo foos[] = { ........ };
// foos[0] = {0, 0.245}
// foos[1] = {1, -943.2}
// foos[2] = {2, 304.222}
// etc...
Run Code Online (Sandbox Code Playgroud)

我想找到具有特定.bar值的元素.它可能会也可能不会在数组中,我想在O(log(n))时间内完成它,因为数组是排序的.

std::lower_bound我通常会这样做,但我需要指定一个比较函数.但是,array(struct foo)的成员类型和搜索的value(int)不一样,因此,我的比较器是:

bool comp(foo a, int b)
{
    // ...
}
// --- or ---
bool comp(int a, foo b)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

看起来第一个可以使用gcc,但我想知道比较函数的参数的顺序是否由标准指定,或者我是否依赖于编译器行为.

我想避免构建一个foo传递到std::lower_bound这里,因为 …

c++ stl

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

可视化深度缓冲区

我正在尝试将深度缓冲区可视化以进行调试,方法是在按下某个键时将其绘制在实际渲染的顶部.它主要是工作,但结果图像似乎放大了.(它不仅仅是原始图像,在一个奇怪的灰度级)为什么它与颜色缓冲区的大小不同?

这就是我正在使用深度缓冲区的视图:

void get_gl_size(int &width, int &height)
{
    int iv[4];
    glGetIntegerv(GL_VIEWPORT, iv);
    width = iv[2];
    height = iv[3];
}

void visualize_depth_buffer()
{
    int width, height;

    get_gl_size(width, height);

    float *data = new float[width * height];

    glReadPixels(0, 0, width, height, GL_DEPTH_COMPONENT, GL_FLOAT, data);
    glDrawPixels(width, height, GL_LUMINANCE, GL_FLOAT, data);

    delete [] data;
}
Run Code Online (Sandbox Code Playgroud)

c++ opengl

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

为什么len(<a list object>)这么慢?

我在ipython会话中运行以下代码:

# This call is slow, but that is expected. (It loads 3 GB of data.)
In [3]: arc, arc_sub, upls, go = foo_mod.ready_set()

# This call is also slow, as `upls` is huge.
In [4]: upls = list(upls)

# This call is slow in meatspace, but `%timeit` doesn't notice!
In [5]: %timeit -n1 -r1 len(upls)
1 loops, best of 1: 954 ns per loop
Run Code Online (Sandbox Code Playgroud)

%timeit直截了当地躺在这里.无论有没有%timeit,该命令实际运行需要10秒以上.然而,这只是第一次; 后续的电话len很快.

甚至time.time()唱出类似的曲调:

In [5]: import …
Run Code Online (Sandbox Code Playgroud)

python timing ipython

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

结构深拷贝

这可能是一个非常基本的问题,但不知何故它让我受骗......当我编写测试代码时,它似乎有效,但生产中出现了问题.

// Header file
#define length 100
typedef struct testStr_t {
    int a;
    char b;
    char t1[length];
    char t2[length];
} test;

void populateTest(test*);

// source file
test test1;
test test2;
populateTest(&test1);
test2 = test1;
Run Code Online (Sandbox Code Playgroud)

test2是一份深刻的副本test1吗?或者有问题吗?如果代码是用C编译器或C++编译器编译的,那有关系吗?

c++ structure deep-copy

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

"赋值前引用的局部变量" - 只有函数?

请使用以下代码:

import something

def Foo():
    something = something.SomeClass()
    return something
Run Code Online (Sandbox Code Playgroud)

......这显然不是有效的代码:

UnboundLocalError: local variable 'something' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

... something=评估RHS之前,创建局部变量但未分配.(例如,参见相关答案的评论.)这对我来说似乎有点奇怪,但是当然,我会继续使用它.现在,为什么以下有效代码?

class Foo(object):
    something = something.SomeClass()
Run Code Online (Sandbox Code Playgroud)

我的理解是class定义的内部基本上是一个范围:

然后使用新创建的本地命名空间和原始全局命名空间,在新的执行框架中执行类的套件(请参阅命名和绑定一节).

那么,为什么这些代码的行为与函数的行为不同?

python scope

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

out_of_range,range_error和over/underflow_error之间的区别?

有人能解释什么之间的差异range_error,out_of_range以及一对,overflow_errorunderflow_error是,当我使用的呢?他们似乎都是一样的.

根据cppreference.com:

  • out_of_range:它报告尝试访问超出定义范围的元素的错误.
  • range_error:它报告出现的错误,因为某些计算中的浮点值无法表示,因为它的大小太大或太小.如果值具有整数类型,std::underflow_error或者std::overflow_error应该使用.
  • overflow_error:它报告出现的错误,因为某些计算中的整数值无法表示,因为它具有太大的正值.

具体来说,我有一个功能,

template<typename T>
void write_integer(const T &n) {
   if(n < 0) { throw ??? }
   if(some_limit < n) { throw ??? }
Run Code Online (Sandbox Code Playgroud)

哪里T是整体类型; 该函数进行一些边界检查n,看它是否在一定范围内; 如果不是,我想抛出一些例外.我很困惑,因为:

  • out_of_range 听起来像索引和数组边界检查,我没有做.
  • range_error似乎是花车?(但为什么,用C++这样的语言?)
  • underflow_erroroverflow_error?这些真的合适吗?

c++ exception outofrangeexception

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

Python中的无类方法对任何东西都有用吗?

我刚刚注意到你可以用Python做到这一点:

def f(self):
    print self.name

class A:
    z=f
    name="A"

class B:
    z=f
    name = "B"
Run Code Online (Sandbox Code Playgroud)

...

print a.z()

>>> A
Run Code Online (Sandbox Code Playgroud)

换句话说,f()行为类似于未在任何类上定义的方法,但可以附加到一个类.当然,如果它需要附加到的对象上的方法或字段(不存在),它将产生运行时错误.

我的问题:这有用吗?它有用吗?有没有解决问题的情况?也许这是定义界面的一种方式?

python methods class

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