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)    打印某函数的描述

 

偏函数视频教程:偏函数1       偏函数2   

 

 

匿名函数

匿名函数就是没有名字的函数,它主要应用在需要一个函数、但是后面又不会在需要,更不想费神去命名这个函数的场合。通常情况下,这样的函数只使用一次

匿名函数的语法格式:

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}

 

 

 

 

 

 

  

 

posted @ 2019-04-07 19:20  天子骄龙  阅读(141)  评论(0编辑  收藏  举报