函数

调用函数

传入参数量和参数类型不对时,都会返回TypeError错误

定义函数

以def开头,依次写出函数名,括号,括号中的参数和冒号,在缩进块中写函数体,函数的返回值用return返回

如果没有return语句,函数就会返回none

空函数

想定义一个什么也不做的空函数,可以用pass语句。pass可以用来做占位符,让代码先运行起来

参数检查

自定义函数的参数检查,当参数个数不对时,会返回类型错误,但当类型不对时,不会返回,这时可在函数内部定义,对参数类型进行检查,使用isinstance()函数:is instance(x,(int,float))

返回多个值

使用return x,y。但其实函数返回的也只是单一值,返回值是一个tuple。

函数的参数

位置参数

对于power(x)函数,参数x就是一个位置参数,当我们调用函数时,必须传入有且仅有的一个参数x。当有多个位置参数时,传入的多个值按照位置顺序依次赋给参数

默认参数

可以对一个参数设置默认值,只要这个值不变化,调用时就不用传入这个参数。使用时需注意,必须参数在前,默认参数在后。当有多个默认参数时,调用时,既可以按顺序提供调用参数,也可以不按顺序提供部分默认参数,但不按顺序调用时,需要写上参数名字。

有一个情况需要注意,函数在定义的时候,默认参数就被计算出来了,即为[],默认参数也是一个变量,指向对象[],每次调用,若改变了默认参数的内容,则下次调用时,默认参数的值就被改变了。所以定义默认参数必须注意一点,默认参数必须指向不变对象。所以可让空的指向none,设置str、none这样的不变对象,是因为这样的对象一旦创建,对象内部的数据就不能更改,这样就减少了由于修改数据产生的错误,此外,由于对象不变,多任务环境下同时读取对象不需要加锁

可变参数

定义可变参数时,在参数名前加一个*号。当在list或者tuple前面加一个*时,也可把他们中的元素变成可变参数传进去。

可变参数允许你传入0个或者任意个参数,这些可变参数在调用时自动组装成一个tuple

关键字参数

形式为**函数名。允许你传入0个或者任意个含参数名的参数,这些关键词参数在函数内部自动组装成一个dict。关键字参数可以扩展函数的功能。在使用时,也可以先组装一个dict,然后把该dict转换为关键字参数传进去

命名关键字参数

如果要限制关键字参数的名字,就可以用命名关键字参数,在定义参数时,需要一个*分隔符,*后面的参数为命名关键字参数。如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个*了。命名关键字参数使用时必须传入参数名,否则将报错

参数组合

这些参数可以任意组合,但参数定义的顺序必须是必选参数、默认参数、可变参数、关键字参数、命名关键字参数

小结

Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。

默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!

要注意定义可变参数和关键字参数的语法:

*args是可变参数,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。

以及调用函数时如何传入可变参数和关键字参数的语法:

可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))

关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})

使用*args**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。

定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值