• python基础07——函数,想重复使用自己的代码就写个函数吧


    1 函数定义与调用

    • 函数定义:def return 语句,形参
    • 函数调用:实参
      • 实参是实际占用内存地址的实实在在的参数,而形参只是意义上的一种参数,在定义的时候是不占内存地址的
    def 函数名(参数1,参数2...:
        代码块(函数要实现的功能)
        return 返回值
    #其中,函数的参数和返回值不是必须要写的,如果一个函数没有reutrn语句(也就是没有返回值),它实际上有一个隐式return语句,返回值为None,类型为'NoneType'。
    
    • 1
    • 2
    • 3
    • 4
    1. 函数没有给定参数和返回值
      print函数打印出来的东西只是给你看一下,是nonetype没有数据类型,没有输出,结果不能参与运算
    • 案例一
      在这里插入图片描述
    • 案例二
    def PR():
        print("===================")
        print("人生苦短,我学Python")
        print("===================")
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    1. 函数给定参数,没有给返回值
      在这里插入图片描述

    1.1 自定义模块函数

    1. 编写想要封装进模块的函数
    2. 把这些函数放到一个空的ipynb文件里
    3. 重命名(给文件取名),另存为.py格式
    4. 查看Python的搜索路,把 .py文件放到任意一个搜索路径的文件夹里(只需要放一个可以)
    import sys
    sys.path   #查看Python的搜索路径
    
    • 1
    • 2
    1. 导入模块,通过模块调用里面的函数

    1.2 函数的返回值 return

    1. print函数打印出来的东西只是给你看一下,是nonetype没有数据类型,没有输出,结果不能参与运算
    2. 将函数处理结果送出函数外部,可以进行接收
    3. 当函数运行到return,函数终止
    4. 返回多个值, 多个变量加逗号分隔

    在这里插入图片描述

    2 参数的传递方式

    2.1 位置参数

    按照位置传参,位置参数

    在这里插入图片描述

    2.2 默认值参数

    函数定义阶段直接赋值了的形参
    在这里插入图片描述

    如果调用的时候为参数指定值,则指定值覆盖默认值,按照指定值进行计算
    在这里插入图片描述

    2.3 关键参数

    函数调用阶段按照形参名赋值的实参
    在这里插入图片描述
    注意:当位置参数和关键字参数混用,位置参数在前,关键字参数在后

    在这里插入图片描述

    2.4 可变长度参数(收集和分配参数)

    就是说只指定一个参数,然后允许调用函数时传入任意数量的参数。

    • 在定义的时候,一颗星表示收集位置参数,两颗星表示收集关键字参数
    • 在调用的时候,一颗星表示分配位置参数,两颗星表示分配关键字参数

    2.4.1 收集位置参数

    *args 把多余的位置参数以元组的形式储存
    在这里插入图片描述

    2.4.2 分配位置参数,函数参数的序列解包

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    2.4.3 收集关键字参数

    **args 把多余的关键字参数以字典的形式存储
    在这里插入图片描述

    2.4.4 分配关键字参数

    在这里插入图片描述

    3 变量的作用域

    3.1 局部变量

    • 函数内部的变量叫做局部变量, 局部变量只能在函数内部被使用, 用完就释放

    在这里插入图片描述

    • 当局部变量和全局变量名字相同时, 自定义函数内优先使用局部变量
      在这里插入图片描述

    • 自定义函数内部有局部变量的用局部变量,没有局部变量的,用全局变量
      在这里插入图片描述

    3.2 全局变量

    • 在自定义函数外边定义的变量叫做全局变量
    • 全局变量能在函数的任意位置被使用

    3.3 global:可以将局部变量变成全局变量

    • 可以使用global关键字在函数内部定义一个全局变量, 全局变量能在函数的任意位置被使用
    • 如果在自定义函数中修改全局变量,那么就需要使用global进行声明,否则出错

    4 匿名函数 Lambda

    Lambda函数是自定义函数的一种,专指用关键字” lambda”定义的无名短函数。

    a = lambda x,y,z: x+y+z
    a(1,2,3)
    #out:6
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    4.1 lambda函数和filter函数连用

    filter()过滤后,返回的是结果为真(即不等于0)的对象

    '''
    filter函数:
    
     - filter()有两个参数。第一个参数可以是一个函数,也可以是一个None。
    	
    	 - 如果是第一个参数是函数的话,则将第二个迭代数据里的每一个元素作为函数的参数进行计算,把返回True的值筛选出来;
    	 - 如果第一个参数为None,则直接将第二个参数中为True的值筛选出来。
    filter()过滤后,返回的是结果为真(即不等于0)的对象
    '''
    temp = filter(None,[1,2,0,False,True])
    
    list(temp)  #filter保留结果为真的原数据,筛除结果为假的原数据
    #[1, 2, True]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    案例:

    #写一个筛选奇数的过滤器
    def is_odd(n):
        return n%2
    list(filter(is_odd,range(10)))
    
    #使用lambda简化上述函数
    list(filter(lambda n:n%2,range(10)))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.2 lambda函数和map函数连用

    map()遍历,返回的是计算结果

    '''
    map:映射
    map()也有两个参数,仍然一个是函数,一个是可迭代序列,将序列的每一个个元素作为函数的参数进行运算加工,直到可迭代序列每个元素加工完毕,返回所有加工后的元素构成的新序列。
    map()遍历,返回的是计算结果
    '''
    [*map(lambda x:x%2,range(10))]
    #out: [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4.2 应用场景

    1. python编写一些程序的脚本时,使用lambda就可以省下来定义函数的过程。比如写一个简单的脚本管理服务器,就没有必要定义函数,再去调用它。直接使用lambda函数,可以使程序更加简明。
    2. 一些只需要调用一两次的函数,就没有必要为了想个合适的函数名字而费精力了,直接使用lambda函数就可以省去取名的过程。
    3. 阅读普通函数,通常需要跳到开头def定义的位置,使用lambda函数可以省去这样的步骤。

    5 递归

    函数自己调用自己,注意递归停止条件

    #累加
    def add_sum(n):
        if n == 1:
            return 1
        else:
            return n+add_sum(n-1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    add_sum(10)
    #out: 55
    
    • 1
    • 2

    6 内置函数

    可以直接用函数名调用

    6.1 数据类型相关

    int() , bool() , float() , str() , list() , set() , tuple() ,dict() ,type()

    在这里插入图片描述

    6.2 逻辑判断相关

    6.2.1 all()函数

    如果bool(x)对于可迭代的所有值x为True,则返回True。如果iterable为空,则返回True
    在这里插入图片描述

    6.2.2 any()函数

    如果bool(x)对于可迭代的任何x为True,则返回True。如果iterable为空,则返回False。
    在这里插入图片描述

    6.3 数学相关

    求和:sum()
    求绝对值:abs()
    求最小值:min()
    求最大值:max()
    求长度:len()
    生成随机数:range(),
    求m的n次幂:pow(m,n)
    四舍五入:round()【*.5的时候,返回距离原数据最近的偶数,精度可以取负值:round(156.433,-1)】
    求商和余数: divmod()
    zip函数:将等长的列表或元组组合成字典
    在这里插入图片描述

    7 模块函数

    通过模块名进行调用,如math.sin()等 (前提是先导入(import)第三方模块)

    7.1 导入模块

    1. import math #第一种导入模块的方式
    2. import math as mt #第二种导入模块的方式 最常用的
    3. from math import sin #第三种导入模块的方式

    7.2 random模块

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    7.3 math模块

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    【生成式网络】入门篇(三):Style Transfer 的 代码和结果记录
    【数据结构】队列
    山东省高新技术企业认定四项得分标准解析
    计算机网络(二)
    手撕Vue-实现事件相关指令
    ChatGPT在智能外呼机器人领域的应用
    【第16章】Vue实战篇之跨域解决
    WinUI(WindowsAppSDK)使用LiteDB做个女演员图鉴
    【javase基础】第十八篇(项目):开发团队调度软件
    Elasticsearch:什么是大语言模型 (LLMs)?
  • 原文地址:https://blog.csdn.net/one_bird_/article/details/127821630