做网站的例子,网站改版设计思路,甘肃三北防护林建设局网站,wordpress可以建立商城参考#xff1a;函数参数 Note A.关键字参数#xff1a; 1.关键字参数#xff1a;**kw 可变参数允许你传入0个或任意个参数#xff0c;这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数#xff0c;这些关键字参数在函数内部…参考函数参数 Note A.关键字参数 1.关键字参数**kw 可变参数允许你传入0个或任意个参数这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数这些关键字参数在函数内部自动组装为一个dict。 2.支持只传入必选参数也可以传入任意数目的可选参数如下例。 eg. #!/usr/bin/env python3def my_func(name, age, **kw) :print(name:, name, age:, age, else:, kw)test from function3 import my_func my_func(Chen, 20)
name: Chen age: 20 else: {} my_func(Chen, 20, profStudent)
name: Chen age: 20 else: {prof: Student} my_func(Chen, 20, profStudent, cityFuZhou)
name: Chen age: 20 else: {prof: Student, city: FuZhou} 3.关键字参数的作用”试想你正在做一个用户注册的功能除了用户名和年龄是必填项外其他都是可选项利用关键字参数来定义这个函数就能满足注册的需求。“ 4.当然也可以选择在传入参数的时候直接传入一个dict的内容。这里容易出错我就翻车了。 eg. dic {prof : Student, city : FuZhou}my_func(Chen, 20, dic[prof], dic[city])
Traceback (most recent call last):File stdin, line 1, in module
TypeError: my_func() takes 2 positional arguments but 4 were given my_func(Chen, 20, dic)
Traceback (most recent call last):File stdin, line 1, in module
TypeError: my_func() takes 2 positional arguments but 3 were given 第一句错误的原因是因为传入dic[prof]相当于传入Student即一个字符串这很明显与函数定义的参数不符第二句同上只不过由传入字符串变成了传入一个dict。 正确的方法应该是value_namedict[key]。 eg. my_func(Chen, 20, profdic[prof])
name: Chen age: 20 else: {prof: Student} my_func(Chen, 20, profdic[prof], citydic[city])
name: Chen age: 20 else: {prof: Student, city: FuZhou} 5.如果想直接传入dict方法也很简单加上两个星号* 刚才的错误 my_func(Chen, 20, dic)
Traceback (most recent call last):File stdin, line 1, in module
TypeError: my_func() takes 2 positional arguments but 3 were given 修正 my_func(Chen, 20, **dic)
name: Chen age: 20 else: {prof: Student, city: FuZhou} **dic表示把dic这个dict的所有key-value用关键字参数传入到函数的**kw参数kw将获得一个dict注意kw获得的dict是dic的一份拷贝对kw的改动不会影响到函数外的dic。 B.命名关键字参数 1.定义了关键字参数的函数允许用户传入多个关键字key-value值如果我们想要在函数里面查看一个key是否在传入的dict中可以通过if···in···的方法查看。 eg. #!/usr/bin/env python3def my_func(name, age, **kw) :if prof in kw : # Hint: prof print(prof in)if city in kw :print(city in)print(name:, name, age:, age, else:, kw)output from function3 import my_funcdic {prof : Student, city : FuZhou}my_func(Chen, 20, **dic)
prof in
city in
name: Chen age: 20 else: {city: FuZhou, prof: Student}2.如果要限制关键字参数的名字就可以用命名关键字参数例如只接收city和prof作为关键字参数。 方法 my_func(name, age, *, prof, city) 用*作为分隔符指定传入的关键字参数key必须是prof和city。 使用命名关键字参数时要特别注意如果没有可变参数就必须加一个*作为特殊分隔符。如果缺少*Python解释器将无法识别位置参数和命名关键字参数。 eg. def my_func2(name, age, *, prof, city) :print(name, age, prof, city)output from function3 import my_func2my_func2(Chen, 20, profStudent, cityFuZhou)
Chen 20 Student FuZhou 注意指定了关键字参数的key之后传入的关键字参数数目必须匹配并且必须是 keyvalue 的形式。 命名关键字参数必须传入参数名。 eg. my_func2(Chen, 20, profStudent)
Traceback (most recent call last):File stdin, line 1, in module
TypeError: my_func2() missing 1 required keyword-only argument: city my_func2(Chen, 20)
Traceback (most recent call last):File stdin, line 1, in module
TypeError: my_func2() missing 2 required keyword-only arguments: prof and city my_func2(Chen, 20, Student, FuZhou)
Traceback (most recent call last):File stdin, line 1, in module
TypeError: my_func2() takes 2 positional arguments but 4 were given 3.命名关键字支持默认参数在调用时可以不传入默认参数的值。 C.参数组合 在Python中定义函数可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数这5种参数都可以组合使用。但是请注意参数定义的顺序必须是必选参数、默认参数、可变参数(*[···] or *list_name)、命名关键字参数和关键字参数(**{···} or **dict_name)。 eg. def my_func3(a, b, c0, *d, **e) :print(a, b, c, d, e) output my_func3(Chen, 20)
Chen 20 0 () {} my_func3(Chen, 20, 100)
Chen 20 100 () {} my_func3(Chen, 20, 100, *[Li, Wang], **{Li : num1, Wang : num2})
Chen 20 100 (Li, Wang) {Wang: num2, Li: num1} 在函数调用的时候Python解释器自动按照参数位置和参数名把对应的参数传进去。 也就出现了原文传入一个tuple和一个dict解释器也正常输出的情况 t1 (Li, 100, 99, Wang) d1 {Wang : num2, Li : num1} my_func3(*t1, **d1)
Li 100 99 (Wang,) {Wang: num2, Li: num1} t2 (Li, 100, Wang) my_func3(*t2, **d1)
Li 100 Wang () {Wang: num2, Li: num1} # 按位置解释 t3 [Li, 100, Wang] my_func3(*t3, **d1)
Li 100 Wang () {Wang: num2, Li: num1} # 传入一个list和一个tuple也可以 2017/1/31 转载于:https://www.cnblogs.com/qq952693358/p/6359044.html