美文网首页
2018-10-11day10函数的应用

2018-10-11day10函数的应用

作者: 我是你唯一的py文件 | 来源:发表于2018-10-11 18:52 被阅读0次

    1⃣️recode

    1.函数的声明

    def 函数名(参数列表) ->返回值类型 :
    函数的描述信息
    函数体

    补充:参数列表中,可以通过'参数名:类型名'来指定参数的类型,也可以通过设置默认值来说明参数的类型
    说明类型的好处:a.传什么类型的值一目了然 b.实现函数体的时候,可以有相关提示

    2.函数的调用

    函数名(实参列表)

    调用过程

    
    
    def func1(a: int, b: int):
        """
    
        :param a:
        :param b:
        :return:
        """
        print(a+b)
    

    补充:不定长参数(面试题)
    ' * ' 参数名:将位置参数做为元祖的元素。参数就是一个元祖
    ' ** ' 参数名:将关键字作为参数,以参数名做为key,实参作为值组合成键值对,作为字典的元素。参数是一个字典
    注意:经常args,keyargs组合在一起使用,但是使用的时候要放在**的前面

    4. 返回值

    "python中所有的函数都有返回值。如果遇到return,函数的返回值就是return后面的值:没有遇到就是None
    返回值就是函数调用表达式的值。
    调用目的:a.执行函数体 b. 获取返回值
    return的作用 a.返回返回值 b. 结束函数(函数中遇到return函数就结束)
    """

    def func4(*srg, **keysrgs):
        pass
    

    2⃣️匿名函数

    1.普通函数:

    def 函数名(参数列表):
    函数体

    2.匿名函数:

    函数名 = lambda 参数列表:返回值
    说明:
    函数名 -> 变量名
    lambda -> 关键字
    参数列表 -> 参数名1, 参数名2...
    返回值 -> 相当于只有一个return语句的函数体
    匿名函数的调用和普通函数一样:函数名(实参列表)
    lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数
    1、lambda 函数比较轻便,即用即仍,很适合需要完成一项功能,但是此功能只在此一处使用,
    连名字都很随意的情况下;
    2、匿名函数,一般用来给 filter, map 这样的函数式编程服务;
    3、作为回调函数,传递给某些应用,比如消息处理

    
    sum1 = lambda num1, num2: num1+num2
    
    print(sum1(1, 2))
    
    练习 读程序
    funcs = []
    for item in range(1, 5):
        funcs.append(lambda x: x*item)
    print(funcs[0](2))    #8
    print(funcs[1](2))    #8
    

    3⃣️变量的作用域

    1.变量的作用域

    变量的作用域指的是变量声明后能够使用的范围

    2.全局变量

    全局变量:声明在函数和类的外面的变量都是全局变量,作用域是声明开始到整个py文件结束(任何地方都可以使用)

    a是全局变量
    a = 10
    
    # x 和b都是全局变量
    
    for x in  range(5):
        b = 10
        print(x)
    
    

    3.局部变量

    声明在函数和类中的变量都是局部变量。从声明开始到函数或者类结束而结束,

    4.global关键字

    注意:只能在函数中使用

    name = 'asd'
    
    def func2():
        global age
        age = 22
        global name    # 说明当前函数中使用的name是全局变量name
        name = '111'
        print(name)
    
    
    func2()
    print(name)
    print(age)
    
    

    5.nonlocal关键字

    想要在局部的局部中修改局部变量的值

    def func3():
        b1 = 10
    
        def func4():
            abc = 10
            print(abc)
        func4()
    func3()
    

    4⃣️函数作为变量

    声明函数就是声明一个类型是function的变量,函数名实质就是变量名

    def func1():
        print('===')
    
    
    print(func1)
    
    

    1.变量可以给其他变量赋值

    a = 10
    b = a
    print(b*10)
    
    list1 = [1, 2]
    list2 = list1
    
    list2.append(1)
    print(list2)
    
    ###># 声明一个变量func2,类型是function
    
    
    def func2(x):
        print(x)
    
    # 用一个函数给func3赋值,func3也是函数
    
    
    func3 = func2
    
    # 将函数func2的返回值给b,b的值是None
    b = func2(1)
    func3(11)
    
    

    2.函数作为列表的元素

    
    a = 10
    list4 = [1, a]
    
    print(list4, list4[1]+100)
    
    
    def func22():
        print('我又是函数')
        return 10
    
    list5 = [1, func22, func22()]
    
    print(list5[0])
    
    # list2[1]取到一个函数,通过后面加()调用函数
    print(list5[0])
    
    

    3.将函数作为参数

    a = 10
    def func1(n):
        print(n)
    
    func1(a)
    
    
    def func11(n):
        # n = func12
        n()  # func12()
    
    def func12():
        print('hello word')
    
    func11(func12)
    
    # 应用:sort的应用
    
    

    列表.sort(key=None, reverse=False)
    使用sort的时候,可以通过给key赋一个函数变量,来规定列表中的元素按照什么标准来排序
    这儿的函数变量要求有一个参数和一个返回值。参数代表列表中的元素

    list6 = [
        {'name': '张三', 'age': 40, 'score': 30},
        {'name': '李四', 'age': 26, 'score': 45},
        {'name': '王五', 'age': 25, 'score': 38},
        {'name': '小红', 'age': 29, 'score': 50},
        {'name': '张八', 'age': 29, 'score': 80}
    
    ]
    
    
    def get_age(item):
        return item['age']
    
    print('000000000', get_age, type(get_age))
    list6.sort(key=get_age)
    
    
    print(list6)
    
    list7 = [
        ('a', 20),
        ('f', 404),
        ('g', 7)
    ]
    
    list7.sort(key = lambda x : x[1],reverse=True)
    
    print(list7)
    

    4.将函数作为返回值

    # 更具运算符号,返回对应的功能
    
    def operation(operator: str):
        if operator == '+':
            def func1(*args, **kwargs):
                sum1 = 0
                for item in args:
                    sum1 += item
                for key in kwargs:
                    sum1 += kwargs[key]
                return sum1
            return func1
        elif operator == '*':
            def func2(*args, **kwargs):
                sum1 = 1
                for item in args:
                    sum1 *= item
                for key in kwargs:
                    sum1 *= kwargs[key]
                return sum1
            return func2
    
    re = operation('*')(20, 3, a=2, b=3)
    
    print('re', re)
    

    5⃣️函数的调用

    1.补充:python中的函数可以有多个返回值

    求多个数的和以及平均值

    2.函数的调用过程是一个压栈的过程

    每次调用函数的时候,系统都会在内存中(栈)开辟空间来存储函数执行过程中产生数据(函数中声明的变量)。
    当函数调用完成后,这块内存会自动销毁。

    6⃣️递归函数

    1.什么是递归函数

    递归函数:函数中调用函数本身,这样的函数就是递归函数(自己调用自己)

    循环能做的事情递归都可以做,但是实际上循环内解决的问题绝对不选递归

    def func1():
        print('---')
        func1()
    

    怎么写递归函数
    第一步:去定临界值(循环结束的条件),让函数结束
    第二步:找关系,假设函数的功能已近实现,找f(n)和f(n-1)的关系
    第三步:根据关系,用f(n-1)实现f(n)的功能

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

    def func2(n):
        # 1.找临界值
        if n == 1:
            return 1
        # 2.找关系
        """
        func2(n) = 1+2+3+..+n
        func2(n-1) = 1+2+3+..+n-1
        func2(n) = func2(n-1)+n
        """
        return func2(n-1)+n
    
    print(func2(100))
    
    

    用递归实现一下功能

    def func3(n):
        if n == 1:
            print('*')
            return
    
        print('*'*n)
        func3(n-1)
        return
    func3(10)
    def func3(n):
        if n == 1:
            print('  *  ')
            return
        func3(n - 1)
        print('  *  '*n)
    
        return
    func3(10)
    
    # 总结:递归,能不用就不用!
    

    相关文章

      网友评论

          本文标题:2018-10-11day10函数的应用

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