python笔记(三)函数的参数

来源:互联网 发布:csgo 知乎 编辑:程序博客网 时间:2024/06/03 14:16

python本身官方已经提供了很多函数,向常见的数学运算,进制转换,打印图像的操作python都已经内置了相应的API,我们使用的时候只要调API就好了,当然python更广为人知的特点是广而强大的第三方库支持。python内置了一个help()函数。

只需要通过输入要使用的函数名字,help(fun_name),就可以查询到fun_name函数的用法。但一般是对内置的函数才有用。

python其实可以说是面向API编程,这就需要了解下常见的API调用出错的情况。

  • 参数数量不对
>>> abs(1, 2)Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: abs() takes exactly one argument (2 given)

当参数的数量不对的时候
python会在最后明确指出这个函数最有多少个参数,同时用户输出(given)了几个

  • 参数类型错误
>>> abs('a')Traceback (most recent call last):  File "<stdin>", line 1, in <module>TypeError: bad operand type for abs(): 'str'

当输入的参数类型错误的时候
python会在最后指出函数中错误的参数类型是字符串

当同时出现错误时,会优先指出参数数量错误

内置函数中有许多类型转换函数,要注意是函数不是转换符.
比如:

int('123')#字符串转intfloat('11.34')#字符串转floatstr(100)#int转字符串bool(1)#int转bool,结果为Truehex(10)#10进制int转16进制

定义函数

python中定义一个函数
一般按照如下格式:

def my_add(x,y):    return x+y#def fun_name(param...):    function_body    return xx

返回空结果可以使用none 或者直接return。python中也有pass关键字作为空语句,pass不做任何事情

参数检查python无法为我们自动进行参数类型检查。需要我们自己去实现
可以使用内置函数isinstance()来实现检查

def my_add(x,y):    if not isinstance(x,(int,float))        raise TypeError('bad operand type')    elf not isinstance(x,(int,float))        raise TypeError('bad operand type')    else return x+y#只允许int和float类型

多个返回值,python的函数可以返回多个值,以元组tuple来返回。

函数的参数

python中的函数参数分为5种,必须按照声明顺序依次为:必选参数,默认参数,可变参数,命名关键字参数和关键字参数

①必选参数:就是调用时必须传入的参数这个不难理解

def my_add(x,y):    return x+y

②默认参数:就是在定义函数时,我们可以在参数中填入默认值,这样当调用函数时,如果没有为默认参数传入参数,则python会使用默认值

def my_add(x,y=1):    return x+y#my_add(1)#输出2

③可变参数:如果想要把函数设计成可以传入任意数量参数,可以在变量前面加一个*
比如:

def add_array(*nums):    sum=0    for n in nums:        sum = sum +n    return sum

在调用含有可变参数的函数时,在调用时把输入参数组装为一个tuple类型,

④关键字参数:前面说到可变参数,会在函数内部组装成一个tuple类型,如果我们希望组装成一个字典(dict)类型,可以使用关键字变量,在参数前面加入**
使用如下:

def add_phone_number(**number):    return numberadd_phone_number(xiaoming='156222xxxxx')#输出{'xiaoming':'156222xxxxx'}

⑤命名关键字:关键字参数可以输入任意数量的关键字参数,但如果我们希望指导传入的key有哪些,就需要在函数内部查询
比如:

def add_phone_number(**number):     if 'xiaoming' in number:        pass     if 'xiaohong' in number:        pass

总的来说
*number是可变参数,number接收的是一个tuple.
**number是关键字参数,number接收的是一个dict.
但python中习惯上对两者是有对应的命名的,*args可变参数,**kw关键字参数

参考资料:廖雪峰python教程

原创粉丝点击