当前位置: 首页 > SEO学院网络营销

Python函数参数类型*、**的区别,参数类型

来源:未知 浏览量:124次

刚开始学习pythonpython相对于java确实要简洁易用得多。内存回收类似hotspot的可达性分析 不可变对象也如同java得Integer类型考虑机房因素 不可变对象也如同java得Integer类型with函数类似新版本C++的特性总体来说理解起来比较轻松。只是函数部分参数的”*”与”**”闭包等问题着实令人迷糊了一把弄清概念后写下此文记录下来,也希望本文能够帮助其他初学者。

所以本文是一篇学习笔记着重于使用的细节和理解上首先分别介绍了函数各种参数类型在调用和声明时的区别seo优化首先分别介绍了函数各种参数类型在调用和声明时的区别及其在混用时需要注意的一些细节之后讲了闭包相关的内容。如果有不对的地方欢迎指正。

Python函数参数类型*、**的区别

函数调用区别

1. 不同类型的参数简述
#这里先说明python函数调用得语法为:
代码如下:
func(positional_args, keyword_args,
*tuple_grp_nonkw_args, **dict_grp_kw_args)

Python函数参数类型*、**的区别

举个例子来说明这4种调用方式得区别:
代码如下:
#——————————-
#positional_args方式
test(1,2,3,4,5)
1 2 3 4 5

#这种调用方式的函数处理等价于
a,b,c,d,e = 1,2,3,4,5
print a,b,c,d,e

#——————————-
#keyword_args方式
test(a=1,b=3,c=4,d=2,e=1)
1 3 4 2 1

#这种处理方式得函数处理等价于
a=1
b=3
c=4
d=2
e=1
print a,b,c,d,e

#——————————-
#*tuple_grp_nonkw_args方式
x = 1,2,3,4,5
test(*x)
1 2 3 4 5

#这种方式函数处理等价于
代码如下:
a,b,c,d,e = x
print a,b,c,d,e
#特别说明:x也可以为dict类型,x为dick类型时将键传递给函数
y
{‘a’: 1, ‘c’: 6, ‘b’: 2, ‘e’: 1, ‘d’: 1}
test(*y)
a c b e d

#———————————
#**dict_grp_kw_args方式
y
{‘a’: 1, ‘c’: 6, ‘b’: 2, ‘e’: 1, ‘d’: 1}
test(**y)
1 2 6 1 1

#这种函数处理方式等价于
a = y[‘a’]
b = y[‘b’]
… #c,d,e不再赘述
print a,b,c,d,e

2. 不同类型参数混用需要注意的一些细节
  接下来说明不同参数类型混用的情况,要理解不同参数混用得语法需要理解以下几方面内容.

  首先要明白,函数调用使用参数类型必须严格按照顺序,不能随意调换顺序,否则会报错. 如 (a=1,2,3,4,5)会引发错误,; (*x,2,3)也会被当成非法.

  其次,函数对不同方式处理的顺序也是按照上述的类型顺序.因为#keyword_args方式和**dict_grp_kw_args方式对参数一一指定,所以无所谓顺序.所以只需要考虑顺序赋值(positional_args)和列表赋值(*tuple_grp_nonkw_args)的顺序.因此,可以简单理解为只有#positional_args方式,#*tuple_grp_nonkw_args方式有逻辑先后顺序的.

  最后,参数是不允许多次赋值的.

  举个例子说明,顺序赋值(positional_args)和列表赋值(*tuple_grp_nonkw_args)的逻辑先后关系:
代码如下:
#只有在顺序赋值,列表赋值在结果上存在罗辑先后关系
#正确的例子1
x = {3,4,5}
test(1,2,*x)
1 2 3 4 5
#正确的例子2
test(1,e=2,*x)
1 3 4 5 2

#错误的例子
test(1,b=2,*x)
Traceback (most recent call last):
File “stdin”, line 1, in module
TypeError: test() got multiple values for keyword argument ‘b’

#正确的例子1,处理等价于
a,b = 1,2 #顺序参数
c,d,e = x #列表参数
print a,b,c,d,e

#正确的例子2,处理等价于
a = 1 #顺序参数
e = 2 #关键字参数
b,c,d = x #列表参数

#错误的例子,处理等价于
a = 1 #顺序参数
b = 2 #关键字参数
b,c,d = x #列表参数
#这里由于b多次赋值导致异常,可见只有顺序参数和列表参数存在罗辑先后关系

函数声明区别

  理解了函数调用中不同类型参数得区别之后,再来理解函数声明中不同参数得区别就简单很多了.

1. 函数声明中的参数类型说明

展开全部内容