栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

golang的变长函数与python对比

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

golang的变长函数与python对比

1、python中的变长函数

在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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/953978.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号