小编A.W*_*Wan的帖子

使用乘法(*)意外行为生成子列表

我确信这已在某个地方得到解答,但我不确定如何描述它.

假设我想创建一个包含3个空列表的列表,如下所示:

lst = [[], [], []]
Run Code Online (Sandbox Code Playgroud)

这样做我以为我很聪明:

lst = [[]] * 3
Run Code Online (Sandbox Code Playgroud)

但是我发现,在调试了一些奇怪的行为之后,这导致了对一个子列表的追加更新,比如lst[0].append(3),更新整个列表,[[3], [3], [3]]而不是[[3], [], []].

但是,如果我用列表初始化列表

lst = [[] for i in range(3)]
Run Code Online (Sandbox Code Playgroud)

然后做lst[1].append(5)了预期的[[], [5], []]

我的问题是为什么会发生这种情况?有趣的是,如果我这样做

lst = [[]]*3
lst[0] = [5]
lst[0].append(3)
Run Code Online (Sandbox Code Playgroud)

那么单元格0的"连接"就被打破了[[5,3],[],[]],但是我得到了,但lst[1].append(0)仍然会导致[[5,3],[0],[0].

我最好的猜测是在表单中使用乘法[[]]*x会导致Python存储对单个单元格的引用......?

python list mutable nested-lists

11
推荐指数
3
解决办法
1357
查看次数

什么是顺序泛滥?

这可能很简单,但我无法理解它.谁能给我一个顺序泛滥的例子?在我正在阅读的教科书和互联网资料中说明了这一点

当缓冲帧的数量小于文件中的页面时,这将导致读取文件的每个页面.这是由LRU和重复扫描引起的恶劣情况

#frames <文件中的#个页面.

使用LRU,每次扫描文件都会导致读取文件的每一页."

但究竟是什么呢?为什么会这样?

database storage rdbms memory-management lru

11
推荐指数
1
解决办法
5425
查看次数

更改级别记录到IPython/Jupyter笔记本

我有一个依赖于几个不同模块的软件包,每个模块都设置了自己的记录器.这允许我记录每条日志消息的来源,这很有用.

但是,在IPython/Jupyter笔记本中使用此代码时,我无法控制打印到屏幕上的内容.具体来说,我收到了很多我不想看到的DEBUG级别的消息.

如何更改打印到笔记本的日志级别?

更多信息:

我试图在笔记本中设置一个根记录器,如下所示:

# In notebook
import logging
logging.basicConfig()
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Import the module
import mymodule
Run Code Online (Sandbox Code Playgroud)

然后在我的模块的顶部,我有

# In mymodule.py
import logging
logger = logging.getLogger('mypackage.' + __name__)
logger.setLevel(logging.DEBUG)
logger.propagate = True
# Log some messages
logger.debug('debug')
logger.info('info')
Run Code Online (Sandbox Code Playgroud)

当在笔记本中调用模块代码时,我希望日志传播,然后顶级记录器只打印信息日志语句.但是显示了debug和info log语句.

相关链接:

python logging ipython python-2.7

8
推荐指数
3
解决办法
5068
查看次数

UltiSnips不会自动将更改重新加载到片段文件

(在此处记录此内容是因为我无法在线找到一个好的答案。)

使用UltiSnips时,文档说(在此截屏视频中为2:12),写入.snippets文件足以导致自动重新加载代码段。但是,这对我不起作用。发生了什么?

vim ultisnips

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

在Android中打印SQLite数据库的所有行

出于调试/检查点的目的,我想在Android中打印出SQLite数据库的所有行.我没有找到任何回答这个问题的答案:如何以人类可读的格式轻松打印出SQLite数据库的所有行?

java sqlite android

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

如何从 Kubernetes 作业中的所有 Pod 获取日志?

我正在使用 Kubernetes 作业来运行测试;shell 脚本运行作业并具有设置/拆卸逻辑。该职位有

  • restartPolicy: Never
  • backoffLimit: 2

这意味着如果作业失败,它将创建一个新的 pod 并重试一次。

作业完成后,我想转储作业中所有 Pod 的日志。但当我这样做时

kubectl logs job/my-test
Run Code Online (Sandbox Code Playgroud)

我只从其中一个 Pod 获取日志,其前缀类似于Found 2 pods, using pod/my-test-ntb4w.

--all-containers=true标志没有为我提供所有 Pod 的日志。

如何在 shell 脚本中从作业中的所有 pod 获取日志?

kubernetes

5
推荐指数
2
解决办法
6421
查看次数

如何使宏处理不同类型的参数?

如何编写一个根据其参数类型执行不同操作的宏?

我有一个宏,该宏需要处理可以具有两种类型之一的参数。

#include <typeinfo>

enum class Coolness { kUndefined, kUncool, kCool };
enum class Tallness { kUndefined, kShort, kTall };

void MakePerson (Coolness coolness, Tallness tallness) {}

// Provide a way to make a person by only providing Coolness or Tallness.
#define MAKE_PERSON(x)                         \
({                                             \
  if (typeid(x) == typeid(Coolness)) {         \
      MakePerson(((x)), Tallness::kUndefined); \
  } else {                                     \
      MakePerson(Coolness::kUndefined, (x));   \
  }                                            \
})

int main()
{
  MAKE_PERSON(Coolness::kUncool);
  MAKE_PERSON(Tallness::kTall);
}
Run Code Online (Sandbox Code Playgroud)

(我们可以在此处使用默认参数,但是在实际代码中,我们实际上必须使用宏。)

编译器在main中的两个调用上均引发错误:

main.cpp: In function ‘int main()’:
main.cpp:23:43: error: …
Run Code Online (Sandbox Code Playgroud)

c++

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