在python中如果我们想让一个函数在调用时既能传入一个参数又能传入多个参数,我们可以将其形参设置为None。这样我们在调用该函数时,如果不传入该参数,函数也不会报错,如果想传入该参数,形参的None也可以被覆盖,正常使用传入的参数
def func1(para_a, para_b=None):
return para_a, para_b
print(func1(1))
print(func1(1, 2))
print(func1(para_b=1, para_a=2))
函数输出:
(1, None)
(1, 2)
(2, 1)
但是如果我们调用该函数传参为
print(func1(para_b=1))
运行会报错:
TypeError: func1() missing 1 required positional argument: ‘para_a’
因为para_a形参没有设置默认值,所以在调用该函数时,不传该参数会报错
2、goland中的变长函数在golang中如果我们使用变长函数,则需要设置函数的形参最后一项为一个切片类型
func func1(paras ...int) {
fmt.Println(reflect.TypeOf(paras))
for _, val := range paras {
fmt.Println(val)
}
}
func main() {
func1()
func1(1)
func1(1, 2)
}
函数输出为
[]int
[]int
1
[]int
1
2
表示形参设置为…int即代表可以传入一个int类型的切片,长度可以任意。但是注意,在设置形参时,带有…类型的形参只能在最后面,若该类型的形参后面还有形参,则会报错
func func1(paras ...int, para_b string) {
fmt.Println(reflect.TypeOf(paras))
for _, val := range paras {
fmt.Println(val)
}
}
Can only use ‘…’ as final argument in list
但是如我们想设置int和string混合类型的可变长度参数时,可以将形参类型设置为空接口类型
func func1(paras ...interface{}) {
fmt.Println(reflect.TypeOf(paras))
for _, val := range paras{
fmt.Println(reflect.TypeOf(val))
}
}
func main() {
func1()
func1(1, "string")
}
函数输出
[]interface {}
[]interface {}
int
string



