关键字参数与非关键字参数(可变参数)详解

kkkkk 2018年12月17日 22:48 Python基础
学过php或者其他语言的同学都知道,php里面的参数不是个数不是可变的(只是很多时候是可以省略的,因为在函数定义的时候为参数设置了默认值)。但是在python里却不是这样,python里面运行可变参数的出现,参数中出现(*arg,**arg2)的形式。

今天我们来详解一下这种用法:

例如:

def foo1(arg1,arg2,key1=1,key2=2,*arg,**keywords):
    print "arg1 parameters is ",arg1
    print "arg2 parameters is ",arg2
    print "key1 parameter is ",key1
    print "key2 parameter is ",key2
    print "Arbitrary parameter is ", arg
    print "keywords parameter is ",keywords

foo1(1,2,3,4,5,6,k1=1,k2=2,k3=3)

输出:

arg1 parameters is  1
arg2 parameters is  2
key1 parameter is  3
key2 parameter is  4
arg parameter is  (5, 6)
keywords parameter is  {'k3': 3, 'k2': 2, 'k1': 1}

函数参数分为四部分:
arg1,arg2,key1,key2普通参数
*arg 非关键字参数列表
**keywords 关键字参数列表

函数声名部分,参数的四个部分不可颠倒位置,可以没有其中某几部分。

python函数的这种特性使得函数参数更加灵活,参数个数也不受限制。

注意:这种用法常用在python的装饰器中,至于什么是装饰器,它是python里面非常重要的一个特性,我会在以后详解
文章评论(0)
  • avatar kkkkkk 2018年12月21日 11:31
    Youkou老师厉害吧!
    kkkkk
    2018年12月21日 11:16
    辞藻瑰丽,清娩可喜。文笔练达,意亦周到。抒情恳切,一气呵成用词切当,意境不俗。
    回复
  • avatar kkkkkk 2018年12月21日 11:31
    这评论真好啊!
    kkkkklxinde
    2018年12月21日 11:17
    本文独擅胜场之处在于其体现出的作者思维的穿透力与概括性。本文由材料切入,引出观点,并以此为重点展开阐述;同时做辩证分析,体现了作者思维的高度和思考的深入。第三段联系现实概述种种需要“更”的表现,言约而意丰。新颖而有力的论证观点。
    回复
  • avatar kkkkklxinde 2018年12月21日 11:17
    本文独擅胜场之处在于其体现出的作者思维的穿透力与概括性。本文由材料切入,引出观点,并以此为重点展开阐述;同时做辩证分析,体现了作者思维的高度和思考的深入。第三段联系现实概述种种需要“更”的表现,言约而意丰。新颖而有力的论证观点。
    回复
  • avatar kkkkk 2018年12月21日 11:16
    辞藻瑰丽,清娩可喜。文笔练达,意亦周到。抒情恳切,一气呵成用词切当,意境不俗。
    回复