python基础3_函数+组合数据类型

python基础3_函数+组合数据类型

一、 函数

1.1 函数介绍

函数是组织好的、可重复使用的、用来实现特定功能的代码块。

使用函数,可以得到一个针对特定需求、可供重复利用的代码段,提高程序的复用性,减少重复性代码,提高开发效率

1.2 函数的定义

  1. 函数的定义:

    def 函数名(传入参数):
        函数体
        return 返回值
    
  2. 函数的调用:

    函数名(参数)
    
  3. 注意事项:

  • 参数如不需要,可以省略
  • 返回值如不需要,可以省略
  • 函数必须先定义后使用

示例如下:

def printHello():
    print("欢迎来到这里!")
    print("请出示您的健康码以及72小时核算证明。")

printHello()

1.3 函数的参数

传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据

  • 函数定义时,提供的x和y,称之为:形式参数/形参,表示函数声明将要使用2个参数

    • 参数之间使用逗号(,)进行分隔
  • 函数调用中,提供的参数,称之为:实际参数/实参,表示函数执行时真正使用的参数值

    • 传入的时候,按照顺序传入数据,使用逗号(,)分隔
  • 传入参数的数量是不受限制的

    • 可以不使用参数
    • 也可以仅使用任意N个参数
# 定义一个函数,名称任意,并接受一个参数传入(数字类型,表示体温)
# 在函数内进行体温判断(正常范围:小于等于37.5度),并按要求输出内容

def check(num2):
    print("欢迎来到这里!请出示您的健康码以及72小时内的核酸证明,并配合测量体温!")
    if num2 <= 37.5:
        print("体温测量中,您的体温:{}度,体温正常请进!".format(num2))
    else:
        print("体温测量中,您的体温:{}度,需要隔离!".format(num2))


num = int(input("请输入您的体温:"))
check(num)

1.4 函数的返回值

  • 函数返回值的定义

    • 函数返回值:程序中函数完成事情后,最后给调用者的结果

    • 语法格式:

      def 函数(参数...):
          函数体
          return 返回值
      
      
      变量 = 函数(参数...)
      
    • 注意:函数体在遇到return后就结束了,所以写在reutrn后的代码不会执行

  • None类型

    • None是一个特殊的字面量,其类型是<class ‘NoneType’>
    • 无返回值的函数,实际上就是返回了:None
    • 函数返回该字面量表示:这个函数没有返回什么有意义的内容
    • 应用场景:
      • 用在函数无返回值上
      • 用在if判断上(在if判断中,None等同于False;一般用于在函数中主动返回None,配合if判断做相关处理)
      • 用在声明无内容的变量上:声明变量,但暂时不需要变量有具体值,可以用None来代替
# 定义一个函数,返回两个参数的和

def getSum(a, b):
    return a+b

print(getSum(100,50))

1.5 函数说明文档

函数说明文档,即通过注释对函数进行解释说明,辅助理解函数(函数是纯代码语言,想要理解其含义,就需要一行行去阅读理解代码,效率比较低)

语法如下:

def func(x, y):
	"""
	函数说明
	:param x: 形参x的说明
	:param y: 形参y的说明
	:return: 返回值的说明
	"""
    函数体
    return 返回值

示例如下:

# 定义一个函数,返回两个参数的和

def getSum(a, b):
    """
    函数getSum可以得到两个形参的和
    :param a: 两个加数其中之一
    :param b: 两个加数中另一个
    :return: 两个加数的和
    """
    return a+b

print(getSum(100,50))

1.6 函数的嵌套使用

函数的嵌套使用:一个函数里面又调用了另一个函数

执行流程:函数A中执行到调用函数B的语句,会将函数B全部执行完成后,继续执行函数A的剩余内容

示例如下:

def printA():
    print("A")

def printB():
    print("B")

def printAll():
    printA()
    printB()

printAll()

1.7 变量的作用域

变量作用域:变量的作用范围(变量在哪里可用,在哪里不可用)

  • 局部变量:定义在函数体内部的变量,即只在函数体内部生效
    • 局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量
  • 全局变量:在函数体内、外都能生效的变量
  • global关键字:使用global关键字,可以在函数内部声明变量为全局变量(global num)

1.8 综合案例

ATM案例:

# ATM案例

# 初始化
money = 50000
name = input("请输入您的姓名:")

