• python基础---->函数



    一、函数介绍

    在学习函数之前,我们编程一直遵循面向过程编程,即:根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能;

    而学了函数之后,我们可以把相同作用的代码放到一个函数中;这样显然程序的重用性和可读性要好一些

    这也是函数式编程和面向过程编程的区别:

      函数式:将相同作用的代码封装到函数中,之后调用函数即课使用

      面向过程:根据问题逻辑从上到下写强堆代码......

    二、函数的定义和使用

    1、一般函数的定义

    def func(name):     # name是形式参数
        print(name)      # 函数体
    
    func('clint')       # 执行函数,'clint'是传入的实参

    传递一个默认参数

    def info(name,age,country = 'China'):   #country定义了一个默认参数
        print('姓名:',name)
        print('年龄:',age)
        print('国家:',country)
    
    info('clint',18)     #调用时,没穿实参countrty,就用默认的参数

    正常情况下,给函数传参数要按顺序,不想按顺序就指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后

    def info
         ...
       
    info(age=18,name='clint')   #使用关键参数,可以不按顺序

    *args 和 **kwargs

    def info(name,age,*args):     #*args会把多传入的参数变成一个元组形式
       def info(name, *args, **kwargs):  # **kwargs 会把多传入的参数变成一个dict形式    

    2、内置函数

    三、递归函数

    递归函数:函数在内部调用自身。

    符合递归函数的条件:

    1. 结束条件;

    2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少;

    3. 递归效率不高,递归层次过多会导致栈溢出

    PS:python默认最大递归数为999,但可通过以下代码进行设置:

    import sys
    sys.setrecursionlimit(10000)     # 将递归数设置为10000

    实例:

    斐波那契数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,...

    版本一:

    # -*- coding:utf-8 -*-
    __Author__ = "Clint"
    fibonaccis = []
    
    
    def fibonacci(n):
        if n == 1 or n == 2:
            return 1
        else:
            return fibonacci(n - 1) + fibonacci(n - 2)
    
    
    for i in range(1, 10):
        fibonaccis.append(fibonacci(i))
    
    print(fibonaccis)

    版本二:

    # -*- coding:utf-8 -*-
    __Author__ = "Clint"
    
    
    def fib(max):
        n = 0
        a = 0
        b = 1
        while n < max:
            print(b)
            a, b = b, a + b  # ===> 赋值语句相当于 t=(b,a+b) a=t[0],b=t[1]
            n += 1
        return 'done'
    
    
    fib(10)

    再来一个n的阶乘,求n!

    #递归实现阶乘n! = (n-1)! × n
    def fac(n):
        if n == 1:
            return 1
        else:
            return n * fac(n-1)
    print(facl(10))

    四、匿名函数lambda

    # ###################### 普通函数 ######################
    # 定义函数(普通方式)
    def func(arg):
        return arg + 1
        
    # 执行函数
    result = func(123)
        
    # ###################### lambda ######################
        
    # 定义函数(lambda表达式)
    my_lambda = lambda arg : arg + 1
        
    # 执行函数
    result = my_lambda(123)

    五、map()、reduce()、filter()函数

    map()是 Python 内置的高阶函数,它接收一个函数 func和一个list,并通过把函数 func依次作用在 list 的每个元素上,得到一个新的 list 并返回

    def func(x):
        return x * x
    a= map(func,range(1,10))
    print(list(a))
    
    # 输出为[1, 4, 9, 16, 25, 36, 49, 64, 81]

    reduce()函数接收的参数和 map()类似,接收一个函数 func和一个list,但reduce()传入的函数 func 必须接收两个参数,reduce()对list的每个元素反复调用函数func,并返回最终结果值

    from functools import reduce
    def func(x,y):
        return x + y
    a = reduce(func,[1,3,5,7,9,10])
    print(a)
    
    # 输出为: 35

    filter()函数也是接收一个函数 func和一个list,函数 func的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list

    def is_odd(x):
        return x % 2 == 1
    a = filter(is_odd,[1,2,3,4,5,6,7,8])
    print(list(a))
    
    # 输出为:[1, 3, 5, 7]

    六、内嵌函数

    在一个函数体内创建另外一个函数,这种函数就叫内嵌函数

    def foo():
        print("in the foo")
        def bar():
            print("in the bar")
        bar()
    
    
    foo()
    
    # 输出为:
    in the foo
    in the bar   
  • 相关阅读:
    redis参数AOF参数的bug
    tidb损坏tikv节点怎么恢复集群
    mysql主从延时临时解决办法
    python脚本批量杀死redis链接
    pt-online-schema-change 脚本化
    mysql查看锁等信息SQL
    mongo复制集脑裂问题如何处理
    日志收集及网络包收集方案
    各浏览器下载文件名不乱码的解决办法
    java 中 byte[]、File、InputStream 互相转换
  • 原文地址:https://www.cnblogs.com/Utopia-Clint/p/10877672.html
Copyright © 2020-2023  润新知