您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python 带星号(* 或 **)的函数参数详解

51自学网 2021-10-30 22:55:30
  python
这篇教程Python 带星号(* 或 **)的函数参数详解写得很实用,希望能帮到您。

1. 带默认值的参数

在了解带星号(*)的参数之前,先看下带有默认值的参数,函数定义如下:

>> def defaultValueArgs(common, defaultStr = "default", defaultNum = 0):    print("Common args", common)    print("Default String", defaultStr)    print("Default Number", defaultNum)  

(1)带默认值的参数(defaultStr、defaultNum)不传参时的调用:

>> defaultValueArgs("Test") Common args TestDefault String defaultDefault Number 0 

(2)带默认值的参数(defaultStr、defaultNum),调用的时候可以直接传参(如下例中的defaultStr),也可以写成“argsName = value”的形式(如下例中的defaultNum):

>> defaultValueArgs("Test", "Str", defaultNum = 1) Common args TestDefault String StrDefault Number 1 >> defaultValueArgs("Test", defaultNum = 1) Common args TestDefault String defaultDefault Number 1

注意:在函数定义时,第一个带有默认值的参数之后的所有参数都必须有默认值,否则,运行时报错。

>> def defaultValueArgs(common, defaultStr = "default", defaultNum):    print("Common args", common)    print("Default String", defaultStr)    print("Default Number", defaultNum)    SyntaxError: non-default argument follows default argument 

2.带一个星号(*)的函数参数

带一个参数的函数定义如下:

>> def singalStar(common, *rest):  print("Common args: ", common)    print("Rest args: ", rest)

(1)带星号(*)的参数不传参:

>> singalStar("hello") Common args: helloRest args: ()

带星号(*)的参数不传参时默认是一个空的元组。

(2)带星号(*)的参数传入多个值时(个数大于或等于函数定义时的参数个数):

>> singalStar("hello", "world", 000) Common args: helloRest args: ('world', 0)

不难看出,第二种方式中,星号参数把接收的多个参数合并为一个元组。

(3)当我们直接传元组类型的值给星号参数时:

>> singalStar("hello", ("world", 000)) Common args: helloRest args: (('world', 0),)

此时,传递的元组值作为了星号参数的元组中的一个元素。

(4)如果我们想把元组作为星号参数的参数值,在元组值前加上" * " 即可。

>> singalStar("hello", *("world", 000))Common args: helloRest args: ('world', 0)>> singalStar("hello", *("world", 000), "123")Common args: helloRest args: ('world', 0, '123')

3.带两个星号(**)的函数参数

带两个星号(**)的函数定义如下:

>> def doubleStar(common, **double):    print("Common args: ", common)    print("Double args: ", double)

(1)双星号(**)参数不传值:

>> doubleStar("hello") Common args: helloDouble args: {}

带双星号(**)的参数不传值时默认是一个空的字典。

(2)双星号(**)参数传入多个参数时(个数大于或等于函数定义时的参数个数):

>> doubleStar("hello", "Test", 24)TypeError: doubleStar() takes 1 positional argument but 3 were given>> doubleStar("hello", x = "Test", y = 24)Common args: helloDouble args: {'x': 'Test', 'y': 24}

可以看到,双星号参数把接收的多个参数合并为一个字典,但与单星号不同的是,此时必须采用默认值传参的 “ args = value ” 的方式,“ = ” 前的字段成了字典的键,“ = ” 后的字段成了字典的值。

(3)如果想把字典作为星号参数的参数值,那么该怎么办呢?与单星号参数类似,在字典值前加上 “ ** ”,同时其后不能添加任何值。

>> doubleStar("hello", {"name": "Test", "age": 24})TypeError: doubleStar() takes 1 positional argument but 2 were given>> doubleStar("hello", **{"name": "Test", "age": 24}, {"name": "Test2", "age": 24})SyntaxError: positional argument follows keyword argument unpacking>> doubleStar("hello", **{"name": "Test", "age": 24}, **{"name": "Test2", "age": 24})TypeError: doubleStar() got multiple values for keyword argument 'name'>> doubleStar("hello", **{"name": "Test", "age": 24})Common args: helloDouble args: {'name': 'Test', 'age': 24}

4、在有些情况下,单星号函数参数和双星号函数参数是一起使用的:

def singalAndDoubleStar(common, *single, **double):  print("Common args: ", common)  print("Single args: ", single)  print("Double args: ", double)singalAndDoubleStar("hello")# Common args: hello# Single args: ()# Double args: {}singalAndDoubleStar("hello", "world", 000)# Common args: hello# Single args: ('world', 0)# Double args: {}singalAndDoubleStar("hello", "world", 000, {"name": "Test", "age": 24})# Common args: hello# Single args: ('world', 0, {'name': 'Test', 'age': 24})# Double args: {}singalAndDoubleStar("hello", "world", 000, **{"name": "Test", "age": 24})# Common args: hello# Single args: ('world', 0)# Double args: {'name': 'Test', 'age': 24}singalAndDoubleStar("hello", ("world", 000), {"name": "Test", "age": 24})# Common args: hello# Single args: (('world', 0), {'name': 'Test', 'age': 24})# Double args: {}singalAndDoubleStar("hello", *("world", 000), {"name": "Test", "age": 24}) # Common args: hello# Single args: ('world', 0, {'name': 'Test', 'age': 24})# Double args: {}singalAndDoubleStar("hello", *("world", 000), **{"name": "Test", "age": 24})# Common args: hello# Single args: ('world', 0)# Double args: {'name': 'Test', 'age': 24}

到此这篇关于Python 带星号(* 或 **)的函数参数详解的文章就介绍到这了,更多相关Python 带星号参数内容请搜索51zixue.net以前的文章或继续浏览下面的相关文章希望大家以后多多支持51zixue.net!


python解决OpenCV在读取显示图片的时候闪退的问题
如何用Python和JS实现的Web SSH工具
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。