# 主菜单效果
def index(s):
    """
    打印主菜单效果
    :param s: 用户姓名
    :return: 返回用户选择
    """
    print("{},您好,欢迎来到银行ATM,请选择操作:".format(name))
    print("查询余额   【输入1】")
    print("存款       【输入2】")
    print("取款       【输入3】")
    print("退出       【输入4】")
    return int(input("请输入您的选择:"))

# 查询余额
def checkMoney():
    """
    查询余额函数
    :return:无返回值
    """
    print("----------余额查询----------")
    print("{},您好,您的余额剩余:{}".format(name, money))

# 存款效果
def inMoney():
    """
    存款
    :return: 无返回值
    """
    n = int(input("存入:"))
    global  money
    money += n
    print("{},您好,您存款{}元成功!".format(name, n))
    print("{},您好,您的余额剩余:{}".format(name, money))

# 取款效果
def outMoney():
    """
    取款
    :return: 无返回值
    """
    n = int(input("取出:"))
    global  money
    if n>money:
        print("余额不足!!!")
    else:
        money -= n
        print("{},您好,您取款{}元成功!".format(name, n))
        print("{},您好,您的余额剩余:{}".format(name, money))


while name :
    choice = index(name)
    if choice == 1 :
        checkMoney()
    elif choice == 2:
        inMoney()
    elif choice == 3:
        outMoney()
    elif choice == 4:
        name = ''
    else:
        print("请输入有效操作!!!")

二、 数据容器

2.1 数据容器入门

当变量数目较多时,定义多个变量不高级且低效;我们会采用数据容器,一个变量完成,容纳多个数据

  • python中的数据容器:一种可以容纳多份数据的数据类型,容纳的每一份数据称之为一个元素;每一个元素,可以是任意类型的数据,如字符串、数字、布尔等
  • 数据容器根据特点的不同(是否支持重复元素、是否可以修改、是否有序,等等)分为五类
    • 列表list
    • 元组tuple
    • 字符串str
    • 集合set
    • 字典dict

2.2 数据容器:List(列表)

  • 列表的定义

    • 基本语法:

      # 字面量
      [元素1, 元素2, 元素3, 元素4, ...]
      # 定义变量
      变量名称 = [元素1, 元素2, 元素3, 元素4, ...]
      # 定义空列表
      变量名称 = []
      变量名称 = list()
      
    • 注意:

      • 列表内的每一个数据,称之为元素
      • 列表以“[]”作为标识
      • 列表内的每个元素之间用逗号“,”隔开
      • 列表可以依次存储多个数据,且可以为不同的数据类型支持嵌套
  • 列表的下标索引

    • 从前向后,从0开始,依次递增

      my_list = [1, 2, 3, 4]
      n = my_list[2]
      
    • 从后向前,从-1开始,依次递减

      my_list = [1, 2, 3, 4]
      n = my_list[-2]
      
    • 嵌套列表的下标索引

      my_list = [[1, 2, 3], [4, 5, 6]]
      n = my_list[0][0]
      
    • 注意:要注意下标索引的取值范围,超出范围无法取出元素,并且会报错

  • 列表的常用操作/方法

    • 查找某元素的下标:

      • 功能:查找指定元素在列表的下标,如果找不到,报错ValueError

      • 语法:列表.index(元素),其中,index就是列表对象(变量)内置的方法(函数)

      • 示例:

        my_list = [123, 234, 345]
        n = my_list.index(123)
        
    • 修改特定位置(索引)的元素值:

      • 语法:列表[下标] = 值

      • 可以使用如上语法,直接对指定下标(正向、反向下标均可)的值进行重新赋值/修改

      • 示例:

        # 正向下标
        my_list = [1, 2, 3]
        my_list[0] = 0
        
        # 反向下标
        my_list[-1] = 2
        
    • 插入元素:

      • 语法:列表.insert(下标, 元素),在指定的下标位置,插入指定的元素

      • 示例:

        my_list = [1, 2, 3]
        my_list.insert(1, 3)
        
    • 追加一个元素:

      • 语法:列表.append(元素),将指定元素追加到列表的尾部

      • 示例:

        my_list = [1, 2, 3]
        my_list.append(4)
        
    • 追加多个元素:

      • 语法:列表.extend(其他数据容器),将其他数据容器的内容取出,依次追加到列表尾部

      • 示例:

        my_list = [1, 2, 3]
        my_list.extend([4, 5, 6])
        
    • 删除元素:

      • 语法1:del 列表[下标]

      • 语法2:列表.pop(下标)

      • 示例:

        my_list = [1, 2, 3]
        # 方法一
        del my_list[0]
        # 方法二
        my_list.pop(0)
        
    • 删除某元素在列表中的第一个匹配项

      • 语法:列表.remove(元素)

      • 示例:

        my_list = [1, 2, 3]
        my_list.remove(1)
        
    • 清空列表内容

      • 语法:列表.clear()

      • 示例:

        my_list = [1, 2, 3]
        my_list.clear()
        
    • 统计某元素在列表中的数量

      • 语法:列表.count(元素)

      • 示例:

        my_list = [1, 2, 3]
        num = my_list.count(1)
        
    • 统计列表内有多少元素

      • 语法:len(列表)

      • 示例:

        my_list = [1, 2, 3]
        num = len(my_list)
        
    • 常用方法总结

      使用方式作用
      列表.append(元素)向列表中追加一个元素
      列表.extend(容器)将数据容器的内容依次取出,追加到列表尾部
      列表.insert(下标, 元素)在指定下标处,插入指定的元素
      del 列表[下标]删除列表指定下标元素
      列表.pop(下标)删除列表指定下标元素
      列表.remove(元素)从前向后,删除此元素第一个匹配项
      列表.clear()清空列表
      列表.count(元素)统计此元素在列表中出现的次数
      列表.index(元素)查找指定元素在列表的下标,找不到报错ValueError
      len(列表)统计容器内有多少元素
  • 列表特点:

    • 可以容纳多个元素
    • 可以容纳不同类型的元素
    • 数据是有序存储的
    • 允许重复数据存在
    • 可以修改/增加/删除元素等

