我需要有条件地执行一些make规则,只要安装的Python大于某个版本(比如2.5).
我以为我可以做一些像执行:
python -c 'import sys; print int(sys.version_info >= (2,5))'
Run Code Online (Sandbox Code Playgroud)
然后在ifeq
make语句中使用输出(如果正常则为"1",否则为"0").
在一个简单的bash shell脚本中,它只是:
MY_VAR=`python -c 'import sys; print int(sys.version_info >= (2,5))'`
Run Code Online (Sandbox Code Playgroud)
但这在Makefile中不起作用.
有什么建议?我可以使用任何其他合理的解决方法来实现这一目标.
我想要一种惯用的方法来查找列表中与谓词匹配的第一个元素.
目前的代码非常难看:
[x for x in seq if predicate(x)][0]
Run Code Online (Sandbox Code Playgroud)
我想过把它改成:
from itertools import dropwhile
dropwhile(lambda x: not predicate(x), seq).next()
Run Code Online (Sandbox Code Playgroud)
但是必须有一些更优雅的东西...... None
如果没有找到匹配,如果它返回一个值而不是引发异常会很好.
我知道我可以定义一个函数:
def get_first(predicate, seq):
for i in seq:
if predicate(i): return i
return None
Run Code Online (Sandbox Code Playgroud)
但是开始使用像这样的实用程序函数来填充代码是非常无味的(并且人们可能不会注意到它们已经存在,所以如果存在已经提供相同的内置函数,它们往往会随着时间的推移而重复).
使用Eclipse我想查看核心Java类的源代码(例如java.util.concurrent.ConcurrentHashMap
),但是当我使用"Open Declaration"导航到源代码时,它会显示"Source not found"并给我选择附加源代码.
我的问题是; 我如何附加源?我从哪里获得java.util.concurrent
图书馆的源.jar ?
我需要过滤一个数组来删除低于某个阈值的元素.我目前的代码是这样的:
threshold = 5
a = numpy.array(range(10)) # testing data
b = numpy.array(filter(lambda x: x >= threshold, a))
Run Code Online (Sandbox Code Playgroud)
问题是这会创建一个临时列表,使用带有lambda函数的过滤器(慢).
由于这是一个非常简单的操作,也许有一个numpy函数以有效的方式完成它,但我一直无法找到它.
我认为实现这一目标的另一种方法可能是对数组进行排序,找到阈值的索引并从该索引返回切片,但即使这对于小输入来说会更快(并且无论如何都不会引人注意) ),随着输入大小的增加,其最终渐近渐弱的效率.
有任何想法吗?谢谢!
更新:我也进行了一些测量,当输入为100.000.000个条目时,排序+切片仍然比纯python过滤器快两倍.
In [321]: r = numpy.random.uniform(0, 1, 100000000)
In [322]: %timeit test1(r) # filter
1 loops, best of 3: 21.3 s per loop
In [323]: %timeit test2(r) # sort and slice
1 loops, best of 3: 11.1 s per loop
In [324]: %timeit test3(r) # boolean indexing
1 loops, best of 3: 1.26 s per loop
Run Code Online (Sandbox Code Playgroud) 我有一个或多或少像这样的枚举开关:
public static enum MyEnum {A, B}
public int foo(MyEnum value) {
switch(value) {
case(A): return calculateSomething();
case(B): return calculateSomethingElse();
}
throw new IllegalArgumentException("Do not know how to handle " + value);
}
Run Code Online (Sandbox Code Playgroud)
并且我希望测试涵盖所有行,但由于代码应该处理所有可能性,因此我无法在交换机中提供没有相应case语句的值.
扩展枚举以添加额外的值是不可能的,只是模拟返回的equals方法false
将无法工作,因为生成的字节码使用窗帘后面的跳转表来找到正确的情况......所以我想也许用PowerMock可以实现一些黑魔法.
谢谢!
编辑:
由于我拥有枚举,我认为我可以只为值添加一个方法,从而完全避免切换问题; 但是我要离开这个问题,因为它仍然很有趣.
我想知道在Python中,在类的主体或__init__
函数内部初始化对象属性的最佳实践是什么?
即
class A(object):
foo = None
Run Code Online (Sandbox Code Playgroud)
VS
class A(object):
def __init__(self):
self.foo = None
Run Code Online (Sandbox Code Playgroud) 我已经看了一下urlparse.urlparse
方法文档,我对这个parameters
部分有点困惑(不要与更熟悉的query
部分混淆,那就是在问号之后和片段部分之前).
关于URL结构的维基百科条目没有说明这一点,所以可以请任何人详细说明这一点并可能举一些例子吗?
浏览Linux内核源代码时,我发现了一段代码,其中括号括起来的语句块被视为表达式a laisp(或ML),即表达式,其值是最后一个语句的值.
例如:
int a = ({
int i;
int t = 1;
for (i = 2; i<5; i++) {
t*=i;
}
t;
});
Run Code Online (Sandbox Code Playgroud)
我一直在研究ANSI C语法,试图弄清楚这段代码如何适合解析树,但我还没有成功.
那么,有没有人知道这种行为是由标准规定还是只是GCC的特殊性?
更新:我已尝试使用标志-pedantic,编译器现在给我一个警告:
warning: ISO C forbids braced-groups within expressions
Run Code Online (Sandbox Code Playgroud) 生成一个列表列表(或打印,我不介意)一个大小为N 的Pascal三角形,代码可能最少!
这是我的尝试(使用技巧在python 2.6中的 118个字符):
c,z,k=locals,[0],'_[1]'
p=lambda n:[len(c()[k])and map(sum,zip(z+c()[k][-1],c()[k][-1]+z))or[1]for _ in range(n)]
Run Code Online (Sandbox Code Playgroud)
说明:
[1]
[1]
并制造[0,1]
和[1,0]
[(0,1),(1,0)]
并用sum来映射.用法(漂亮的打印,实际上是代码-golf xD):
result = p(10)
lines = [" ".join(map(str, x)) for x in result]
for i in lines:
print i.center(max(map(len, lines)))
Run Code Online (Sandbox Code Playgroud)
输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 …
Run Code Online (Sandbox Code Playgroud) algorithm code-golf combinatorics discrete-mathematics pascals-triangle
我想为nginx mime类型添加一些额外的类型,但我不想编辑默认值, /etc/nginx/mime.types
因为它会为部署过程增加一些额外的复杂性.
如果我向我添加一个types {...}
部分,nginx.conf
它将覆盖用声明的所有其他类型include mime.types;
.
我认为我可以为我需要处理的文件的扩展编写一个位置规则,但我想必须有一种更清晰的方法来实现这一点.
python ×4
java ×2
algorithm ×1
attributes ×1
c ×1
code-golf ×1
coding-style ×1
eclipse ×1
enums ×1
expression ×1
filter ×1
gcc ×1
makefile ×1
mime-types ×1
mocking ×1
nginx ×1
numpy ×1
predicate ×1
shell ×1
standards ×1
threshold ×1
unit-testing ×1
url ×1
urlparse ×1