小编sta*_*mer的帖子

如何迭代jinja中的列表列表

我有一个列表列表,如:

    [[elem0, elem1, elem2], [elem3, elem4, elem5], [elem6, elem7, elem8], ...]
Run Code Online (Sandbox Code Playgroud)

我写了以下模板文件:

    {% for result in results %}
        <tr>
            <td>result[0]</td>
            <td>result[1]</td>
            <td>result[2]</td>
        </tr>
    {% endfor %}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我能想到的是使用嵌套.是否有另一种方法来访问jinja列表中的元素?

jinja2

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

来自协程的产量与来自任务的产量

Guido van Rossum在2014年关于Tulip/Asyncio的演讲中展示了幻灯片:

任务与协同程序

  • 相比:

    • res =来自some_coroutine的收益率(...)
    • res =来自任务的产量(some_coroutine(...))
  • 任务可以在不等待的情况下取得进展

    • 作为日志,你等待别的东西
      • 即产量

我完全忽略了这一点.

从我的观点来看,两个结构都是相同的:

如果是裸协程 - 它会被调度,所以无论如何都会创建任务,因为调度程序与Tasks一起运行,然后协程调用程序协同程序被暂停,直到被调用者完成,然后可以自由继续执行.

如果Task- 完全相同 - 新任务被调度,调用者协程等待完成.

在这两种情况下执行代码的方式与开发人员在实践中应考虑的影响有何不同?

ps
非常感谢与权威来源(GvR,PEP,docs,核心开发者笔记)的链接.

python concurrency asynchronous python-3.x python-asyncio

23
推荐指数
2
解决办法
5427
查看次数

python多处理管理器列表错误:[Errno 2]没有这样的文件或目录

