如何将字典作为函数的参数列表传递,如在Go 3中的Python 3中?
Python 3:
def bar(a,b,c): print(a,b,c) args={c: 1, b: 2, a: 3} bar(**args)
空白:
func bar( a, b, c int) { fmt.Printf("%d, %d, %d", a, b, c) } func main(){ args := make(map[string]int) args["a"] = 3 args["b"] = 2 args["c"] = 1 // what next ? }
dskinner.. 19
我不相信这是可能的.你需要使用一个结构来做任何事情,甚至远程接近这个(它是一个遥远的相似)
type Args struct { A, B, C int } func bar(args *Args) { fmt.Printf("%d, %d, %d", args.A, args.B, args.C) } func main() { args := new(Args) args.A = 3 args.B = 2 args.C = 1 bar(args) }
你不需要那样调用它,使用`bar(&Args {B:2})`工作. (3认同)
同样值得注意的是,由于这个答案得到了一些投票,这个问题立刻促使我想到了必须处理变量args的net/rpc包,所以从中可以得出答案.看看标准库如何做事情往往是一些关于Go的最佳建议,请参阅:http://golang.org/pkg/net/rpc/ (2认同)
LinearZoetro.. 11
除了我认为不需要重复的其他答案之外,请注意Go将使用提供的多个返回参数自动解包函数调用:
每个返回值都是函数的参数
每个参数都是函数的返回值
(也就是说,函数的参数列表的类型与其他函数的返回列表相同).
func Args() (a int, b int, c int) { return 1,2,3 } func Bar(a,b,c int) { fmt.Println(a,b,c) } func main() { Bar(Args()) }
会打印1,2,3
.显然这个例子有点傻,但我发现这涵盖了大多数tuple和dict解包作为Python中的参数的情况,这往往是将一个函数的返回值作为另一个函数的参数传递的快速而肮脏的方式.
除了我认为不需要重复的其他答案之外,请注意Go将使用提供的多个返回参数自动解包函数调用:
每个返回值都是函数的参数
每个参数都是函数的返回值
(也就是说,函数的参数列表的类型与其他函数的返回列表相同).
func Args() (a int, b int, c int) { return 1,2,3 } func Bar(a,b,c int) { fmt.Println(a,b,c) } func main() { Bar(Args()) }
会打印1,2,3
.显然这个例子有点傻,但我发现这涵盖了大多数tuple和dict解包作为Python中的参数的情况,这往往是将一个函数的返回值作为另一个函数的参数传递的快速而肮脏的方式.
我不相信这是可能的.你需要使用一个结构来做任何事情,甚至远程接近这个(它是一个遥远的相似)
type Args struct { A, B, C int } func bar(args *Args) { fmt.Printf("%d, %d, %d", args.A, args.B, args.C) } func main() { args := new(Args) args.A = 3 args.B = 2 args.C = 1 bar(args) }