2.3 List(列表)的遍历

  • while循环遍历:利用列表的下标取出

    my_list = [21, 25, 21, 23, 22, 20]
    i = 0
    while i < len(my_list):
        print(my_list[i])
        i += 1
    
  • for循环遍历:

    my_list = [21, 25, 21, 23, 22, 20]
    for e in my_list:
        print(e)
    
  • 两者对比:

    • 在循环控制上:
      • while循环可以自定循环条件,并自行控制
      • for循环不可以自定循环条件,只可以一个个从容器内取出数据
    • 在无限循环上:
      • while循环可以通过条件控制做到无限循环
      • for循环理论上不可以,因为被遍历的容器容量不是无限的
    • 在使用场景上:
      • while循环适用于任何想要循环的场景
      • for循环适用于,遍历数据容器的场景或简单的固定次数循环场景
  • 示例:取出列表中的偶数

    # 取出列表中的偶数
    
    # 数据初始化
    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    res = []
    # 列表遍历
    for e in my_list:
        if e%2 == 0:
            res.append(e)
    # 输出结果
    print(res)
    

2.4 数据容器:Tuple(元组)

元组同列表一样,都是可以封装多个、不同类型的元素在内,但最大的不同点在于:元组一旦定义完成,就不可以修改

  • 元组的定义格式:使用小括号,且使用逗号(,)隔开各个数据,数据可以是不同的数据类型

    # 定义元组字面量
    (元素, 元素, ..... , 元素)
    # 定义元组变量
    变量名称 = (元素, 元素, ..... , 元素)
    # 定义空元组
    变量名称 = ()
    变量名称 = tuple()
    

    注:若元组只有一个数据,这个数据后面要添加逗号(,)

  • 元组的特点:

    • 可以容纳多个数据
    • 可以容纳不同类型的数据
    • 数据是有序存储的
    • 允许重复数据存在
    • 不可以修改
    • 支持for循环
  • 元组的常见操作:

    方法作用
    index()查找每个数据,如果数据存在返回对应的下标,否则报错
    count()统计某个元素在当前元组出现的次数
    len(元组)统计元组内的元素个数

    注:不可以修改元组的内容,否则会直接报错;可以修改元组内list的内容(修改元素、增加、删除、反转等)

2.5 数据容器:str(字符串)

