简述Python3中三种函数参数传递类型

在这篇博文中,我们会使用sum()information()作为例子来如何正确地向函数传入参数


可变参数(*args)

所谓可变参数,是其指参数的个数可变,这对于多次在给一个函数传入非固定个数参数的场景来说十分的好用。(看到这里有疑问?看下面的例子---->>>>)


首先看一个比较麻烦的写法:
sum()函数接收多个整数,然后对这些整数进行求和,返回求和的结果。所以要给sum()传入多个数字,一种可能的方法如下:

list1 = [1,2,3,4]
list2 = [1,2,3,4,5]
def sum(list):
    result = 0
    for i in list:
        result += i
    return(result)

print(sum(list1))#10
print(sum(list2))#15

有一点需要注意的是,使用上述sum()的时候,需要首先定义一个列表,这样的写法比较麻烦,如果使用可变参数的方法就可以使得代码更加简洁,可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时会自动组装为一个元组(tuple)

def sum1(*list):
    result = 0
    for i in list:
        result += i
    return(result)

print(sum1(1,2,3,4))    #10
print(sum1(1,2,3,4,5))    #15,无需再定义新的列表


关键字参数(**kwargs)

与可变参数类似,关键字参数也可以传入非固定个数的参数,但是与之不同的是,关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个字典(dict)

def information(**kwargs):
    print("kwargs中包含:",kwargs)

information()    #kwargs中包含: {}
information(age=1,name="Ben")    #kwargs中包含: {'name': 'Jack', 'age': 1}

从打印的结果可以看出**kwargs是一个字典

def information1(**kwargs):
    if 'age' in kwargs:
        print("age:",kwargs['age'])
    if 'name' in kwargs:
        print("name:",kwargs['name'])
    else:
        pass
information1(age=1,name="Ben")    #age: 1
                                  #name: Ben


命名关键字参数(其他参数,*,命名关键字参数)

上面我们介绍的关键字参数可以传入0到任意个参数,在某些传入关键字的场景中,我们想要控制传入的关键字参数,使得只能传入指定的关键字参数,所以,我们引入命名关键字参数

def information2(age,*, name, address):
    print("age:", age, "; name:", name, "; address:", address)

information2(1,name="Ben", address="somewhere,China")
#age: 1 ; name: Ben ; address: somewhere,China

传入命名关键字参数时需要注意,*后的参数都是要传入命名的参数,如上面例子中的age=1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 3,227评论 0 9
  • 第5章 函数和函数式编程 5.1 引言函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数...
    VIVAFT阅读 1,090评论 0 5
  • 当同一个功能、同一套算法等在多个地方重复使用,就要考虑把其抽成一个函数,在需要的地方调用即可。这样可以提高代码的复...
    开发者也阅读 685评论 1 0
  • 2018/07/16 刘月林学习总结 一、时间记录 0730-1030 极客时间微信小程序实例学习 1030 - ...
    刘月林Yuelin_MELB阅读 197评论 0 1
  • 记第一次面基007战友米西。 过去的一周可谓十分充实,时间装载的内容十分之丰富了,迎来了职业生涯的第一次转折,与两...
    山里龙猫阅读 638评论 3 0

友情链接更多精彩内容