分享

函数与Lambda表达式

 印度阿三17 2021-02-07

函数参数定义

# 学习人员:贾其豪
# 开发时间:2021/1/31 14:05

#函数定义默认值参数
#函数定义时,给形参设置默认值,只有与默认值不符的时候才需要传递实参
def fun(a,b=10): #b称为默认值参数
    print(a,b)

#函数的调用
fun(100)
fun(20,30)

'''
个数可变的位置参数
定义函数时,可能无法事先确定传递的位置实参的个数时,使用可变的未知参数
使用*定义个数可变的位置形参
结果为一个元组
个数可变的关键字形参
定义函数时,无法事先确定传递的关键字实参的个数时,使用可变的关键字形参
使用**定义个数可变的关键字形参
结果为一个字典
'''

#个数可变的位置参数,只能定义一个
def fun(*args):
    print(args)

fun(10)
fun(12,23,34,45,)

#个数可变的关键字形参,只能定义一个
def fun1(**args):
    print(args)

fun1(a=12)
fun1(b=23,c=34,d=45)

'''在一个函数的定义过程中,既有个数可变的关键字形参,又有个数可变的位置形参,
要求,个数可变的位置形参放在个数可变的关键字形参前面'''
def fun2(*args1,**args2):
    pass

'''def fun3(**args1,*args2): #报错
    pass'''

函数参数传递

# 学习人员:贾其豪
# 开发时间:2021/1/31 13:23
'''位置实参:根据形参对应的位置进行实参传递
关键字实参:根据形参名称进行实参传递'''
def calc(a,b): #a,b称为形式参数,简称形参,形参的位置是在函数的定义处
    c=a b
    return c
#位置实参
result=calc(10,20) #10,20称为实际参数,简称实参,实参的位置是在函数的调用处
print(result)
#关键字实参
result=calc(b=10,a=20) #=左侧的变量名称叫做关键字
print(result)

函数参数总结

# 学习人员:贾其豪
# 开发时间:2021/1/31 14:27
def fun(a,b,c):
    print('a=',a)
    print('b=',b)
    print('c=',c)

#函数的调用
fun(10,20,30)
lst=[11,22,33]
#fun(lst) #报错
fun(*lst) #在函数调用时,将列表中的每个元素都转化为位置实参传入

fun(a=100,b=200,c=300)
dic={'a':100,'b':200,'c':300}
#fun(dic) #报错
fun(**dic) #在函数调用时,将字典中的键值对转换为关键字实参传入

def fun1(a,b,*,c,d):#在*之后只能用关键字传参
    print('a=', a)
    print('b=', b)
    print('c=', c)
    print('d=', d)

fun1(12,23,d=22,c=21)

#函数定义是的形参的顺序问题
def fun2(a,b,*,c,d,**args):
    pass
def fun3(*args,**args2):
    pass
def fun4(a,b=10,*args1,**args2):
    pass

函数的创建和调用

# 学习人员:贾其豪
# 开发时间:2021/1/31 13:08
'''函数就是执行特定功能的一段代码
优点:
复用代码
隐藏实现细节
提高可维护性
提高可读性便于调试'''

'''函数的创建:def 函数名([输入参数])
                 函数体
                 [return XXX]'''
def calc(a,b):
    c=a b
    return c
result=calc(10,20)
print(result)

函数参数传递内存变化

# 学习人员:贾其豪
# 开发时间:2021/1/31 13:35
def fun(arg1,arg2):
    print('arg1',arg1)
    print('arg2',arg2)
    arg1=100
    arg2.append(10)
    print('arg1', arg1)
    print('arg2', arg2)

n1=11
n2=[22,33,44]
print('n1',n1)
print('n2',n2)
fun(n1,n2)
print('n1',n1)
print('n2',n2)
#在函数调用过程中,进行参数的传递
#如果是不可变对象,在函数体的修改不会影响实参的值
#如果是可变对象,在函数体的修改会影响到实参的值

变量的作用域

# 学习人员:贾其豪
# 开发时间:2021/1/31 14:49
'''
变量的作用域
程序代码能访问该变量的区域
根据变量的有效范围可分为:
局部变量:在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会变成全局变量
全局变量:函数体外定义的变量,可作用于函数内外
'''
def fun(a,b):
    c=a b #a,b,c都相当于是局部变量
    print(c)

#print(c)  #a,c超出了起作用的范围(作用域)
#print(a)

name='杨老师' #name的作用范围在函数内外都可以起作用,是全局变量
print(name)
def fun2():
    print(name)

fun2()

def fun3():
    global age #age的作用范围是全局
    age=20
    print(age)

fun3()
print(age)

函数的返回值

# 学习人员:贾其豪
# 开发时间:2021/1/31 13:54
def fun(num):
    odd=[]
    even=[]
    for i in num:
        if i%2:
            odd.append(i)
        else:
            even.append(i)
    return odd,even

#函数的调用
lst=[10,29,34,23,44,53,55]
print(fun(lst)) #输出多个值会以元组类型输出

'''
函数的返回值
1.如果函数没有返回值(函数执行完毕后,不需要给调用处提供数据),return可以省略不写
2.函数的返回值,如果是1个,直接返回类型
3.函数的返回值,如果是多个,返回的结果是元组
'''

递归函数

# 学习人员:贾其豪
# 开发时间:2021/1/31 15:02
'''
什么是递归函数:如果在一个函数的函数体内调用了该函数本身,这个函数就称为递归函数
递归的组成部分:递归调用与递归终止条件
递归的调用过程:每递归调用一次函数,都会在栈内存分配一个栈帧
            每执行完一次函数,都会释放相应的空间
递归的优缺点:缺点:占用内存多,效率低下
           优点:思路和代码简单
'''
#使用递归计算阶乘
def fac(n):
    if n==1:
        return 1
    else:
        res=n*fac(n-1)
        return res
print(fac(6))


#斐波那契数列
def fib(n):
    if n==1 or n==2:
        return 1
    else:
        res=fib(n-1) fib(n-2)
        return res

print(fib(6))

#输出前六位上的数字
for i in range(1,7):
    print(fib(i))
来源:https://www./content-4-849851.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多