我在python中编写了一个多处理程序.我用来multiprocessing.Manager().list()在子进程内共享列表.首先,我在主要过程中添加一些任务.然后,启动一些子进程来执行在共享列表中执行的任务,子进程还将任务添加到共享列表.但我有一个例外,如下:

    Traceback (most recent call last):
      File "/usr/lib64/python2.6/multiprocessing/process.py", line 232, in _bootstrap
        self.run()
      File "/usr/lib64/python2.6/multiprocessing/process.py", line 88, in run
        self._target(*self._args, **self._kwargs)
      File "gen_friendship.py", line 255, in worker
        if tmpu in nodes:
      File "<string>", line 2, in __contains__
      File "/usr/lib64/python2.6/multiprocessing/managers.py", line 722, in _callmethod
        self._connect()
      File "/usr/lib64/python2.6/multiprocessing/managers.py", line 709, in _connect
        conn = self._Client(self._token.address, authkey=self._authkey)
      File "/usr/lib64/python2.6/multiprocessing/connection.py", line 143, in Client
        c = SocketClient(address)
      File "/usr/lib64/python2.6/multiprocessing/connection.py", line 263, in SocketClient
        s.connect(address)
      File "<string>", line 1, in connect
    error: [Errno …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

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

如何获取多维numpy数组中最大n值的索引

我想获得多维numpy数组中最大n值的索引.为了获得一维numpy数组中最大n个值的索引,我找到了这个.在python的交互式shell中测试后,似乎bottleneck.argpartsort无法对多维numpy数组产生影响.为了获得多维numpy数组中最大值的索引,我发现了这一点.它无法获得最大的n.我可以给出的方法是将多维numpy数组转换为{value:index}(元组存在的索引)列表,然后按值对列表进行排序,并获取它的索引.还有更容易或更多的表现吗?

python arrays algorithm numpy multidimensional-array

5
推荐指数
1
解决办法
2905
查看次数

为什么这些变量的地址打印为ab @和b @?

我运行以下代码:

    #include <iostream>

    using namespace std;

    typedef struct Test
    {
        char   a;
        char   b;
        int    i;
        double d;
    }Test;

    int main()
    {
        Test test;
        test.a = 'a';
        test.b = 'b';
        test.i = 478;
        test.d = 4.7;

        cout << &test.a << '\n'
             << &test.b << '\n'
             << &test.i << '\n'
             << &test.d << '\n';

        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

输出是:

    ab@
    b@
    0x28fe94
    0x28fe98
Run Code Online (Sandbox Code Playgroud)

起初,我认为这是&和之间优先的结果..
但是0x28fe940x28fe94指出它不是优先问题.
我可以找出什么是ab@b@是什么意思?

c++ memory-address

4
推荐指数
1
解决办法
143
查看次数

Qt中的slot函数是否在另一个线程上运行?

在以下函数中,管理器将发出finished(QNetworkReply*)信号,然后getCategories(QNetworkReply*)将调用插槽函数.

    void getCategories()
    {
        connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(getCategories(QNetworkReply*)));

        for(int i = 0; i < stores.size(); ++i)
        {
            request.setUrl(QUrl(QString("http://www.example.com/%1").arg(stores[i].store_id)));

            manager.get(request);
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果在第一次调用slot函数时发出第二个信号,Qt是否会启动另一个线程来运行slot函数作为对第二个信号的响应?如果是这样,是否有一些方法让第二次调用slot函数等到第一次调用结束?

更新:

我的意思是插槽功能有可能同时运行吗?

c++ qt qtnetwork qt-signals qtcore

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

用 C++ 中的 lambda 表达式初始化

我写跟随代码?

static int count = []()->int
                   {
                       int count = 0;

                       for(int i = 0; i < categories.size(); ++i)
                       {
                           if(!categories[i].isCategory())
                           {
                               count++;
                           }
                       }

                       return count;
                   };
Run Code Online (Sandbox Code Playgroud)

并得到错误:error: cannot convert '__lambda0' to 'int' in initialization

我的代码片段的含义是分配__lambda0static int count而不是返回内部计数吗?

c++ lambda

4
推荐指数
1
解决办法
1472
查看次数

将qDebug重定向到QTextEdit

我想用来qInstallMessageHandler(handler)重定向qDebugQTextEdit.

我在类中定义了一个处理函数:

void Spider::redirect(QtMsgType type, const QMessageLogContext& context, const QString& msg)
{
    console->append(msg);
}
Run Code Online (Sandbox Code Playgroud)

并打电话qInstallMessageHandler(redirect)给班级的顾问(蜘蛛).但是当我编译这个程序时,我收到一个错误:

不能将'Spider :: redirect'从类型'void(Spider ::)(QtMsgType,const QMessageLogContext&,const QString&)转换为'QtMessageHandler {aka void(*)(QtMsgType,const QMessageLogContext&,const QString&)}'

如果我在全局定义处理函数,那没关系.

我无法弄清楚这两种行为之间的区别.

c++ qt

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

有没有一种方法来检查QJsonObject对象是否包含特定属性?

有一个QJsonObject

    {
        "a":"...",
        "b":"...",
        "c":"..."
    }
Run Code Online (Sandbox Code Playgroud)

有没有一种方法来检查这个对象是否包含"a"?

c++ qt json qtcore qjsonobject

3
推荐指数
1
解决办法
5590
查看次数

为什么dropdrop和takewhile跳过最后一个?

为什么dropwhiletakewhile跳过最后a在以下〔实施例?

>>> import itertools
>>> s = "Aardvark"
>>> def vowel(c):
...     return c.lower() in "aeiou"
...
>>> list(itertools.dropwhile(vowel, s))
['r', 'd', 'v', 'a', 'r', 'k']
>>> list(itertools.takewhile(vowel, s))
['A', 'a']
Run Code Online (Sandbox Code Playgroud)

在控制台中测试之前,我认为结果应该是['r', 'd', 'v', 'r', 'k']['A', 'a', 'a']

该文件称,大约实施dropwhiletakewhile如下:

def dropwhile(predicate, iterable):
# dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
iterable = iter(iterable)
for x in iterable:
    if not predicate(x):
        yield x
        break
for x …
Run Code Online (Sandbox Code Playgroud)

python python-itertools

2
推荐指数
1
解决办法
493
查看次数