【Python】初学自用笔记 第五篇 函数

调用函数

  • python有很多内置函数,我们可以直接调用,详见python官方文档:内置函数 — Python 3.11.2 文档,也可以在命令行中输入help(函数名)来查看该函数的使用法则。

  • 函数名的本质就是指向一个函数对象的引用,完全可以用赋值的方法为原函数起一个别名:

a=abs//给abs函数起一个别名a
print(a(-12))//使用a来代替abs实现其功能
'''
12
'''

定义函数

定义函数的格式

def my_first_hanshu(x,y,z):
    if x==8 and y==8 and z==8:
        print('Crush')
    else:
        print('Pity')
    return
#以下为试用自定义的函数1
my_first_hanshu(8,8,8)
'''
Crush
'''

总之,定义语句要以def开头,接下来就是函数名和参数列表,参数不需要声明数据类型,注意要使用return语句。

空函数

若要定义一个功能暂时没想好的函数,可以用pass语句:

def non():
    pass

这样让pass先代替函数体,使得该函数被调用时,程序可以正常运行;

此外,pass语句还可以用于条件语句和循环语句中。

参数检查

对于自定义函数,当传入不恰当的参数时,系统不会像内置函数一样返回出错信息,所以要在自定义的函数体的开端使用内置函数isinstance()和错误提示语句raise,实现数据类型的检查:

def my_first_hanshu(x,y,z):
    if not isinstance(x,int) and not isinstance(y,int) and not isinstance(z,int):
        raise TypeError('bad operand type')
    if x==8 and y==8 and z==8:
        print('Crush')
    else:
        print('Pity')

返回多个值

函数需要返回多个值时,只要把值都写在同一个return语句后即可,会返回一个元组tuple,里面包含了多个值,可以将tuple通过一个赋值号赋值给多个变量,系统会按位置一一赋值。

import math
def ma(x):
    return math.ceil(x),math.floor(x)
a,b=ma(1.123)
print(a,b)
'''
2 1
'''

函数的参数

位置参数

def power(a,b):
    s=1
    while b>0:
        b-=1
        s*=a
    return s

上面的power函数中有两个位置参数a和b,调用函数时,传入的两个值按位置顺序依次赋值给参数a和b。

默认参数

上面定义了新的power函数后,原来power函数使用一个参数计算平方的功能就用不了了,这时可以修改一下原定义,直接在参数列表中给b赋值为2,这样如果调用函数时只写了一个参数,那就默认参数b为2:

def power(a,b=2):
    s=1
    while b>0:
        b-=1
        s*=a
    return s
  • 需要注意的是,默认参数必须放在参数列表的后端,可以有多个默认参数;

  • 默认参数必须指向不变对象,比如列表也可以作为默认参数,但每次调用后,若对列表进行了增减删改,则其在下一次调用时就变化了。

可变参数

可变参数,即传入的参数个数是可变的,可以是0个或任意个。

在不使用可变参数时,若需要传入不定个数的值,则函数参数应为列表或元组:

def calc(numbers):
    sum=0
    for n in numbers:
        sum+=n
    return sum
calc([1,2,3,4,5,6,7,8,9])
calc((9,8,7,6,5,4,3,2,1))

若使用可变参数,只需在参数前加上*:

def calc(*numbers):
    sum=0
    for n in numbers:
        sum+=n
    return sum
calc(1,2,3,4,5,6,7,8,9)#不需要数据写成list或tuple
list=[11,22,33,44,55]
calc(*list)#在列表名前加*,就可以将列表的所有元素作为可变参数传进去

关键字参数

  • 可变参数允许传入任意个参数,这些参数在函数调用时自动组装为一个元组;

  • 关键字参数则允许传入任意个含参数名的参数,这些关键字参数在调用时自动组装为一个字典:

def person(name,age,**other):#前两个参数为必选参数;other为关键字参数,调用时可以不传入
    print('name:',name,'age:',age,'other:',other)
#可以只传入必选参数:
person('Tom',18)
'''
name:Tom age:18 other:{}
'''
#可以再传入一个关键字参数:
person('Bob',19,homeland='USA')
'''
name:Bob age:19 other:{'homeland':'USA'}
'''
#可以传入多个关键字参数:
person('Eric',18,homeland='China',gender='M')
'''
name:Eric age:18 other:{'homeland':'China','gender':'M'}
'''
  • 同样,若有给定一个字典dict,可以在调用person函数时,在关键字参数的位置上写**dict,就会将dict的内容放入other中。

命名关键字参数

  • 若单独使用一个关键字参数标志**other,则可传入的关键字参数的数量和类型没有限制;

  • 若要限制关键字参数的名字,就可以用命名关键字参数,使用特殊分隔符*,其后的参数被视为命名关键字参数:

def person(name,age,*,homeland,gender):
    print(name,age,homeland,gender)
#调用如下:
person('Jack',23,homeland='UK',gender='M')
'''
Jack 23 UK M
'''
  • 命名关键字参数可以有默认值,从而简化调用:

def person(name,age,*,homeland='China',gender):
    print(name,age,homeland,gender)
#调用如下:
person('Tom',11,gender='M')
'''
Tom 11 China M
'''

参数组合

在python中定义函数,参数定义的顺序必须是:必选参数、默认参数、可变参数、关键字参数和命名关键字参数.

递归函数

函数自己调用自己就是递归。

典例:汉诺塔问题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值