相关疑难解决方法(0)

如果没有实现"next",这个类如何实现"__iter__"方法?

我在django.template中有以下代码:

class Template(object):
    def __init__(self, template_string, origin=None, name='<Unknown Template>'):
        try:
            template_string = smart_unicode(template_string)
        except UnicodeDecodeError:
            raise TemplateEncodingError("Templates can only be constructed from unicode or UTF-8 strings.")
        if settings.TEMPLATE_DEBUG and origin is None:
            origin = StringOrigin(template_string)
        self.nodelist = compile_string(template_string, origin)
        self.name = name

    def __iter__(self):
        for node in self.nodelist:
            for subnode in node:
                yield subnode

    def render(self, context):
        "Display stage -- can be called many times"
        return self.nodelist.render(context)
Run Code Online (Sandbox Code Playgroud)

我困惑的部分如下.这种__iter__方法有什么用?我找不到任何相应的next方法.

def __iter__(self):
        for node in self.nodelist:
            for subnode …
Run Code Online (Sandbox Code Playgroud)

python iterator yield

21
推荐指数
2
解决办法
2万
查看次数

Javascript生成器:了解它们

我很确定我对发电机的理解本质上已被打破.所有在线资源似乎都存在冲突,这会带来令人难以置信的困难和令人困惑的学习体验.

据我所知,该yield关键字使当前正在执行的代码块等待一个值,而不是抛出要在回调中执行的剩余代码.因此,正如大多数教程所指出的那样,您可以使用:

(function *() {
     // Wait until users have be got and put into value of `results`
     var results = yield db.get("users");
     // And continue
     view.display(results);
})();
Run Code Online (Sandbox Code Playgroud)

代替:

db.get("user", function(results) {
    view.display(results);
});
Run Code Online (Sandbox Code Playgroud)

是的,在我尝试编写自己的发电机之前,这一切都很好.我遇到了几个问题:

  • 上面的第一个示例代码将不会运行,因为没有任何东西可以迭代生成器,对吗?有些人需要打电话给.next某个地方,对吗?
  • 整个API必须重写到I/O调用以支持生成器,对吗?
  • 从我收集的内容来看,yield似乎代表值等待最常见的用例,而在实现部分(读取:返回值为/ inside db.get)yield似乎代表将此值发送回当前正在等待的块以恢复执行.

举个例子:

function *fn() {
    yield 1;
    yield "a";
}

var gen = fn();
gen.next(); // 1
gen.next(); // "a";
Run Code Online (Sandbox Code Playgroud)

yield在该上下文中,将值返回而不是等待结果.在上面的第一个示例中,它等待来自db.get和恢复执行的结果,而不是"返回"或发回一个值.如果db.get情况属实,这本身并不是同步的吗?我的意思是,它不完全相同: …

javascript yield generator node.js

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

python中的1000位pi

我一直在考虑这个问题,我无法弄明白.也许你可以帮助我.问题是我的代码无法在python编码语言中输出1000位pi.

这是我的代码:

def make_pi():
    q, r, t, k, m, x = 1, 0, 1, 1, 3, 3
    while True:
        if 4 * q + r - t < m * t:
            yield m
            q, r, t, k, m, x = (10*q, 10*(r-m*t), t, k, (10*(3*q+r))//t - 10*m, x)
        else:
            q, r, t, k, m, x = (q*k, (2*q+r)*x, t*x, k+1, (q*(7*k+2)+r*x)//(t*x), x+2)

digits = make_pi()
pi_list = []
my_array = []
for i in range(1000):
    my_array.append(str("hello, I'm an element in …
Run Code Online (Sandbox Code Playgroud)

python pi

19
推荐指数
3
解决办法
4万
查看次数

Python:产量和产量分配

这个代码,包括赋值和yield运算符,如何工作?结果相当混乱.

def test1(x): 
    for i in x:
        _ = yield i 
        yield _
def test2(x): 
    for i in x:
        _ = yield i 

r1 = test1([1,2,3])
r2 = test2([1,2,3])
print list(r1)
print list(r2)
Run Code Online (Sandbox Code Playgroud)

输出:

[1, None, 2, None, 3, None] 
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

python yield assignment-operator

18
推荐指数
2
解决办法
6375
查看次数

算法(概率求解)实现最快的运行时间

对于算法竞赛培训(不是家庭作业),我们在过去一年中得到了这个问题.将其发布到此站点,因为其他站点需要登录.

这是问题所在:http: //pastehtml.com/view/c5nhqhdcw.html

图像不起作用所以在这里发布:

它必须在不到一秒的时间内运行,我只能想到最慢的方法,这就是我尝试过的:

with open('islandin.txt') as fin:
    num_houses, length = map(int, fin.readline().split())
    tot_length = length * 4 # side length of square
    houses = [map(int, line.split()) for line in fin] # inhabited houses read into list from text file

def cost(house_no):
    money = 0
    for h, p in houses:
        if h == house_no: # Skip this house since you don't count the one you build on
            continue
        d = abs(h - house_no)
        shortest_dist = min(d, tot_length …
Run Code Online (Sandbox Code Playgroud)

python algorithm

17
推荐指数
2
解决办法
867
查看次数

无法理解python生成器

我是python中的新生成器.我有一个简单的代码,我正在玩,但我无法理解我从中得到的输出.这是我的代码:

def do_gen():
    for i in range(3):
        yield i

def incr_gen(y):
    return y + 1

def print_gen(x):
    for i in x:
        print i

x = do_gen()
y = (incr_gen(i) for i in x)
print_gen(x)
print_gen(y)
Run Code Online (Sandbox Code Playgroud)

我希望我的输出是这样的:

0  1  2 
1  2  3
Run Code Online (Sandbox Code Playgroud)

但我只看到:0 1 2

我不明白这个输出.谁能帮助我理解我缺乏理解?提前致谢.

python generator

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

TensorFlow - tf.data.Dataset读取大型HDF5文件

我正在设置一个TensorFlow管道,用于读取大型HDF5文件作为我的深度学习模型的输入.每个HDF5文件包含100个可变大小长度的视频,存储为压缩JPG图像的集合(以使磁盘上的大小可管理).使用tf.data.Dataset和映射tf.py_func,使用自定义Python逻辑从HDF5文件中读取示例非常简单.例如:

def read_examples_hdf5(filename, label):
    with h5py.File(filename, 'r') as hf:
        # read frames from HDF5 and decode them from JPG
    return frames, label

filenames = glob.glob(os.path.join(hdf5_data_path, "*.h5"))
labels = [0]*len(filenames) # ... can we do this more elegantly?

dataset = tf.data.Dataset.from_tensor_slices((filenames, labels))
dataset = dataset.map(
    lambda filename, label: tuple(tf.py_func(
        read_examples_hdf5, [filename, label], [tf.uint8, tf.int64]))
)

dataset = dataset.shuffle(1000 + 3 * BATCH_SIZE)
dataset = dataset.batch(BATCH_SIZE)
iterator = dataset.make_one_shot_iterator()
next_batch = iterator.get_next()
Run Code Online (Sandbox Code Playgroud)

这个例子有效,但问题是它似乎tf.py_func一次只能处理一个例子.由于我的HDF5容器存储了100个示例,因此这种限制会导致显着的开销,因为文件经常需要打开,读取,关闭和重新打开.将所有100个视频示例读入数据集对象然后继续使用下一个HDF5文件(最好是在多个线程中,每个线程处理它自己的HDF5文件集合)会更有效率.

所以,我想要的是在后台运行的一些线程,从HDF5文件中读取视频帧,从JPG解码它们,然后将它们提供给数据集对象.在引入tf.data.Dataset管道之前,使用 …

python video hdf5 tensorflow tensorflow-datasets

17
推荐指数
2
解决办法
7874
查看次数

函数中的"yield"语句是什么?

可能重复:
解释了Python yield关键字

有人可以向我解释一下yield语句在这段代码中实际做了什么:

 def fibonacci():
     a, b = 0, 1
     while True:
         yield a
         a, b = b, a+b
Run Code Online (Sandbox Code Playgroud)

for number fibonacci():#使用生成器作为迭代器; 打印号码

到目前为止我所理解的是,我们正在定义一个finonacci()没有参数的函数?在我们定义的函数内部a,b等于0和1,接下来,虽然这是真的,但我们正在屈服a.这到底是做什么的?而且,在屈服的同时aa现在等于b,而b现在等于a + b.

下一个问题,对于数字fibonacci(),是否意味着函数中的每个数字或什么?我同样难以理解产量和"数量"实际上在做什么.显然我知道它对于fibonacci()打印号码中的每个数字都意味着.我是否真的在不知情的情况下定义数字?

谢谢,对不起,如果我不清楚的话.顺便说一句,这是项目欧拉,如果我知道如何编程这将是一件轻而易举的事情,但我正在努力学习这一点.

python

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

在python中子类化和覆盖生成器函数

我需要覆盖父类的方法,它是一个生成器,我想知道正确的方法来做到这一点.以下是否有任何问题,或更有效的方法?

class A:
    def gen(self):
        yield 1
        yield 2

class B(A):
    def gen(self):
        yield 3
        for n in super().gen():
            yield n
Run Code Online (Sandbox Code Playgroud)

python python-3.x

15
推荐指数
2
解决办法
3944
查看次数

在Databricks(DBFS)中递归列出目录和子目录的文件

使用python/dbutils,如何在Databricks文件系统(DBFS)中递归显示当前目录和子目录的文件。

azure python-3.x databricks azure-databricks

15
推荐指数
2
解决办法
4万
查看次数