所以我有这个概念的困难*args
和**kwargs
.
到目前为止,我已经了解到:
*args
=参数列表 - 作为位置参数**kwargs
= dictionary - 其键成为单独的关键字参数,值成为这些参数的值.我不明白这会对哪些编程任务有所帮助.
也许:
我想输入列表和字典作为函数AND的参数同时作为通配符,所以我可以传递任何参数?
有一个简单的例子来说明如何*args
和**kwargs
使用?
我发现的教程也使用了"*"和变量名.
是*args
和**kwargs
刚才占位符或者你使用完全相同*args
,并**kwargs
在代码中?
如果我想解析这个怎么办:
java MyProgram -r opt1 -S opt2 arg1 arg2 arg3 arg4 --test -A opt3
Run Code Online (Sandbox Code Playgroud)
我想在我的程序中得到的结果是:
regular Java args[] of size=4
org.apache.commons.cli.Options[] of size=3
org.apache.commons.cli.Options[] #2 of size=1
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用Apache Commons CLI,但文档对我上面提到的案例有点不清楚.具体来说,文档没有告诉您如何处理我在下面指定的第三种类型的选项:
Run Code Online (Sandbox Code Playgroud)1. options with a "-" char 2. options with a "--" char 3. options without any marker, or "bare args"
我希望Apache Commons CLI可以工作,但是如果那些args没有选项前缀,STILL能够将常规args传递给程序.也许它确实如此,但是当我通读它时,文档并没有说出来......
我有这个代码:
public static void Main(string[] args)
{
if (string.IsNullOrEmpty(args[0])) // Warning : Index was out of the bounds of the array
{
ComputeNoParam cptern = new ComputeNoParam();
cptern.ComputeWithoutParameters();
}
else
{
ComputeParam cpter = new ComputeParam();
foreach (string s in args){...}
}
}
Run Code Online (Sandbox Code Playgroud)
也尝试过if(args.Length==0)
,但它仍然无法正常工作.
基本上我想知道用户是否使用参数调用程序.如果不是,程序将要求输入.
我怎样才能做到这一点?提前致谢.
我有一个测试PowerShell V2脚本,如下所示:
function test_args()
{
Write-Host "here's arg 0: $args[0]"
Write-Host "here's arg 1: $args[1]"
}
test_args
Run Code Online (Sandbox Code Playgroud)
如果我从powershell命令提示符调用它,我会在屏幕上显示:
here's arg[0]: [0]
here's arg[1]: [1]
Run Code Online (Sandbox Code Playgroud)
不是我想要的.在我可以使用之前,似乎我必须将$ args [0]和$ args [1]复制到脚本中的新变量中?如果我这样做,我可以很好地访问.
有没有办法在我的代码中访问索引的$ args?我尝试过以各种方式使用花括号,但没有运气.
我最终将转向命名参数,但我正在处理的脚本(不是这个演示版)是批处理文件的直接端口.
我正在使用Java,并且为方法指定多个args的典型方法是:
public static void someMethod(String[] args)
Run Code Online (Sandbox Code Playgroud)
但是,我已经看过几次,甚至在标准的Java库中.我不知道如何在谈话中提及这一点,并且由于使用了字符,谷歌搜索没有多大帮助.
public static void someMethod(Object... args)
Run Code Online (Sandbox Code Playgroud)
我知道这允许你将一串或多个参数串联到一个方法中,而不必提前知道确切的数量,例如:
someMethod(String arg1, String arg2, String arg3, ... etc
Run Code Online (Sandbox Code Playgroud)
你如何引用这种方法签名设置?我认为这很好,很方便,并希望向其他人解释,但我缺乏如何参考这一点.谢谢.
我有一个Python类,其方法应该以这种方式接受参数和关键字参数
class plot:
def __init__(self, x, y):
self.x = x
self.y = y
def set_axis(self, *args, xlabel="x", ylabel="y", **kwargs):
for arg in args:
<do something>
for key in kwargs:
<do somethng else>
Run Code Online (Sandbox Code Playgroud)
打电话时:
plt = plot(x, y)
plt.set_axis("test1", "test2", xlabel="new_x", my_kwarg="test3")
Run Code Online (Sandbox Code Playgroud)
我收到错误: TypeError: set_axis() got multiple values for keyword argument 'xlabel'
无论如何,如果我设置我的方法
class plot:
def __init__(self, x, y):
self.x = x
self.y = y
def set_axis(self, xlabel="x", ylabel="y", *args, **kwargs):
for arg in args:
<do something>
for key in kwargs: …
Run Code Online (Sandbox Code Playgroud) 我一直在构建Wordpress小部件,并且总是使用这样的代码:
$instance = wp_parse_args( (array) $instance);
Run Code Online (Sandbox Code Playgroud)
它从来没有引起过问题,建议在几个地方(Justin Tadlock,我有两本Wordpress书籍等),但这些来源都没有真正解释原因.
那么,这实际上做了什么,如果省略它会发生什么?
我需要将一些包含空格和其他字符的文本传递给由GNU Parallel运行的脚本.
这是一个非常简单的例子:
$ seq 1 3 | parallel echo "Quoted ' (text)"
Run Code Online (Sandbox Code Playgroud)
上面的例子将输出:
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做,一切正常:
seq 1 …
Run Code Online (Sandbox Code Playgroud) 我有一个简单的问题.我尝试在很多博客中搜索这个问题但是所有网站都返回了如何快速工作的功能,但我需要这个案例.
我的自定义功能是:
func getLocalizeWithParams(args:CVarArgType...)->String {
return NSString.localizedStringWithFormat(self, args); //error: Expected expression in list of expressions
}
Run Code Online (Sandbox Code Playgroud)
我如何通过args将我的args传递给其他系统函数?
谢谢你.
例如
public static void main(String[] args) {
int count = 0;
for (String s: args) {
System.out.println(s);
count++;
}
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以做类似的事情
int count = args.length()?还是args.size()?