函数

函数的返回值

函数可返回一个值 ,也可返回多个值,还可返回空。函数执行完毕也没有return语句时,自动return None

如果你已经把my_abs()的函数定义保存为helloworld.py文件了,那么,可以在该文件的当前目录下启动Python解释器,用from helloworld import my_abs来导入my_abs()函数,注意helloworld是文件名(不含.py扩展名)

 

如果想定义一个什么事也不做的空函数,可以用pass语句:

def nop():

  pass

pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。

 

函数返回多个值,其实是一个假象。它返回的值是一个tuple,在语法上tuple可以省略括号,而多个变量可以同时接收在一个tuple,按位置赋给对应的值。

 

函数的参数

函数的默认值可以简化函数的调用,设置默认参数时,需要注意:

1、必选参数在前,默认参数在后,否则会报错

2、函数有多个时,把变化大的参数放前面,变化小的参数放后面。

 

 大多数学生注册不需要提供年龄和城市,只提供必须的两个参数,只有与默认参数不符的学生才需要提供额外的信息,如上述的年龄

也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。比如调用enroll('Adam', 'M', city='Tianjin'),意思是,city参数用传进去的值,其他默认参数继续使用默认值。

 

默认参数必须指向不变对象!

下图中的L为可变对象,就导致了多次调用函数使用默认值时,出现了不想要的结果

 

 

可变参数

参数个数可变,但参数的调用顺序是依次进行的,属于位置参数,这种参数调用方式没有给参数定义参数名

允许传入0介后任意个参数,这些可变参数在函数调用时自动组装为一个tuple。

 

 上图中传入多个参数值时,需要组装list或者tuple才能进行传参

使用下面这种方式,就不需要组装,可以直接把参数放入函数后面的括号中

 

 

如果已经有一个list或者tuple,要调用一个可变参数怎么办?使用如下方法

 

 Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去

 

关键字参数

关键字参数允许传入0个或者任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

 

 关键字参数可以扩展函数的功能。比如,在person函数里,我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的数据,我们也能收到。

试想如果你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。

 

和可变参数类似,也可以先组装出一个dict,然后再把这个dict转换为关键字参数传进去:

 

 上述函数,在调用时,两种方式得出的结果相同

 

命名关键字参数

如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收cityjob作为关键字参数。

和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数

如果函数定义中已经有了一个可变参数,后面跟着命名关键字参数就不再需要一个特殊分隔符*

命名关键字参数必须传入参数名,否则会报错

 

 

参数组合

在python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。

5种参数一起使用时,顺序必须是:必选参数、默认参数、可变参数、命名关键字参数、关键字参数。

对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。

 虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。

posted @ 2023-03-28 10:16  阡陌芊芊  阅读(70)  评论(0)    收藏  举报