内置函数:
内置函数是python自带的函数,可以直接调用
print(),type(),len(),int(),float(),list(),tuple()
自定义函数:
自己在模块里的写的函数
def 函数名(): #定义函数
代码
def fun1():
return 'hello'
fun1() #调用函数。在程序中有返回值,但没有反馈
返回结果:
def fun2():
return 'hello'
print(fun2()) #调用函数。在程序中有返回值,有反馈
返回结果:
def fun3():
print('hello')
print(fun3()) #调用函数。None,因为函数没有返回值,返回None
返回结果:
def fun4():
print('hello')
fun4() #调用函数
返回结果:
函数的调用:
调用函数:执行函数定义里面的代码块
函数是一段封装的代码,定义之后不立刻执行,在用户调用时执行
先定义,后调用。调用函数时,函数名后面必须要有括号
fun() #调用函数
函数的参数:
函数定义时可以指定此函数要用到多少个参数。
这些参数只要写参数名,称之为形式参数,简称形参
def sum_data(a,b): #a,b形式参数,简称形参
return a+b
print(sum_data(100,125)) #225。简略写法。100,125实际参数,简称实参。调用带有参数的函数时,需要在小括号中,传递数据,称为 “实参”。
print(sum_data(100)) #报错。实参数量小于形参数量
print(sum_data(100,125,180)) #报错。实参数量大于形参数量
print(sum_data(a=100,b=125)) #225。完整写法
print(sum_data(b=100,a=125)) #225。完整写法,参数之间的顺序可以互换
print(sum_data(100,b=125)) #225。前面用简略写法,后面用完整写法
print(sum_data(a=100,125)) #报错。前面用完整写法,后面用简略写法,报错
所有参数都使用完整写法时,次序可以颠倒
一旦有参数使用完整写法,后面所有的参数都必须使用完整写法
函数的缺省值:
函数定义时,可以给每个形参设置一个缺省值
如果用户不输入实参,则函数使用缺省值;
如果用户输入实参,则函数使用用户输入的值
def sum_data1(a=120,b=130): #可以给函数的形参设置缺省值
return a+b
print(sum_data1(200,220)) #用户输入了全部参数,以用户输入的为准
print(sum_data1(100)) #用户输入了一个参数,相当于a使用用户输入的值,b使用缺省值
print(sum_data1(b=125)) #用户指定输入一个参数,则此参数使用用户输入的值
print(sum_data1(100,125,180)) #报错
函数的返回值:
函数的返回值表示调用函数时返回的值
函数的返回值写在return的后面
函数可以没有返回值,没有返回值时返回None
def fun5(): #没有返回值的函数
print('hello')
def fun6(): #有返回值的函数
return 'hello'
每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用结束了;如果函数中执行到了return也会结束函数
函数可以有多个return,但是第一个return之后是不可达语句。return之后,程序退出函数,后面的语句不再执行
def absolute_value(n):
if n>=0:
return n
return '这是一个不可达语句'
else:
return -n
print(absolute_value(6)) #6
函数可以return多个值,有多个返回值时,以元组形式返回
def sum_data2(a,b):
return a+b,a-b,a*b,a/b
print(sum_data2(200,120)) #(320, 80, 24000, 1.6666666666666667)
def sum_data3(a,b):
return [a+b,a-b,a*b,a/b]
print(sum_data3(200,120)) #[320, 80, 24000, 1.6666666666666667]
递归:
函数可以自己调用自己,称之为递归
计算某数的阶乘
def factorial(n):
if n== 1:
return 1
else:
return n *factorial(n-1)
print(factorial(10)) #3628800
可变长度参数:
可变长度参数*args可以传任意数量的参数给函数
返回时的写法是args,以元组形式返回
def fun7(*args):
return args
print(fun7(1,2,3,4,5,6)) #(1, 2, 3, 4, 5, 6)
如果有*args以外的参数,*args放在其他参数的后面
*:解包,少一层元组(将元组里的值分开展示)
def fun7_new(a,*args):
return a,*args #这种写法,会少一层元组,称之为解包
print(fun7_new(1,2,3,4,5,6)) #(1, 2, 3, 4, 5, 6)
def fun7_newnew(a,*args):
return a,args #这种写法,会多一层元组
print(funfun7_newnew(1,2,3,4,5,6)) #(1, (2, 3, 4, 5, 6))
关键字参数:
关键字参数**kwargs,可以将不定数量的参数以定义变量的方式传递给函数
传参时,必须是key = value的格式。返回时的写法是kwargs,以字典形式返回
def fun8(**kwargs):
return kwargs
print(fun8(name='德华',age=20)) #{'name': '德华', 'age': 20}