小编Sup*_*ric的帖子

使用argparse解析布尔值

我想使用argparse来解析写为"--foo True"或"--foo False"的布尔命令行参数.例如:

my_program --my_boolean_flag False
Run Code Online (Sandbox Code Playgroud)

但是,以下测试代码不能满足我的要求:

import argparse
parser = argparse.ArgumentParser(description="My parser")
parser.add_argument("--my_bool", type=bool)
cmd_line = ["--my_bool", "False"]
parsed_args = parser.parse(cmd_line)
Run Code Online (Sandbox Code Playgroud)

可悲的是,parsed_args.my_bool评估为True.这种情况即使我改变cmd_line["--my_bool", ""],这是令人惊讶的,因为bool("")重新评估False.

如何让argparse解析"False","F"以及它们的小写变体False

python boolean command-line-parsing argparse

532
推荐指数
15
解决办法
32万
查看次数

从经度\纬度转换为笛卡尔坐标

我有一些以地球为中心的坐标点,以纬度和经度(WGS-84)给出.

如何将它们转换为笛卡尔坐标(x,y,z),原点位于地球的中心?

mapping geometry geospatial

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

用Python导入包

我可能遗漏了一些显而易见的东西但无论如何

当您os在python中导入包时,您可以使用任何子模块/子包.例如,这有效:

>>> import os
>>> os.path.abspath(...)
Run Code Online (Sandbox Code Playgroud)

但是我有自己的包,其结构如下:

FooPackage/
  __init__.py
  foo.py
Run Code Online (Sandbox Code Playgroud)

这里相同的逻辑不起作用:

>>> import FooPackage
>>> FooPackage.foo
AttributeError: 'module' object has no attribute 'foo'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

python python-import

63
推荐指数
4
解决办法
9万
查看次数

如何在matplotlib 3d中隐藏轴?

如何在不显示轴的情况下制作3D绘图?

在绘制三维绘图时,Matplotlib不仅绘制x,y和z轴,还在xy,yz和xz平面上绘制浅灰色网格.我想绘制一个"自由浮动"的3D图,没有这些元素.

我试过的东西:

# Doesn't work; this hides the plot, not the axes
my_3d_axes.set_visible(False)

# Doesn't do anything. Also, there's no get_zaxis() function.
my_3d_axes.get_xaxis().set_visible(False)
my_3d_axes.get_yaxis().set_visible(False)
Run Code Online (Sandbox Code Playgroud)

plot matplotlib

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

在emacs中打开2个文件时,如何让它们并排显示?

有时我会从命令行启动带有2个文件的emacs,如下所示:

emacs foo.txt bar.txt
Run Code Online (Sandbox Code Playgroud)

这将打开emacs窗口,垂直拆分:

foo.txt
-------
bar.txt
Run Code Online (Sandbox Code Playgroud)

如何编辑我的.emacs文件,以便它们并排显示,如下所示?:

        |
foo.txt | bar.txt
        |
Run Code Online (Sandbox Code Playgroud)

编辑:为了澄清,我知道如何 emacs启动实现这一点(Mx 0,Mx 3,然后在右侧窗口重新访问bar.txt).我只是希望emacs在我启动时默认并排拆分,所以我没有必要.

emacs dot-emacs

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

在emacs中使用两个帧时,如何防止编译缓冲区同时出现?

我使用两个显示器,并经常使用两个框架打开的emacs; 每个监视器一个.每个框架被分成两个并排的窗口,如下所示:

 a | b   <-- frame 1 in monitor 1
-------
 c | d   <-- frame 2 in monitor 2
Run Code Online (Sandbox Code Playgroud)

当我在窗口a中点击"编译"按钮时,编译缓冲区在其旁边的缓冲区中打开.到现在为止还挺好:

 a | compilation
-----------------
 c |     d
Run Code Online (Sandbox Code Playgroud)

但是,如果我然后移动到窗口c来编辑一些东西,然后再次点击编译,窗口d也会访问编译缓冲区:

 a | compilation
------------------
 c | compilation
Run Code Online (Sandbox Code Playgroud)

所以现在我有一半的屏幕空间占用了同一个编译缓冲区的两个副本,想知道为什么我有两个显示器:)

当我的光标位于当前打开的编译缓冲区旁边的缓冲区中时,我可以通过认真地仅仅点击编译键来防止这种情况,但是我很早就打了'编译',而且我经常没有心思这样做.我觉得必须有一些我可以调整的东西.emacs所以我不应该这样做.

有什么建议?理想情况下,当我点击'compile'时,当前打开的编译缓冲区应该从之前的窗口移动到当前使用的窗口旁边的窗口.如果这太复杂了,我很容易解决让emacs 没有访问相邻窗口中的编译缓冲区,如果它已经在另一个窗口中打开了.

