如果没有参数传递给python脚本,如何打印帮助信息?
#!/usr/bin/env python
import sys
for arg in sys.argv:
if arg == "do":
do this
if arg == ""
print "usage is bla bla bla"
Run Code Online (Sandbox Code Playgroud)
我缺少的是if arg == ""我不知道如何表达的行:(
我遇到了一个小问题data.table.非常感谢您的帮助.我该怎么做呢:
getResult <- function(dt, expr, gby) {
e <- substitute(expr)
b <- substitute(gby)
return(dt[,eval(e),by=b])
}
v1 <- "Sepal.Length"
v2 <- "Species"
dt <- data.table(iris)
rDT <- getResult(dt, sum(v1, na.rm=TRUE), v2)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
sum中的错误(v1,na.rm = TRUE):参数的'type'(字符)无效
现在,无论是v1和v2从其他程序通过为字符型变量,所以我不能做到这一点v1<- quote(Sepal.Length),这似乎工作.
关于如何将指针传递给指针函数,我有点困惑.我有一个函数,它指向一个我理解没有问题的函数(ExecBlock).但是我给了另一个函数原型(ExecBlock2),它接受了解引用指针(我不确定它到底是什么),如果传递函数有任何参数,也会接受参数.如果有人可以解释优先级以及解释引用函数的确切内容.这不仅仅是传递函数本身吗?在这种情况下(void*)做什么?
int ExecBlock (void (*f) (void), int isSet)
{
return ExecBlock2( HOW TO PASS HERE? , NULL, isSet);
}
int ExecBlock2(void *(*f)(void *), void *arg, int isSet)
{
... more code
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
下面是我的管道,似乎我不能通过使用ModelTransformer类将参数传递给我的模型,我从链接中获取它(http://zacstewart.com/2014/08/05/pipelines-of- featureunions-of-pipelines.html)
错误信息对我有意义,但我不知道如何解决这个问题.知道如何解决这个问题吗?谢谢.
# define a pipeline
pipeline = Pipeline([
('vect', DictVectorizer(sparse=False)),
('scale', preprocessing.MinMaxScaler()),
('ess', FeatureUnion(n_jobs=-1,
transformer_list=[
('rfc', ModelTransformer(RandomForestClassifier(n_jobs=-1, random_state=1, n_estimators=100))),
('svc', ModelTransformer(SVC(random_state=1))),],
transformer_weights=None)),
('es', EnsembleClassifier1()),
])
# define the parameters for the pipeline
parameters = {
'ess__rfc__n_estimators': (100, 200),
}
# ModelTransformer class. It takes it from the link
(http://zacstewart.com/2014/08/05/pipelines-of-featureunions-of-pipelines.html)
class ModelTransformer(TransformerMixin):
def __init__(self, model):
self.model = model
def fit(self, *args, **kwargs):
self.model.fit(*args, **kwargs)
return self
def transform(self, X, **transform_params):
return DataFrame(self.model.predict(X))
grid_search = GridSearchCV(pipeline, parameters, n_jobs=-1, …Run Code Online (Sandbox Code Playgroud) machine-learning parameter-passing python-2.7 scikit-learn cross-validation
public class helloworld {
public static void main(String[] args) {
String text = "Hello World";
l(text);
int n = 0;
l("--------------------------");
l(n);
}
public static void l(Object obj) {
System.out.println(obj);
}
}
Run Code Online (Sandbox Code Playgroud)
我用Java编写了这个简单的程序,它起作用了.现在我很困惑,如果所有的数据类型(int,char,double等)来下的Object,那么为什么我们指定我们希望,当我们值传递给接受哪种数据类型?
我的意思是我们总是可以使用Object函数中使用的数据类型l.是否有一个特定的原因,人们不总是使用Object他们的数据类型来传递值?
将对象传递给函数时,相同的规则是否适用于智能指针以及包含动态内存的其他对象?
例如,当我传递std::vector<std::string>给函数时,我总是考虑以下选项:
我将改变矢量对象的状态,但我不希望在函数完成后反映这些更改,AKA进行复制.
void function(std::vector<std::string> vec);
Run Code Online (Sandbox Code Playgroud)我要改变矢量对象的状态,我确实希望在函数完成后反映这些更改,AKA做出参考.
void function(std::vector<std::string> & vec);
Run Code Online (Sandbox Code Playgroud)这个对象非常大,所以我最好传递一个引用,但是告诉编译器不要让我改变它.
void function(std::vector<std::string> const& vec);
Run Code Online (Sandbox Code Playgroud)现在这与智能指针的逻辑相同吗?什么时候应该考虑移动语义?关于如何通过智能指针的一些指导是我最想要的.
代码1
#include<stdio.h>
int main(int argc, char *argv[])
{
int j;
printf("%d", argv[1][0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
代码2
#include<stdio.h>
int main(int argc, char **argv)
{
int j;
printf("%d", argv[1][0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
CODE 1和CODE 2都提供相同的输出.但是CODE 1和CODE 2中主要功能的参数2是不同的.在编译时在数据部分上创建指针数组.argv是指针数组.然后我们应该在main函数中声明参数作为指向字符的指针,即**argv.在CODE 1中声明如何正确?
拆包/图示运营商*和**在横跨Python版本(2.7,3.X <3.5和3.x> = 3.5)其适用性广泛不同.
例如:
| 2.7 | 3.1-3.4 | 3.5
----------------------------------------------------------------------
function(*args) ? ? ?
x, *y, z = [1, 2, 3, 4, 5] x ? ?
{**x, **y} x x ?
Run Code Online (Sandbox Code Playgroud)
我错过了各种版本之间是否还有其他差异?我正在浏览PEP和Readmes,但文档并未详细说明.
python function parameter-passing argument-unpacking iterable-unpacking
ISO C要求托管实现调用名为的函数main.如果程序接收到参数,它们将作为char*指针数组接收,这是main定义中的第二个参数int main(int argc, char* argv[]).
ISO C还要求argv数组指向的字符串是可修改的.
但argv别名的元素可以相互影响吗?换句话说,可以存在i,j使得
0 >= i && i < argc0 >= j && j < argci != j0 < strlen(argv[i])strlen(argv[i]) <= strlen(argv[j])argv[i] 别名 argv[j]在计划启动?如果是这样,argv[i][0]也可以通过别名字符串看到写入argv[j].
ISO C标准的相关条款如下,但不允许我最终回答这个名义上的问题.
§5.1.2.2.1程序启动
在程序启动时调用的函数被命名
main.该实现声明此函数没有原型.它应定义为返回类型int且没有参数:Run Code Online (Sandbox Code Playgroud)int main(void) { /* ... */ }或者有两个参数(这里称为
argc和argv,虽然可以使用任何名称,因为它们是声明它们的函数的本地名称):Run Code Online (Sandbox Code Playgroud)int main(int argc, char …
我有一系列值:
['a', 'b', 'c', 'd']
Run Code Online (Sandbox Code Playgroud)
我需要将这些作为参数传递给函数:
window.myFunction('a', 'b', 'c', 'd');
Run Code Online (Sandbox Code Playgroud)
如果我可以将数组/对象传递给函数,这会更容易,但函数是由其他人编写的或者已经存在而且我无法更改它们 - 它们需要作为单独的参数传递,这是我需要解决的问题.
传递的值的数量不一致.它可能是一个,可能是100个.
再次,我不能影响功能.它们就是这样,我总会收到一系列值传递给它们.
c ×3
function ×3
arrays ×2
c++ ×2
pointers ×2
python ×2
alias ×1
arguments ×1
argv ×1
c++11 ×1
c11 ×1
data.table ×1
java ×1
javascript ×1
python-2.7 ×1
r ×1
scikit-learn ×1
unique-ptr ×1
variables ×1