给出一个清单
l = [1, 7, 3, 5]
Run Code Online (Sandbox Code Playgroud)
我想迭代所有连续列表项对(1,7), (7,3), (3,5)
,即
for i in xrange(len(l) - 1):
x = l[i]
y = l[i + 1]
# do something
Run Code Online (Sandbox Code Playgroud)
我想以更紧凑的方式做到这一点,比如
for x, y in someiterator(l): ...
Run Code Online (Sandbox Code Playgroud)
有没有办法使用内置的Python迭代器来做到这一点?我确定该itertools
模块应该有一个解决方案,但我无法弄明白.
在scipy/numpy/...
高斯消除矩阵的标准方法的宇宙中是否存在某个地方?
人们通过谷歌找到了许多片段,但如果可能的话,我更愿意使用"可信"的模块.
我通常的git工作流程是
<make changes>
git add FILES
git status
git commit -m "some remarks"
Run Code Online (Sandbox Code Playgroud)
我需要在哪里git status
检查我是否添加了正确的文件.
有没有办法告诉git
每个人后自动显示状态git add
?
本文从各种stackoverflow问题中多次链接,描述了带参数的装饰器在语法上与不带参数的装饰器的区别.
__init__()
是执行装饰的唯一方法,__call__()
每次调用装饰时都会调用它sayHello()
."__call__()
,只能接受一个参数(函数对象),并且必须返回替换原始的装饰函数对象.请注意,__call__()
现在只调用一次,在装修期间,之后您返回的装饰功能将__call__()
用于实际通话."文章中给出的解释并没有告诉我为什么语言是这样建立的:
虽然这种行为是有道理的 - 构造函数现在用于捕获装饰器参数,但该对象
__call__()
不能再用作装饰函数调用,因此您必须使用它__call__()
来执行装饰 - 它仍然是令人惊讶的第一次你看到了
此设置有两个相关功能让我感到不舒服:
__init__
和__call__
在这两个,但他们意味着不同的事情?__call__
在具有参数的装饰器的情况下使用除了调用装饰函数之外的其他目的(顾名思义,至少来自无参数情况)?由于__call__
只有后立即调用__init__
,为什么不直接传递给装饰作为参数传递给函数__init__
和处理,将在发生一切__call__
的__init__
呢?对于给定的图形,g
我无法更改单个顶点属性(在本例中'color'
):
from igraph import Graph
# create triangle graph
g = Graph.Full(3)
cl_blue = (0,0,.5)
cl_red = (.5,0,0)
g.vs['color'] = 3*[cl_blue]
g.vs['color'][0] = cl_red
Run Code Online (Sandbox Code Playgroud)
这样做后,print g.vs['color']
仍然给出
[(0, 0, 0.5), (0, 0, 0.5), (0, 0, 0.5)]
Run Code Online (Sandbox Code Playgroud)
如何为单个项目分配值?
我的目标是使用sympy
哪个来编写多维泰勒近似
sin(x)=x - x**3/6 + O(x**4)
.这是我到目前为止尝试的内容:
方法1
天真地,人们可以只series
为每个变量组合两次命令,遗憾的是这不起作用,如本例所示sin(x*cos(y))
:
sp.sin(x*sp.cos(y)).series(x,x0=0,n=3).series(y,x0=0,n=3)
>>> NotImplementedError: not sure of order of O(y**3) + O(x**3)
Run Code Online (Sandbox Code Playgroud)
方法2
基于这篇文章,我首先写了一个1D泰勒近似:
def taylor_approximation(expr, x, max_order):
taylor_series = expr.series(x=x, n=None)
return sum([next(taylor_series) for i in range(max_order)])
Run Code Online (Sandbox Code Playgroud)
用1D示例检查它可以正常工作
mport sympy as sp
x=sp.Symbol('x')
y=sp.Symbol('y')
taylor_approximation(sp.sin(x*sp.cos(y)),x,3)
>>> x**5*cos(y)**5/120 - x**3*cos(y)**3/6 + x*cos(y)
Run Code Online (Sandbox Code Playgroud)
不过,如果我知道这样做既扩张做一个链接调用x
和y
,sympy挂断
# this does not work
taylor_approximation(taylor_approximation(sp.sin(x*sp.cos(y)),x,3),y,3)
Run Code Online (Sandbox Code Playgroud)
有人知道如何解决这个问题或以另一种方式实现它吗?
我有一个类,它包含一些成员x
(例如,所有实例都需要但独立于它们的一些数据):
class Foo(object):
x = 23
# some more code goes here
Run Code Online (Sandbox Code Playgroud)
现在,确定的过程x
变得更加复杂,而且我希望能够x
在某些时间“刷新”,所以我决定为其编写一个额外的函数
class Foo(object):
@classmethod
def generate_x(cls):
cls.x = 23
# some more code goes here
Run Code Online (Sandbox Code Playgroud)
但是,该类定义缺少 的初始化调用generate_x
。
到目前为止我尝试过的:
这不起作用:
class Foo(object):
# generate_x() # NameError: name 'generate_x' is not defined
# Foo.generate_x() # NameError: name 'Foo' is not defined
@classmethod
def generate_x(cls):
cls.x = 23
Run Code Online (Sandbox Code Playgroud)
这可行,但不太清楚,因为代码是在类定义之外使用的
class Foo(object):
@classmethod
def generate_x(cls):
cls.x = 23
# ...
Foo.generate_x()
Run Code Online (Sandbox Code Playgroud)
有更好的替代方案吗?这里使用的是@classmethod
最好的方法吗?我正在搜索的是 …
正如我刚刚了解到的,对于一个指针p
,有两种等效的方式来访问被引用对象的成员,即p->foo
和(*p).foo
.
是否有最适合使用的技术论据?
注意:我读到的一个论点是,.
它更安全,因为它不能重载,而->
可以.但是,我想,必须有更多的参数,因为在我工作的大多数C++代码中,我只看到->
-construct.
可以从shell启动emacs并告诉它执行lisp函数,例如
emacs -f some-lisp-function my_file.py
Run Code Online (Sandbox Code Playgroud)
但是,我想通过参数传递lisp函数,比如
emacs -f "(goto-line 10)" my_file.py
# --> not working
Run Code Online (Sandbox Code Playgroud)
并且在最好的世界中,传递更复杂的由多个函数调用组成的lisp代码,例如
emacs -f "(goto-line 10) (some-other-func some-arg)" my_file.py
# --> not working
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
编辑:为了澄清这一点,我需要一种方法来在打开它之后评估文件自己的缓冲区中的lisp代码.
(顺便说一句.我知道goto-line问题可以在不使用的情况下以不同的方式解决,-f
但这只是我一般问题的一个例子)
_numbers
我执行了以下操作,作为允许通过以下方式对成员容器进行只读访问的廉价方法numbers
:
class Foo {
Foo() : _numbers({}), numbers(_numbers) {
// some code that populates `numbers` via `numbers.push_back(...)`
}
private:
std::vector<int> _numbers;
public:
const std::vector<int>& numbers;
}
Run Code Online (Sandbox Code Playgroud)
然而,这样做我发现它numbers
是空的,而在其他情况下它将包含与 相同的元素_numbers
。
更准确地说,这似乎是未定义的行为。在我的真实示例(这是一个简化版本)中,我有多个采用此方案的引用容器对,其中填充的数据在某些对的常量引用成员中可见,而对于某些对则不可见。
知道这有什么问题吗?非常感谢任何帮助。
编辑这是一个最小的工作示例:
#include <vector>
struct Foo2 {
public:
const int max1;
const int center1;
Foo2(const int max1_);
private:
std::vector<int> _numbers1, _numbers2;
public:
const std::vector<int>& numbers1, numbers2;
};
Foo2::Foo2(const int max1_)
: max1(max1_), center1(max1_/2),
_numbers1({}), _numbers2({}),
numbers1(_numbers1),
numbers2(_numbers2)
{
cout << max1 …
Run Code Online (Sandbox Code Playgroud)