python-函数
函数的定义
没有返回值:
def f(): print("Hello World") f() #调用函数
有1个返回值
def f(a,b): c=a+b return c #return后面的代码不在执行,默认返回None i=f(5,7) print(i)
有多个返回值
def f(a,b): c=a+b d=a-b return c,d i,i1=f(5,7) #返回值的个数和接收值的变量要相等,但可以用一个变量返回值是元组,看下面的例子 print(i,i1)
def f(a,b): c=a+b d=a-b return c,d i=f(5,7) print(i)
函数的注释
def f(a,b): """ 两个数值相加的函数 :param a:float类型,第一个数值 :param b:float类型,第二个数值 :return:相加的和 """ c=a+b d=a-b return c,d
内存分配
#将代码加载到内存中的代码区 def f(a,b): c=a+b return c i=10 #调用函数时,会开辟一块空间,存储函数内部变量 num=f(i,20) #函数执行后,该空间立即释放 print(num)
函数内存分布
""" 函数内存分布 """ def func01(p1,p2): p1=100 p2[0]=200 data01=10 data02=[20,55] func01(data01,data02) print(data01) print(data02)
视频教程:https://www.bilibili.com/video/BV1v6W8ehES6/?vd_source=189e32a0967ed45997385a775f5fc6a1
作用:不用return也能返回修改的结果
参数
位置形参和默认形参
""" 参数 形参 位置形参:实参必填(数量对应) 默认形参:实参可选(实参可以不写采用默认值) """ def func01(p1,p2,p3):#位置形参 print(p1) print(p2) print(p3) def func02(p1,p2=20,p3=30):#默认形参 #默认形参必须在最右边 #如果实参给了就取给的实参,如果没给就取默认值 print(p1) print(p2) print(p3) func01(1,2,3) #位置实参:按照位置对应 func02(100,p3=200) #关键字实参:按照名字与默认形参对应 #如果实参不给名字就按照位置对应
练习
""" 练习: 定义函数,根据小时、分钟、秒,计算总秒数 调用:提供小时、分钟、秒 调用:提供分钟、秒 调用:提供小时、秒 调用:提供分钟 """ def computing_time(hour=0, minute=0, second=0): times=hour*3600+minute*60+second return times print(computing_time(hour=1,second=10))
星号元组形参
def func01(*p1): #星号元组形参:将多个实参合为一个元组(根据位置合并) print(p1) func01() #实参:空元组 func01(1) func01(1,2)
练习:数值累乘
""" 数值累乘 """ def accumulative_multiplication(*p): total = 1 for i in p: total *= i print(total) accumulative_multiplication(10,24,4,6,8)
双星字典形参
def func02(**p1): #双星字典形参:将多个实参合为一个字典 print(p1) func02(p1=1,p2=2)
序列实参
def func01(p1,p2,p3): print(p1) print(p2) print(p3) list01 = [1,2,3] tuole01=(10,20,30) func01(*list01) #序列实参:单星将序列拆成实参 func01(*tuole01)
字典实参
def func01(p1,p2,p3): print(p1) print(p2) print(p3) dict01={"p1":100,"p2":200,"p3":300} func01(**dict01) #字典实参:双星将字典拆成实参
命名关键字形参
def func01(p1=10,*args,p2=20): print(p1) print(args) print(p2) func01(1,2,p2=3) #命名关键字形参p2:p2必须是关键字实参,如果不给出关键字,就归属于args元组
def func01(p1=10,*,p2=20): #*起修饰作用,表示后面的参数必须写出关键字 print(p1) print(p2) func01(1,p2=3)
快捷键
CTRL+P 看参数信息
CTRL+Q 看函数的注释
CTRL+鼠标左键 转到函数的定义
练习
def func01(*p): #打印所有商品信息 for item in p: print("商品编号:",item["id"],",","商品名称:",item["name"],",","商品单价:",item["price"],sep="") def func02(*p):#获取单价大于500的商品名称与单价 for item in p: if item["price"]>500: print("商品名称:", item["name"], ",", "商品单价:", item["price"], sep="") def func03(*p):#查找最贵的商品(使用自定义算法,不使用内置函数) price=0 for item in p: if item["price"]>price: price=item["price"] print(price) def func04(p):#根据单价对商品列表降序排列 for i in range(len(p)-1): for j in range(i+1,len(p)): if p[i]["price"]<p[j]["price"]: p[i]["price"],p[j]["price"]=p[j]["price"],p[i]["price"] return p list01=[{"id":1001,"name":"屠龙刀","price":10000},{"id":1002,"name":"倚天剑","price":10000},{"id":1003,"name":"金箍棒","price":52100},{"id":1004,"name":"口罩","price":20},{"id":1005,"name":"酒精","price":30}] #func01(*list01) #func02(*list01) #func03(*list01) lb=func04(list01) print(lb)
函数视频教程:https://v.qq.com/x/page/f08581c4ax2.html
讲述了 不定长参数,默认值,值传递和引用传递
函数的描述视频教程: https://v.qq.com/x/page/u0859scad01.html
help(print) 打印某函数的描述
匿名函数
匿名函数就是没有名字的函数,它主要应用在需要一个函数、但是后面又不会在需要,更不想费神去命名这个函数的场合。通常情况下,这样的函数只使用一次
匿名函数的语法格式:
name = lambda [arg1 [,arg2,...,argn]]:expression
lambda 匿名函数关键字
name:函数名,可以不要
[arg1 [,arg2,...,argn]]:可选参数,用于指定要传递的参数列表,多个参数间使用逗号“,”分隔
expression:必选参数,用于指定一个实现具体功能的表达式。如果有参数,那么在该表达式中将应用这些参数
注意:不允许换行,一行必须写完
def calc(n): return n**n i=calc(3) print(i) #换成匿名函数 calc1=lambda n:n**n i=calc1(4) print(i)
s = [{'name': 'li', 'age': 24},{'name': 'he', 'age': 45} ] b = max(s, key=lambda x: x['age']) print(b) #{'name': 'he', 'age': 45}