大家好,我是明哥。今天给大家分享一下我编译的一个Python参数的内容。内容很干。全文以案例的形式理解知识点。我觉得比网上80%的文章都好。如果你是刚刚入门的python新手,相信这篇文章应该对你有很大的帮助。接下来是文字。1、参数分类函数,在定义的时候,可以带参数也可以不带参数。从函数定义的角度来看,参数可以分为两种类型:强制参数:调用函数时必须指定的参数,定义中没有等号可选参数:也叫默认参数,可以指定也可以指定调用函数时如果不指定,不指定则使用默认参数值。比如下面的代码中,a和b是必选参数,c和d是可选参数deffunc(a,b,c=0,d=1):pass从函数调用的角度来看,参数可以分为2类型:关键字参数:调用时,使用key=value的形式传递参数,这样参数可以不按定义的顺序传递。位置参数:调用时,不要使用关键字参数的key-value形式传递参数。这样在函数定义的时候就应该按照参数的先后顺序传递参数。deffunc(a,b,c=0,d=1):pass#关键字参数传递方法func(a=10,c=30,b=20,d=40)#位置参数传递方法func(10,20,30,40)最后,还有一种非常特殊的参数叫做可变参数。意思是参数的个数是可变的,可以是0,也可以是任意数,但传递参数时不能指定参数名。通常,*args和**kw用来表示:*args:接收到的所有按位置传入的参数参数为元组类型**kw:接收到的所有作为关键字参数传入的参数均为字典类型deffunc(*args,**kw):print(args)print(kw)func(10,20,c=20,d=40)输出结果如下(10,20){'c':20,'d':40}2.十一种情况情况1:在下面的函数中,a是必须指定的参数>>>defdemo_func(a):...print(a)...>>>demo_func(10)10>>>demo_func()#不指定会报错traceback(mostrecentcalllast):File"",line1,inTypeError:demo_func()missing1requiredpositionalargument:'a'情况二:在下面的函数中,b是一个可选参数(默认参数),可以指定也可以不指定,不指定如果默认为10>>>defdemo_func(b=10):...print(b)...>>>demo_func(20)20>>>demo_func()10情况3:在下面的函数中,name和age是必选参数。调用指定参数时,如果不使用关键字参数传递参数,需要注意顺序>>>defprint_profile(name,age):...returnf"Mynameis{name},{age}yearsoldthisyear"...>>>print_profile("iswbm",27)'我叫iswbm,我今年27岁''我叫iswbm,我今年27岁'如果有的话参数很多,如果不想太在意顺序,可以使用关键字参数传递参数,指定参数时附上参数名,例如:>>>print_profile(age=27,name="iswbm")'我叫iswbm,今年27岁'案例四:下面函数中,args参数和上面的参数名不一样,前面有个*号it,意思是是一个可变参数,可以接收任意数量的参数,无需指定参数名>>>defdemo_func(*args):...print(args)...>>>>>>>demo_func(10,20,30)(10,20,30)情况5:在下面的函数中,kw参数和上面的*args多了一个*,一共两个**,也就是说kw是可变关键字参数,Any可以接受带有参数名称的参数数量。>>>defdemo_func(**kw):...打印(kw)...>>>demo_func(a=10,b=20,c=30){'a':10,'b':20,'c':30}情况六:定义时,必选参数必须在可选参数前面,否则运行时会报错>>>defdemo_func(a=1,b):...print(a,b)...File"",line1SyntaxError:non-defaultargumentfollowsdefaultargument>>>>>>defdemo_func(a,b=1):...print(a,b)...>>>情况7:在定义时,变量位置参数必须在变量关键字参数之前,否则运行时会报错>>>defdemo_func(**kw,*args):File"",line1defdemo_func(**kw,*args):^SyntaxError:invalidsyntax>>>>>>defdemo_func(*args,**kw):...print(args,kw)...>>>案例8:变量位置参数可以放在mandatory参数前,但调用时,必填参数必须指定传入的参数名,否则会报错>>>defdemo_func(*args,b):...print(args)...print(b)..>>>demo_func(1,2,100)Traceback(mostrecentcalllast):File"",line1,inTypeError:demo_func()missing1requiredkeyword-onlyargument:'b'>>>>>>demo_func(1,2,b=100)(1,2)100案例9:变量关键字参数不同,变量关键字参数必须放在最后,下面三个例子例子中无论关键字参数后跟位置参数,还是默认参数,还是变量参数,都会报错>>>defdemo_func(**kw,a):File"",line1defdemo_func(**kw,a):^SyntaxError:invalidsyntax>>>>>>defdemo_func(**kw,a=1):File"",line1defdemo_func(**kw,a=1):^语法错误:invalidsyntax>>>>>>defdemo_func(**kw,*args):File"",line1defdemo_func(**kw,*args):^SyntaxError:invalidsyntax案例10:结合以上知识点,得到四种参数类型可以组合在一个函数中出现,但是一定要注意顺序defdemo_func(arg1,arg2=10,*args,**kw):print("arg1:",arg1)print("arg2:",arg2)print("args:",args)print("kw:",kw)尝试调用这个函数,输出结果如下:>>>demo_func(1,12,100,200,d=1000,e=2000)arg1:1arg2:12args:(100,200)kw:{'d':1000,'e':2000}案例11:使用单个*,当你传参数到后面的位置时,对后面的位置有严格的要求你通过的方式e参数,传递参数时必须使用关键字参数以参数的形式传递,必须写参数名,否则会报错。>>>defdemo_func(a,b,*,c):...打印(a)...打印(b)...打印(c)...>>>>>>demo_func(1,2,3)traceback(mostrecentcalllast):File"",line1,inTypeError:demo_func()takes2positionalargumentsbut3weregiven>>>>>>demo_func(1,2,c=3)1233.坑函数参数传参传递的是实际对象的内存地址。如果参数是引用类型的数据类型(列表、字典等),在函数内部修改后,即使修改后的值没有返回回来,实际上外面的值已经改变了。>>>defadd_item(item,source_list):...source_list.append(item)...>>>alist=[0,1]>>>add_item(2,alist)>>>alist[0,1,2】本文转载自微信公众号《Python编程时间》,可通过以下二维码关注。转载本文请联系Python编程时间公众号。