我试图做出一些改变,但由于我不明白的原因,他们被抛在了后面:
我看一下当前的回购状态:
% 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) 我有文件臃肿在我身上,因为任何时候我遇到一个复杂的鸭子类型,我需要一些方式说"这个鸭子类型",而是陷入一个无休止的循环"你的功能需要这个输入,但不"记录它",然后记录它.这会产生臃肿,重复的文档,例如:
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 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 … 我有一个结构数组,按结构的成员排序,如:
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这里,因为 …
我正在尝试将深度缓冲区可视化以进行调试,方法是在按下某个键时将其绘制在实际渲染的顶部.它主要是工作,但结果图像似乎放大了.(它不仅仅是原始图像,在一个奇怪的灰度级)为什么它与颜色缓冲区的大小不同?
这就是我正在使用深度缓冲区的视图:
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) 我在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) 这可能是一个非常基本的问题,但不知何故它让我受骗......当我编写测试代码时,它似乎有效,但生产中出现了问题.
// 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++编译器编译的,那有关系吗?
请使用以下代码:
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定义的内部基本上是一个范围:
然后使用新创建的本地命名空间和原始全局命名空间,在新的执行框架中执行类的套件(请参阅命名和绑定一节).
那么,为什么这些代码的行为与函数的行为不同?
有人能解释什么之间的差异range_error,out_of_range以及一对,overflow_error和underflow_error是,当我使用的呢?他们似乎都是一样的.
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_error和overflow_error?这些真的合适吗?我刚刚注意到你可以用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()行为类似于未在任何类上定义的方法,但可以附加到一个类.当然,如果它需要附加到的对象上的方法或字段(不存在),它将产生运行时错误.
我的问题:这有用吗?它有用吗?有没有解决问题的情况?也许这是定义界面的一种方式?