字符串是字符的容器,一个字符串可以存放任意数量的字符

  • 字符串的下标/索引

    • 和其他容器(列表、元组)一样,字符串也可以通过下标进行访问
    • 从前向后,下标从0开始
    • 从后向前,下标从-1开始
  • 同元组一样,字符串是一个无法修改的数据容器,所以,修改指定下标的字符、移除特定下标的字符、追加字符等均无法完成。如果必须要做,只能得到一个新的字符串

  • 查找特定字符串的下标索引值:

    • 语法:字符串.index(字符串)

    • 示例:

      my_str = "a and b and c"
      print(my_str.index("and"))
      
  • 字符串的替换:

    • 语法:字符串.replace(字符串1, 字符串2)
    • 功能:将字符串内的所有字符串1替换成字符串2
    • 注意:不是修改字符串本身,而是得到了一个新的字符串
  • 字符串的分隔:

    • 语法:字符串.split(分隔符字符串)

    • 功能:按照指定的分隔符字符串,将字符串划分为多个字符串,并存入列表对象中

    • 注意:字符串本身不变,而是得到了一个列表对象

    • 示例:

      my_str = "a and b and c"
      print(my_str.split(" "))
      
  • 字符串的规整操作(去掉前后空格):

    • 语法:字符串.strip()

    • 示例:

      my_str = "  a and b  "
      print(my_str.strip())
      
  • 字符串的规整操作(去掉前后字符串):

    • 语法:字符串.strip(字符串)

    • 示例:

      my_str = "12a and b21"
      print(my_str.strip("12"))
      # 注意:传入的“12”其实就是,“1”和“2”都会被移除
      
  • 字符串常见操作汇总:

    操作说明
    字符串[下标]根据下标索引取出特定位置字符
    字符串.index(字符串)查找给定字符的第一个匹配项的下标
    字符串.replace(字符串1, 字符串2)将字符串内的所有字符串1替换成字符串2;不会修改原字符串,而是得到一个新的字符串
    字符串.split(字符串)按照给定字符串,对字符串进行分隔;不会修改原字符串,而是得到一个新的列表
    字符串.strip()/字符串.strip(字符串)移除首尾的空格和换行符或指定字符串
    字符串.count(字符串)统计字符串内某字符串的出现次数
    len(字符串)统计字符串的字符个数
  • 字符串的遍历:同列表、元组一样,字符串也支持while循环和for循环进行遍历

  • 字符串的特点:

    • 只可以存储字符串
    • 长度任意(取决于内存大小)
    • 支持下标索引
    • 允许重复字符串出现
    • 不可以修改/增加/删除元素等
    • 支持while循环和for循环进行遍历
  • 示例:

    # 数据初始化
    my_str = "itheima itcast boxuegu"
    
    # 统计字符串内有多少个“it”字符串
    print("字符串{}中有{}个“it”字符".format(my_str, my_str.count("it")))
    
    # 将字符串内的空格全部替换为“|”
    my_str2 = my_str.replace(" ", "|")
    print("字符串{}替换后的字符串为{}".format(my_str, my_str2))
    
    # 按照“|”进行字符串分隔得到列表
    print("字符串{}分隔后的列表为{}".format(my_str2, my_str2.split("|")))
    

2.6 数据容器(序列)的切片

  • 什么是序列:是指内容连续、有序,可使用下标索引的一类数据容器

    • 列表、元组、字符串,均可以视为序列
  • 序列的切片操作:序列支持切片(从一个序列中取出一个子序列)

    • 语法:序列[起始下标:结束下标:步长]
    • 表示从序列中,从指定位置开始,依次取出元素,到指定位置结束(不包括指定位置),得到一个序列:
      • 起始下标表示从何处开始,可以留空,留空视作重新开始
      • 结束下标(不含)表示何处结束,可以留空,留空视作截取到结尾
      • 步长表示,依次取元素的间隔(若为负数,表示反向取,起始下标和结束下标也要反向标记)
    • 注意:此操作不会影响序列本身,而是会得到一个新的序列
  • 示例:

    # 数据初始化
    my_str = "序秩护维,课听真认,体得装着,表仪洁整"
    # 字符串倒序
    my_str2 = my_str[::-1]
    print(my_str2)
    # 以“,”分隔
    my_str3 = my_str2.split(",")[2]
    print(my_str3)
    # 替换“认真”为“ ”
    my_str4 = my_str3.replace("认真", " ")
    print(my_str4)
    # 去除前后的空格
    my_str5 = my_str4.strip()
    print(my_str5)
    