emacs compilation window dot-emacs frame

26
推荐指数
1
解决办法
2245
查看次数

在C++中,我应该几乎总是使用虚拟继承吗?

我从这个条目中看到虚拟继承将sizeof(指针)添加到对象的内存占用.除此之外,默认情况下使用虚拟继承是否有任何缺点,只有在需要时才使用常规继承?这似乎会带来更具前瞻性的课堂设计,但也许我错过了一些陷阱.

c++ multiple-inheritance virtual-inheritance

25
推荐指数
2
解决办法
5485
查看次数

C++ 11中的空宏参数是否合法?

我有时会故意省略宏观论点.例如,对于类似函数的宏

#define MY_MACRO(A, B, C)  ...
Run Code Online (Sandbox Code Playgroud)

我可以称之为:

MY_MACRO(, bar, baz)
Run Code Online (Sandbox Code Playgroud)

技术上还有3个论点; 只是第一个是"空的".这个问题不是关于可变参数的宏.

当我这样做时,我在使用-ansi(又名-std=c++98)编译时会收到来自g ++的警告,但是当我使用时却没有-std=c++0x.这是否意味着新的宏args在新的C++标准中是合法的?

这是我的全部问题,但期待"你为什么要这样做?" 回复,这是一个例子.我喜欢保持.h文件不被函数体整理,但是在.h文件之外实现简单的访问器是很乏味的.因此我写了以下宏:

#define IMPLEMENT_ACCESSORS(TEMPLATE_DECL, RETURN_TYPE, CLASS, FUNCTION, MEMBER) \
  TEMPLATE_DECL                                                         \
  inline RETURN_TYPE* CLASS::Mutable##FUNCTION() {                      \
    return &MEMBER;                                                     \
  }                                                                     \
                                                                        \
  TEMPLATE_DECL                                                         \
  inline const RETURN_TYPE& CLASS::FUNCTION() const {                   \
    return MEMBER;                                                      \
  }
Run Code Online (Sandbox Code Playgroud)

这就是我如何将它用于包含被int调用的类模板int_:

IMPLEMENT_ACCESSORS(template<typename T>, int, MyTemplate<T>, Int, int_)
Run Code Online (Sandbox Code Playgroud)

对于非模板类,我不需要template<typename T>,所以我省略了这个宏参数:

IMPLEMENT_ACCESORS(, int, MyClass, Int, int_)
Run Code Online (Sandbox Code Playgroud)

c++ macros c++11

25
推荐指数
3
解决办法
8317
查看次数

Scheme/Common Lisp/Clojure中的自动差异库

我听说McCarthy发明Lisp的原始动机之一是编写一个自动区分系统.尽管如此,我的Google搜索还没有为此做出任何库/宏.是否有任何Scheme/Common Lisp/Clojure库(宏)用于获取函数F并返回计算F的导数的函数dF/dx?

我希望它能用多个参数支持F'.用户可以选择哪个是x来区分.理想情况下,微分器甚至可以用于矢量值F和x.

编辑:有几个人提到了象征性的差异化.符号微分和自动微分之间的区别是微妙的,但它在维基百科中得到了很好的总结,特别是在这张图片中.这种区别在lisp中并不那么强烈,其中符号表达式可以按原样转换为工作程序,但仍存在潜在的困难:

符号微分要求表达式被区分为由具有已知衍生物的操作组成.例如,有人提到了SICP的一个宏的例子,它通过简单的性行为进行搅拌(+ y (* (x y))),并使用链规则,以及如何区分+*返回代表衍生物的性别的知识.我需要使用表达式,例如(* (foo x y) (bar x)),where foobarmay可以依次调用其微分时间不知道其衍生物的其他函数.

如果有采取类似的表达方式,这将是罚款(foo x y),并以其函数体替换,替换参数中的任何提及与xy在卫生型的方式.在那儿?

此外,上述任何一个都没有解决在将向量值函数与向量值参数区分开来时出现的复杂情况......这是大多数自动微分实现的适应性.

lisp scheme clojure automatic-differentiation numerical-methods

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

对makefile或CMake文件中的列表进行并行迭代

有没有办法在makefile或CMake文件中并行循环多个列表?

我想在CMake中执行类似下面的操作,但AFAICT不支持此语法:

set(a_values a0 a1 a2)
set(b_values b0 b1 b2)
foreach(a in a_values b in b_values)
  do_something_with(a b)
endforeach(a b)
Run Code Online (Sandbox Code Playgroud)

这将执行:

do_something_with(a0 b0)
do_something_with(a1 b1)
do_something_with(a2 b2)
Run Code Online (Sandbox Code Playgroud)

我会接受CMake或Make的答案,但CMake会更受欢迎.谢谢!

loops makefile cmake

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