我正在开发一个启动多个进程和数据库连接的python脚本.我偶尔想用Ctrl+ C信号杀死脚本,我想做一些清理工作.
在Perl我会这样做:
$SIG{'INT'} = 'exit_gracefully';
sub exit_gracefully {
print "Caught ^C \n";
exit (0);
}
Run Code Online (Sandbox Code Playgroud)
我如何在Python中模拟这个?
我想$HOME在我正在编写的C++程序中访问环境变量.如果我用C编写代码,我只是使用该getenv()函数,但我想知道是否有更好的方法来实现它.这是我到目前为止的代码:
std::string get_env_var( std::string const & key ) {
char * val;
val = getenv( key.c_str() );
std::string retval = "";
if (val != NULL) {
retval = val;
}
return retval;
}
Run Code Online (Sandbox Code Playgroud)
我应该用getenv()C++访问环境变量吗?是否有任何我可能遇到的问题,我可以通过一点点知识来避免?
我在R工作,我想定义一些我(或我的一个合作者)无法改变的变量.在C++中我会这样做:
const std::string path( "/projects/current" );
Run Code Online (Sandbox Code Playgroud)
我如何用R编程语言执行此操作?
为清晰起见编辑:我知道我可以在R中定义这样的字符串:
path = "/projects/current"
Run Code Online (Sandbox Code Playgroud)
我真正想要的是一种语言结构,它保证任何人都不能改变与名为"path"的变量相关的值.
编辑以回复评论:
从技术上来说,const是一个编译时保证,但在我看来,R解释器会抛出一个带有错误消息的停止执行.例如,看看当您尝试将值分配给数字常量时会发生什么:
> 7 = 3
Error in 7 = 3 : invalid (do_set) left-hand side to assignment
Run Code Online (Sandbox Code Playgroud)
所以我真正想要的是一种语言功能,它允许您只分配一次值,当您尝试将新值分配给声明为const的变量时,应该会出现某种错误.我不关心错误是否在运行时发生,特别是如果没有编译阶段.维基百科的定义在技术上可能不是常量,但它非常接近.看起来这在R编程语言中是不可能的.
我可以制作一系列这样的数字:
s = seq(from=1, to=10, by=1)
Run Code Online (Sandbox Code Playgroud)
如何从AZ制作一系列字符?这不起作用:
seq(from=1, to=10)
Run Code Online (Sandbox Code Playgroud) 我正在使用R进行数据分析,并通过Google文档与协作者共享一些数据.是否有一个简单的界面可用于从Google Docs电子表格访问R data.frame对象?如果没有,是否有其他语言的类似API?
在我的新工作中,有更多的人使用Python而不是Perl,我有一个非常有用的API,我自己编写,我想让我的同事用Python.
我认为将Perl代码编译成Python代码的编译器对于这样的任务非常有用.在尝试编写解析Perl的东西之前(或者至少是我用于定义API的Perl子集)之前,我从咨询公司那里找到了一个桥梁管理员.
对于我来说,聘请一家咨询公司来翻译这个API几乎肯定不值得,但这是一个非常有趣的工具.
有没有人知道将解析(或尝试解析!)Perl5代码并将其编译为Python的编译器?如果没有这样的东西,我该如何开始编写一个简单的编译器来解析我的面向对象的Perl代码并将其转换为Python?是否有ANTLR或YACC语法可以作为起点?
编辑:我找到了perl.y,如果我要编写自己的编译器,这可能是一个起点.
我在R中有一个data.frame,如下所示:
score rms template aln_id description
1 -261.410 4.951 2f22A.pdb 2F22A_1 S_00001_0000002_0
2 -231.987 21.813 1wb9A.pdb 1WB9A_4 S_00002_0000002_0
3 -263.722 4.903 2f22A.pdb 2F22A_3 S_00003_0000002_0
4 -269.681 17.732 1wbbA.pdb 1WBBA_6 S_00004_0000002_0
5 -258.621 19.098 1rxqA.pdb 1RXQA_3 S_00005_0000002_0
6 -246.805 6.889 1rxqA.pdb 1RXQA_15 S_00006_0000002_0
7 -281.300 16.262 1wbdA.pdb 1WBDA_11 S_00007_0000002_0
8 -271.666 4.193 2f22A.pdb 2F22A_2 S_00008_0000002_0
9 -277.964 13.066 1wb9A.pdb 1WB9A_5 S_00009_0000002_0
10 -261.024 17.153 1yy9A.pdb 1YY9A_2 S_00001_0000003_0
Run Code Online (Sandbox Code Playgroud)
我可以像这样计算data.frame的摘要统计信息:
> tapply( d$score, d$template, mean )
1rxqA.pdb 1wb9A.pdb 1wbbA.pdb 1wbdA.pdb 1yy9A.pdb 2f22A.pdb
-252.7130 …Run Code Online (Sandbox Code Playgroud) 我在R中有一个我多次调用的函数.我想跟踪我调用它的次数,并使用它来决定在函数内部做什么.这就是我现在所拥有的:
f = function( x ) {
count <<- count + 1
return( mean(x) )
}
count = 1
numbers = rnorm( n = 100, mean = 0, sd = 1 )
for ( x in seq(1,100) ) {
mean = f( numbers )
print( count )
}
Run Code Online (Sandbox Code Playgroud)
我不喜欢我必须在函数范围之外声明变量count.在C或C++中,我可以创建一个静态变量.我可以用R编程语言做类似的事情吗?
我正在开发一个大型协作C++项目,该项目既可以在各种Linux,OS X和Windows上开发和运行.我们使用GCC,Visual Studio C++和英特尔C++编译器在这些平台上进行编译.随着越来越多的人开始为项目开发代码,我们开始在编译和运行时看到特定于特定操作系统上特定编译器的奇怪错误.这方面的一个示例是隐式包含某些OS /编译器对似乎为您找到的标头,意外地从派生类中的基类重载函数.
我的目标是使GCC上的编译更加严格,并在所有平台上捕获更多错误,以便我们不会遇到这些问题.这是我正在考虑尝试通过Google和GCC手册页找到的GCC标志列表:
人们用来制作GCC的其他标志(以及不太重要的Visual Studio C++和英特尔C++编译器)遵循更严格的C++语言标准是什么?具体说明您正在讨论的编译器和版本,因为其中一些可能并未在所有编译器的所有版本中实现.
我正在用C++重构一些代码,我想弃用一些旧的方法.我目前查找所有方法的方法如下所示:
这完全很糟糕.我也尝试过grepping source来获取函数调用的名称,但是我有时会遇到带有不同参数的同名函数的问题,所以我的编译让C++编译器为我解析名称.我已经为C#找到了这个问题,但我的代码库完全用C++实现.
有没有更好的方法来找到C++中类方法或函数的所有调用者?我在Unix系统上使用GCC,但跨平台解决方案将是最高级的.
r ×5
c++ ×3
statistics ×3
compilation ×2
python ×2
ascii ×1
c ×1
character ×1
closures ×1
const ×1
constants ×1
controls ×1
function ×1
google-docs ×1
parsing ×1
perl ×1
refactoring ×1
seq ×1
sequence ×1
signals ×1