2.7 数据容器:set(集合)

集合,最主要的特点就是:不支持元素的重复(自带去重功能)、并且内容无序

  • 集合的定义格式:

    # 定义元素字面量
    {元素, 元素, 元素,......,元素}
    # 定义集合变量
    变量名称 = {元素, 元素, 元素,......,元素}
    # 定义空集合
    变量名称 = set()
    
  • 集合的特点:

    • 可以容纳多个元素
    • 可以容纳不同类型的数据
    • 数据是无序存储的(不支持下标索引)
    • 不允许重复数据存在(自带去重功能)
    • 可以修改/增加/删除元素等等
    • 支持for循环,不支持while循环
  • 集合的常见操作:

    • 添加新元素:

      • 语法:集合.add(元素)

      • 功能:将指定元素添加到集合内

      • 结果:集合本身被修改,添加了新元素

      • 示例:

        my_set = {"qwe", "wer", "ert"}
        my_set.add("rty")
        print(my_set)			# {"qwe", "wer", "ert", "rty"}
        
    • 移除元素:

      • 语法:集合.remove(元素)

      • 功能:将指定元素从集合内移除

      • 结果:集合本身被修改,移除了元素

      • 示例:

        my_set = {"qwe", "wer", "ert"}
        my_set.remove("qwe")
        print(my_set)			# {"wer", "ert"}
        
    • 从集合中随机取出元素:

      • 语法:集合.pop()

      • 功能:从集合中随机取出一个元素

      • 结果:会得到一个元素的结果;同时集合本身被修改,元素被移除

      • 示例:

        my_set = {"qwe", "wer", "ert"}
        element = my_set.pop()
        print(element)			# qwe
        print(my_set)			# {"wer", "ert"}
        
    • 清空集合:

      • 语法:集合.clear()

      • 功能:清空集合

      • 结果:集合本身被清空

      • 示例:

        my_set = {"qwe", "wer", "ert"}
        my_set.clear()
        print(my_set)			# set()
        
    • 取出两个集合的差集:

      • 语法:集合1.difference(集合2)

      • 功能:取出集合1和集合2的差集(集合1有而集合2没有的

      • 结果:得到一个新集合,集合1和集合2不变

      • 示例:

        set1 = {1, 2, 3}
        set2 = {1, 5, 6}
        set3 = set1.difference(set2)
        print(set1)						# {1, 2, 3}
        print(set2)						# {1, 5, 6}
        print(set3)						# {2, 3}
        
    • 消除两个集合的差集:

      • 语法:集合1.difference_update(集合2)

      • 功能:对比集合1和集合2,在集合1内,删除和集合2相同的元素

      • 结果:集合1被修改,集合2不变

      • 示例:

        set1 = {1, 2, 3}
        set2 = {1, 5, 6}
        set1.difference_update(set2)
        print(set1)						# {2, 3}
        print(set2)						# {1, 5, 6}
        
    • 两个集合合并:

      • 语法:集合1.union(集合2)

      • 功能:将集合1和集合2组成新集合

      • 结果:得到新集合,集合1和集合2不变

      • 示例:

        set1 = {1, 2, 3}
        set2 = {1, 5, 6}
        set3 = set1.union(set2)
        print(set1)						# {1, 2, 3}
        print(set2)						# {1, 5, 6}
        print(set3)						# {1, 2, 3, 5, 6}
        
      • 常见操作总结:

        操作说明
        集合.add(元素)集合内添加一个元素
        集合.remove(元素)移除集合内指定的元素
        集合.pop()从集合内随机取出一个元素
        集合.clear()将集合清空
        集合1.diference(集合2)得到一个新集合,内含2个集合的差集;原有的两个集合内容不变
        集合1.diference_update(集合2)在集合1中,删除集合2中存在的元素;集合1被修改,集合2不变
        集合1.union(集合2)得到一个新集合,内含2个集合的全部元素;原有的两个集合元素不变
        len(集合)得到一个整数,记录了集合的元素数量
  • 示例:

    # 数据初始化
    my_list = ['qwe', 'wer', 'ert', 'rty', 'qwe', 'wer']
    # 定义一个空集合
    my_set = set()
    # 将列表的数据移到集合中
    for e in my_list:
        my_set.add(e)
    print(my_set)
    

2.8 数据容器:dict(字典、映射)

  • 字典的定义:

    • 字典定义语法:

      # 定义字典字面量
      {key: value, key: value, ..., key: value}
      # 定义字典变量
      my_dict = {key: value, key: value, ..., key: value}
      # 定义空字典
      my_dict = {}
      my_dict = dict()
      
    • 字典数据的获取:字典同集合一样,不可以通过key值来取得对应的value,但是可以通过key值来取得对应的value

      my_dict = {'score1': 100, 'score2': 99, 'score': 98}
      print(my_dict['score1'])				# 100
      
    • 字典的嵌套:字典的key和value可以是任意数据类型(key不可为字典),表明字典是可以嵌套的

      stu_score = {
          "name1": {
          	"chinese": 77,
              "math": 66,
              "english": 33
      	},
          "name2": {
          	"chinese": 88,
              "math": 86,
              "english": 55
      	},
          "name3": {
          	"chinese": 99,
              "math": 96,
              "english": 66
      	},
      }
      print(stu_score["name1"]["math"])		# 66
      
    • 注意:

      • 键值对的key和value可以是任意类型
      • 字典内key不允许重复,重复添加等同于覆盖原有数据
      • 字典不用下标索引,而是通过key检索value
  • 字典的通用操作:

    • 新增元素:

      • 语法:字典[key] = value
      • 结果:字典被修改,新增了元素
    • 修改元素:

      • 语法:字典[key] = value
      • 结果:字典被修改,元素被更新
      • 注意:字典key不可以重复,所以对已经存在的key执行上述操作,就是更新value值
    • 删除元素:

      • 语法:字典.pop(key)
      • 结果:获得指定key的value,同时字典被修改,指定key的数据被删除
    • 清空元素:

      • 语法:字典.clear()
      • 结果:字典被修改,元素被清空
    • 获取全部的key:

      • 语法:字典.keys()
      • 结果:得到字典中的全部key
    • 字典常用操作总结:

      操作说明
      字典[key]获取指定key对应的value值
      字典[key] = value添加或更新键值对
      字典.pop(key)取出key对应的value并在字典内删除此key的键值对
      字典.clear()清空字典
      字典.keys()获取字典的全部key,可用于for循环遍历列表
      len(字典)计算字典内的元素数量
  • 字典的特点:

    • 可以容纳多个数据
    • 可以容纳不同类型的数据
    • 每一份数据是KeyValue键值对
    • 可以通过key获取到value,key不可重复(重复会覆盖)
    • 不支持下标索引
    • 可以修改/增加/删除/更新元素等等
    • 支持for循环,不支持while循环
  • 示例:

    # 数据初始化
    my_dict = {
        "name1": {
            "部门": "科技部",
            "工资": 3000,
            "级别": 1
        },
        "name2": {
            "部门": "市场部",
            "工资": 5000,
            "级别": 2
        },
        "name3": {
            "部门": "市场部",
            "工资": 7000,
            "级别": 3
        },
        "name4": {
            "部门": "科技部",
            "工资": 4000,
            "级别": 1
        },
        "name5": {
            "部门": "市场部",
            "工资": 6000,
            "级别": 2
        },
    }
    
    for e in my_dict.keys():
        if my_dict[e]["级别"] == 1:
            my_dict[e]["级别"] += 1
            my_dict[e]["工资"] += 1000
    
    print(my_dict)
    

2.9 数据容器的对比总结

  • 分类:

    • 是否支持下标索引:
      • 支持(序列类型):列表、元组、字符串
      • 不支持(非序列类型):集合、字典
    • 是否支持重复元素:
      • 支持(序列类型):列表、元组、字符串
      • 不支持(非序列类型):集合、字典
    • 是否可以修改:
      • 支持:列表、集合、字典
      • 不支持:元组、字符串
  • 特点对比:

    列表元组字符串集合字典
    元素数量支持多个支持多个支持多个支持多个支持多个
    元素类型任意任意仅字符任意key(除字典外的任意类型): value(任意类型)
    下标索引支持支持支持不支持不支持
    重复元素支持支持支持不支持不支持
    可修改性支持不支持不支持支持支持
    数据有序
    使用场景可修改、可重复的一批数据记录场景不可修改、可重复的一批数据记录场景一串字符的记录场景不可重复的数据记录场景以key检索value的数据记录场景

2.10 数据容器的通用操作

数据容器各自有各自的特点,但是它们也有一些通用的操作

  • 遍历:

    • 5类数据容器都支持for循环遍历
    • 列表、元组、字符串支持while循环,集合、字典不支持(无法下标索引)
  • 功能方法:

    • len(容器):统计容器的元素个数
    • max(容器):统计容器的最大元素
    • min(容器):统计容器的最小元素
    • 补充:字符串的大小补充
      • 在程序中,字符串所用的所有字符(大小写英文字母、数字、特殊符号)都有其对应的ASCII码表值
      • 字符串进行比较就是基于数字的码制大小进行比较的
      • 字符串是按位比较,也就是一位位进行对比,只要有一位大,那么整体就大
  • 类型转换:

    • list(容器):将给定容器转换为列表
    • str(容器):将给定元素转换为字符串
    • tuple(容器):将给定元素转换为元组
    • set(容器):将给定元素转换为集合
  • 通用排序功能:

    • sorted(容器, [reverse=True])
    • 将给定容器进行排序
  • 总览:

    功能描述
    通用for循环遍历容器(字典是遍历key)
    max容器内最大元素
    min()容器内最小元素
    len()容器元素个数
    list()转换为列表
    tuple()转换为元组
    str()转换为字符串
    set()转换为集合
    sorted(容器, [reverse=True])排序,reverse=True表示降序,得到一个排好序的列表

三、 函数补充

3.1 函数多返回值

按照返回值的顺序,写对应顺序的多个变量接收即可

变量之间用逗号隔开

支持不同类型的数据return

def test_return():
    return 1, 2

x, y = text_return()
print(x)				# 1
print(y)				# 2

3.2 函数多种传参方式

3.2.1 位置参数

位置参数:调用函数时根据函数定义的参数位置来传递参数

  • 示例:

    def user_info(name, age, gender):
        print("my name is {}. i am {} years old. my gender is {}.".format(name, age, gender))
        
    user_info("tom", 20, "nan")
    
  • 注意:传递的参数和定义的参数的顺序及个数必须一致

3.2.2 关键字参数

关键字参数:函数调用时通过“键=值”形式传递参数

  • 作用:可以让函数更加清晰,容易使用,同时也清除了参数的顺序需求

  • 示例:

    def user_info(name, age, gender):
        print("my name is {}. i am {} years old. my gender is {}.".format(name, age, gender))
        
    # 关键字传参
    user_info(name="tom", age=20, gender="nan")
    # 可以不按照固定顺序
    user_info(age=20, name="tom", gender="nan")
    # 可以和位置参数混用,位置参数必须在关键字参数的前面,且匹配参数顺序
    user_info("tom", age=20, gender="nan")
    
  • 注意:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序

3.2.3 缺省参数

缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用参数时可不传该默认参数的值(注:所有位置参数必须出现在默认参数前,包括函数定义和调用)

  • 作用:当调用函数时没有传递参数,就会使用默认是用缺省参数对应的值

  • 示例:

    def user_info(name, age, gender="nan"):
        print("my name is {}. i am {} years old. my gender is {}.".format(name, age, gender))
        
    user_info("tom", 20)
    user_info("tom", 20, "nv")
    
  • 注意:函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值

3.2.4 不定长参数

不定长参数: 不定长参数也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景

  • 作用:当调用函数不确定参数个数时,可以使用不定长参数

  • 分类:

    • 位置传参:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组,args是元组类型,这就是位置传参

      def user_info(*args):
          print(args)
          
      user_info("tom", 20)
      
    • 关键字传参:关键字不定长传递以**号标记一个形式参数,以字典的形式接受参数,形式参数一般命名为kwargs

3.3 匿名函数

  • 函数作为参数传递:函数本身作为参数,传入另一个函数中进行使用

    • 作用:传入计算逻辑,而非传入数据

    • 示例:

      def test_func(compute):
          res = compute(1, 2)
          return res
      
      def compute(a, b):
          return a+b
      
  • lambda匿名函数

    • 定义语法:

      lambda 传入参数: 函数体(一行代码)
      
      • lambda是关键字,表示定义匿名函数
      • 传入参数表示匿名函数的形式参数
      • 函数体,就是函数的执行逻辑,要注意:只能写一行,不能写多行代码
    • 使用def和使用lambda,定义的函数功能完全一致,知只是后者定义的函数是匿名的,无法二次使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值