目录
一、掌握函数的定义及调用
函数是将一段实现功能的完整代码,使用函数名称进行封装,通过函数名称进行调用。
以此达到一次编写,多次调用的目的。
内置函数 | 自定义函数 | 函数调用 |
---|---|---|
输出函数print() 输入函数input() 列表定义函数list() |
def 函数名称(参数列表): 函数体 [return返回值列表] |
函数名(参数列表) |
def get_sum(num):
s=0
for i in range(1,num+1):
s+=i
print(f'1到{num}之间的累加和为:{s}')
# 函数的调用
get_sum(10) # 1-10之间的累加和
get_sum(100) # 1-100之间的累加和
get_sum(1000) # 1-1000之间的累加和
函数的使用
1.函数定义
- 使用关键字def
- 确定函数名称、参数名称、参数个数、编写函数体(用于实现函数功能的代码)
2.函数调用
- 通过函数名称进行调用函数
- 对函数的个个参数进行实际的赋值
3.函数执行
使用实际参数参与函数功能的实现
4.函数返回结果
函数执行结束后,如果使用return进行返回结果,则结果被返回到函数的调用处
二、掌握函数的参数传递
位置参数 | 关键字参数 | 默认值参数 |
---|---|---|
是指调用时的参数个数和顺序必须与定义的参数个数和顺序相同 | 是在函数调用时,使用‘形参名称=值’的方法进行传参,传递参数顺序可以与定义时参数的顺序不同 | 是在函数定义时,直接对形式参数进行赋值,在调用时如果该参数不传值,将使用默认值,如果该参数传值,则使用传递的值 |
a.位置参数
# 位置参数
def hb(name,age):
print('祝'+name+'生日快乐')
print(str(age)+'生日快乐')
# 调用
# hb('蟹老板') # TypeError: hb() missing 1 required positional argument: 'age'
# hb(18,'蟹老板') # TypeError: can only concatenate str (not "int") to str
#正确的调用方式
hb('蟹老板',18)
b.关键字参数
# 关键字参数
def hb(name,age):
print('祝'+name+'生日快乐')
print(str(age)+'岁生日快乐')
# 关键字传参
hb(age=18,name='蟹老板')
# hb(age=18,name1='蟹老板') # TypeError: hb() got an unexpected keyword argument 'name1'
hb('痞老板',age=18) # 正常执行,位置传参,也可以使用关键字传参
# hb(name='痞老板',18) # SyntaxError: positional argument follows keyword argument
# 位置传参在前,关键字传参在后
c.默认值参数
# 默认值参数
def hb(name='蟹老板',age=18):
print('祝'+name+'生日快乐')
print(str(age)+'岁生日快乐')
# 调用
hb() # 不用传参
hb('章鱼哥') # 位置传参
hb(age=18) # 关键字传参,name采用默认值
# hb(18) # TypeError: can only concatenate str (not "int") to str
def fun(a,b=20): # a 作为位置参数, b默认值参数
pass
# def fun2(a=20,b): # 报错了,语法错误, 当位置参数和默认值参数同时存在的时候,位置参数在后会报错。 SyntaxError: non-default argument follows default argument
pass
# 当位置参数和关键字参数同时存在的时候,应该遵循位置参数在前,默认值参数在后
d.可变参数
又分为个数可变的位置参数和个数可变的关键字参数两种,其中个数可变的位置参数是在参数前加一颗星(*para),para形式参数的名称,函数调用时可接收任意个数的实际参数,并收到一个元组中。个数可变的关键字参数是在参数前加两颗星(**para),在函数调用时可接收任意多个“参数=值”形式的参数,并收到一个字典中。
def fun(*para):
print(type(para))
for item in para:
print(item)
# 调用
fun(10,20,30,40)
fun(10)
fun(20,30)
fun([11,22,33,44]) # 实际上传递的是一个参数
# 在调用时,参数前加一颗星,会将列表进行解包
fun(*[11,22,33,44])
# 个数可变的关键字参数
def fun2(**kwpara):
print(type(kwpara))
for key,value in kwpara.items():
print(key,'-----',value)
# 调用
fun2(name='路人鱼',age=18,height=170)
d={'name':'路人鱼','age':18,'height':170}
fun2(d) # TypeError: fun2() takes 0 positional arguments but 1 was given
fun2(**d)
三、掌握函数的返回值
返回值return
- 如果函数的运行结果需要再其他函数中使用,那么这个函数就应该被定义为带返回值的函数。
- 函数的运行结果使用return关键字进行返回
- return可以出现在函数中的任意一个位置,用于结果函数。
- 返回值可以是一个值,或多个值,如果返回的值是多个,结果是一个元组类型。
def calc(a,b):
print(a+b)
calc(10,20)
print(calc(1,2)) # None
def calc2(a,b):
s=a+b
return s # 将s返回给函数的调用处去处理
print('-'*10)
get_s=calc2(1,2) # 存储到变量中
print(get_s)
get_s2=calc2(calc2(1,2),3) # 1+2+3 先去执行calc2(1,2)返回 结果为3,再去执行calc2(3,3)
print(get_s2)
# 返回值可以是多个
def get_sum(num):
s=0 # 累加和
odd_sum=0 # 奇数和
even_sum=0 # 偶数和
for i in range(1,num+1):
if i%2!=0: # 说明是奇数
odd_sum+=i
else:
even_sum+=i
s+=i
return odd_sum,even_sum,s # 三个值
result=get_sum(10)
print(type(result))
print(result)
# 解包赋值
a,b,c=get_sum(10) # 返回3个值,元组类型
print(a)
print(b)
print(c)
总结
- 函数定义:def+关键字+小括号+冒号+换行缩进+代码块定义一个函数
- 函数调用:函数名加()即可调用该函数
- 函数说明文档:函数内容的第一行可以用字符串进行函数说明
返回值return:程序中函数完成一件事情,给调用者的结果