小编zur*_*uby的帖子

AttributeError:无法腌制本地对象 '<locals>.<lambda>'

我正在尝试腌制使用以下命令创建的嵌套字典:

collections.defaultdict(lambda: collections.defaultdict(int))
Run Code Online (Sandbox Code Playgroud)

我的简化代码是这样的:

class A:
  def funA(self):
    #create a dictionary and fill with values
    dictionary = collections.defaultdict(lambda: collections.defaultdict(int))
    ...
    #then pickle to save it
    pickle.dump(dictionary, f)
Run Code Online (Sandbox Code Playgroud)

但是它给出了错误:

AttributeError: Can't pickle local object 'A.funA.<locals>.<lambda>'
Run Code Online (Sandbox Code Playgroud)

我打印字典后显示:

defaultdict(<function A.funA.<locals>.<lambda> at 0x7fd569dd07b8> {...}
Run Code Online (Sandbox Code Playgroud)

我尝试在该函数中使字典全局化,但错误是相同的。我很欣赏这个问题的任何解决方案或见解。谢谢!

python pickle jsonpickle python-3.6 python-3.7

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

在 Mac 上调试 C++ 代码时,Visual Studio Code 卡在开头

我在 Mac 上使用 Visual Studio Code 调试 c++11 代码时遇到问题。

具体来说,我的代码可以编译(使用 g++/clang++)并毫无问题地运行。但是当我在 VS code 中使用调试模式,一步步运行我的代码时,它会卡在某个随机点。然后点击步入/步过就没有反应了。左侧的变量窗口将永远显示一个加载圆圈,如下所示。我的笔记本电脑也会变热,此时风扇也会运转。

在此输入图像描述

我已经尝试过下面的拓扑排序代码。有时它卡在主函数之后的第一行,有时它卡在其他地方。无需一步步运行,代码就可以执行到底并得到正确的结果。

我不知道发生了什么,所以我重新安装它,但问题仍然存在。我附加了 task.json 配置文件以及用于测试的代码。请帮助我并提出建议。提前致谢!

下面是我用来设置调试配置的tasks.json:

"version": "2.0.0",
"tasks": [
  {
    "type": "shell",
    "label": "clang++ build active file",
    "command": "/usr/bin/clang++",
    "args": [
      "-std=c++11",
      "-stdlib=libc++",
      "-g",
      "${file}",
      "-o",
      "${fileDirname}/${fileBasenameNoExtension}"
    ],
    "options": {
      "cwd": "${workspaceFolder}"
    },
    "problemMatcher": ["$gcc"],
    "group": {
      "kind": "build",
      "isDefault": true
Run Code Online (Sandbox Code Playgroud)

下面是我在 c++11 中进行拓扑排序的代码:

#include <queue>
#include <unordered_map>
#include <vector>
#include <iostream>

using namespace std;

class Solution {
  public:
    vector<int> topoSort(vector<vector<int>>& edgeInfo) {
    queue<int> …
Run Code Online (Sandbox Code Playgroud)

c++ visual-studio-code vscode-debugger

7
推荐指数
1
解决办法
1337
查看次数

C++函数返回两种不同的类型

我正在使用 C++ 创建一个队列模板类。

队列类有多个函数成员。其中一个函数称为 front() 来检索队列的第一个值。基本上,front()函数将首先检查队列是否为空(使用另一个布尔函数is_empty())。

如果为空,函数将抛出错误消息并返回 1 表示有错误。如果队列不为空,则返回第一个值,该值的类型与队列中数据的类型相同。正如您所看到的,有两种不同类型的返回值。在定义函数时如何同时指定这两种类型?

示例代码如下。返回类型是 T。但是该函数也返回 1。这在 C++ 中可以接受吗?如果不是,如何修改?提前致谢!

template <class T>
T MyQueue<T>::front() {
    if (! is_empty()) {
        return my_queue[0];
    }
    else {
        cout << "queue is empty!" << endl;
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ c++11 c++14 c++17

0
推荐指数
1
解决办法
211
查看次数