Python基础(4)-函数

函数的定义

在Python中定义函数要使用def 语句,语句如下:

def 函数名(参数列表):

然后在缩进块中编写函数体,返回值用return

def sum(n):
    sum=0
    m=n
    while n>0:
        sum=sum+n
        n=n-1
    print('1~%d相加的结果为:%d'% (m,sum))
sum(10)

执行结果如下:

1~10相加的结果为:55

空函数,可以使用pass语句

def nop():
    pass

pass语句什么都不做,可以当作占位符,比如还没想好怎么实现函数,可以先用pass,让代码正确运行。

参数检查

当调用内置函数时,如果参数个数不对,则解释器会自动检查出来,抛出TypeError 但是如果参数类型不对,则检查不出来。
所以为了我们写的程序可以检查出参数类型错误,使用内置函数isinstance()

def sum(n):
    if not isinstance(n,(int,float)):
        raise TypeError('bad operand type')
    sum=0
    m=n
    while n>0:
        sum=sum+n
        n=n-1
    print('1~%d相加的结果为:%d'% (m,sum))
sum('a')

执行结果为:
这里写图片描述

返回多个值

在Python中可以返回多个值,如下:

def sum(n):
    sum=0
    m=n
    while n>0:
        sum=sum+n
        n=n-1
    return n, sum
print('1~%d相加的结果为:%d'% sum(100))

执行之后,在交互界面执行sum(100)
这里写图片描述
所以,返回多个值其实返回的是一个tuple

数据类型转换

int('123')  #转换为整数
float(‘12.4’)#转换为浮点数
str('abc') #转换为str字符串类型
bool(1)  #输出为True

参数

默认参数

有时候,我们传入不同个数的参数,此时就需要用到默认参数。
注意: 默认参数必须放在最后,因为若放在前面,调用时候,不知道实参放入哪个形参
默认参数列表应该从变化大的参数到变化小的参数。
默认参数应该指向不变对象

可变参数

在函数定义的参数前加上* 则表示使用可变参数,可变参数将函数调用时的参数自动组装成一个tuple
当不适用可变参数时,实例如下:

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

执行情况如下:
这里写图片描述
调用该函数时,需要先组装出一个list或者tuple,而将参数改为可变参数时,我们可以将调用简化为:

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

这里写图片描述
所以不需要先构造一个list,或者tuple。
当需要将一个list或者tuple作为实参,则需要在实参前面加上*
这里写图片描述

关键字参数

关键字参数在函数内部自动组装成一个dict
关键字参数允许传入0或者任意个含参数名的参数,比如:

def classmates(name,sex,**information):
    print('name:',name,'sex:',sex,'other:',information)

这里写图片描述
从执行结果可以看到,关键字的key不需要加 ,而value若为字符则需要加上关键字参数将传入的实参自动组装成了一个dict,其可以传入任意多的参数,当没有参数时,其为一个空dict。
将现有的一个dict作为实参,实例如下:
代码和上面一样,我们只新建一个dict,然后调用函数。
这里写图片描述
所以只需要在调用的时候,将dict名前面加上两个* 就ok了。

命名关键字参数

对于关键字参数,可以传入任何关键字参数,但是如果我们需要限制关键字参数的名字,则可以用命名关键字参数,进行限制。比如,如上实例中,只接受agecity 这两个关键字参数,则可以定义函数如下:
1. 当参数列表中没有可变参数时

def classmates(name,sex,*,age,city):
    print('name:',name,'sex:',sex,'other:',information)

命名关键字需要一个分隔符* 在其后面的参数就是命名关键字参数,关键字实参只能包含后面的参数。
调用执行结果如下:
这里写图片描述
2. 当参数列表中有可变参数时

def classmates(name,sex,*grade,age,city):
    print('name:',name,'sex:',sex,'other:','age:',age,'city:',city)

也就是说不需要额外添加一个独立的*
调用执行结果如下:
这里写图片描述
从上面两种情况的执行结果可以看出,当有不是命名关键字中的参数时,会导致出错,而当参数缺少关键字参数时也会导致出错,所以,使用命名关键字,限制要比关键字参数大得多。

总结

在Python中,对于必选参数,默认参数,可变参数,关键字参数和命名关键字参数,可以组合使用,但是顺序必须是:必选参数-默认参数-可变参数-命名关键字参数-关键字参数
默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值