美文网首页
千锋的第八天

千锋的第八天

作者: 堪怜咏絮才 | 来源:发表于2018-07-25 21:27 被阅读136次

    一、函数的返回值

    函数的返回值:
    1.函数返回给调用者的值
    2.return后面的表达式的值
    3.函数调用表达式的值
    函数有没有返回值主要是看有没有return,如果有return,返回的就是return后面的值;如果没有return,函数返回的是None.
    函数的调用过程:-------------重点、重点、重点
    1.先回到函数声明的位置
    2.用实参给形参赋值
    3.执行函数体
    4.将返回值返回给函数调用表达式
    5.回到调用函数的位置

    函数的结束:
    1.函数体自然执行到结束
    2.遇到return,直接结束,返回return后面的值

    练习:写一个函数,求1+2+3+.....,和不能大于10000

    def my_sum():
        sum1 = 0
        number = 1
        while True:
            if sum1 + number >= 10000:
                return sum1,number-1
            sum1 += number
            number += 1
    print(my_sum())
    结果:(9870, 140)
    

    二、作用域

    作用域:一个变量可以使用的范围,就是这个变量的作用域。(函数和类可以影响变量的作用域)
    全局变量:从声明开始到文件结束都可以使用的变量
    局部变量:在函数(类)中声明的变量就是局部变量。作用域是从声明开始到文件结束。
    如果要让一个局部变量变成全局变量,可以用global语句
    格式:
    global 变量
    变量 = 新值
    在声明函数的时候,如果函数里面在声明新的函数,可能用到nonlocal,不过这样使用的频率很低。

    练习:声明一个变量,统计一个函数调用的次数

    count = 0
    def function():
        global count
        count += 1
    function()
    print(count)
    function()
    print(count)
    function()
    print(count)
    function()
    print(count)
    结果:1
    2
    3
    4
    

    三、匿名函数

    匿名函数:本质还是函数,以另外一种简单的方式来声明的
    匿名函数的声明:
    函数名 = lambda 参数列表:返回值

    写一个函数,计算两个数的和

    me = lambda x,y:x+y
    print(me(10,20))
    结果:30
    

    注意:匿名函数本身就包含了一个返回值

    四、函数作为变量

    1.将函数作为参数

    def my_sum(*number):
        sum1 = 0
        for item in number:
            sum1 += item
        return sum1
    def my_mul(*numbers):
        sum1 = 1
        for item in numbers:
            sum1 *= item
        return sum1
    
    def operation(method,x,y):
        return method(x,y)
    
    result1 = operation(my_sum,10,20)
    result2 = operation(my_mul,10,20)
    result3 = operation(lambda x,y:x<y,10,20)
    result4 = operation(lambda x,y:x if x > y else y,10,20)
    print(result1,result2,result3,result4)
    结果:30 200 True 20
    

    python中的三目运算符
    值1 if 表达式 else 值2----->判断表达式是否为True,为True整个表达式的结果为'值1',否则表达式的结果为'值2'

    五、递归函数

    1、什么是递归
    递归函数:在函数的函数体中调用函数本身
    理论上循环能做的事情,递归都可以做
    对递归的要求:能不用就不用
    函数调用的过程是一个压栈的过程(每调用一次函数,系统都要为其分配内存空间,
    用来存储函数中声明变量和参数,这个内存在函数调用结束的时候会自动释放)
    2、怎么去写一个递归函数
    a.找临界值(跳出循环---->return)
    b.找关系:假设当前函数对应的功能已经实现,找到f(n)和f(n-1)的关系
    c.使用f(n-1)和前面找到的关系去实现f(n)的功能

    写一个递归函数实现:1+2+3+4+.....+n

    def my_sum(n):
        if n == 1:
            return 1
        return my_sum(n-1)+n
    print(my_sum(5))
    结果:15
    

    作业:

    1.写⼀个函数将⼀个指定的列表中的元素逆序(例如[1, 2, 3] -> [3, 2, 1])(注意:不要使⽤列表⾃带的逆序函数)

    list1 = [1,2,3]
    def reverse_list(list1):
        for item in list1[0:len(list1)]:
            list1.pop()
            list1.insert(0,item)
        return list1
    print(reverse_list(list1))
    结果:[3, 2, 1]
    

    2.写⼀个函数,提取出字符串中所有奇数位上的字符

    str1 = 'hjhkfjio14484845*(^^#%$#%^*^*'
    def extract(str1):
        str2 = ''
        for item in str1[0:len(str1):2]:
            str2 += item
        print(str2)
    extract(str1)
    结果:hhfi1444*^#$%**
    

    3.写⼀个匿名函数,判断指定的年是否是闰年

    def leap_year(number):
        if number%100 == 0:
            if number%400 == 0:
                return '闰年'
            else:
                return '平年'
        else:
            if number%4 == 0:
                return '闰年'
            else:
                return '平年'
    print(leap_year(189))
    结果:平年
    

    4.使⽤递归打印:

    n = 3的时候

    @

    @@@

    @@@@@

    n = 4的时候:

    @

    @@@

    @@@@@

    @@@@@@@

    def print_star(n,m=0):
        if n == 1:
            print(' '*m,'@ ')
        else:
            print_star(n - 1,m+1)
            print(' '*m,'@ '*n)
    print_star(5)
    结果:
    # 5.写函数,检查传⼊列表的⻓度,如果⼤于2,那么仅保留前两个⻓度的内容,并将新内容返回给调⽤者。
    

    list1 = [1,2,3,4,5,6,7,8]
    def length(list1):
    list2 = []
    if len(list1) > 2:
    for item in list1[0:2]:
    list2.append(item)
    return list2
    print(length(list1))
    结果:[1, 2]

    # 6.写函数,利⽤递归获取斐波那契数列中的第 10 个数,并将该值返回给调⽤者。
    

    def sequence(n):
    if n == 1 or n == 2:
    return 1
    return sequence(n-1)+sequence(n-2)
    print(sequence(6))
    结果:8

    
    # 7.写⼀个函数,获取列表中的成绩的平均值,和最⾼分
    

    list1 = [1,2,3,4,5,6,7,8,9]
    def average(list1):
    max1 = list1[0]
    for item in list1:
    if item > max1:
    max1 = item
    sum1 = 0
    for x in list1:
    sum1 += x
    return max1,sum1/len(list1)
    print(average(list1))
    结果:(9, 5.0)

    # 8.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新的列表返回给调
    

    list1 = [1,3,8,'hfh','uryihi','&^%',')((&','4']
    def check(list1):
    list2 = []
    for item in list1[1:len(list1):2]:
    list2.append(item)
    return list2
    print(check(list1))
    结果:[3, 'hfh', '&^%', '4']

    相关文章

      网友评论

          本文标题:千锋的第八天

          本文链接:https://www.haomeiwen.com/subject/yafmmftx.html