美文网首页
2018-10-10 Day 09 函数基础

2018-10-10 Day 09 函数基础

作者: EryangZ | 来源:发表于2018-10-10 18:38 被阅读0次

    01 recode

    容器:

    list[] dict{} tuple() set{}

    使用频率依次降低

    特点:

    list[]: 可变,有序;元素是任何数据类型

    增:append(), insert(), extend()
    删: del, remove, pop
    改: list[下标] = 新值
    查: list[下标或切片], 遍历

    dict{}: 可变,无序;元素为键值对,键不可变,唯一,值可以是任何类型数据

    增: dict[key] = 值, dict.update(序列), setdefault(key, 默认值)key存在没有影响,不存在增加

    a = {"a": 2}
    b = {"c": 3}
    a.setdefault("b", 8)
    print(a)
    

    删: del, pop, clear
    改: dict[key] = 值
    查: dict[key], dict.get(key), dict.get(key, 默认值), 遍历拿的是key值,get方法如果存在key,就返回值,不存在key,返回默认值,默认值可以设置,默认为None

    print(a.get("d"))
    

    tuple(): 不可变,有序;元素为任何类型数据

    查:和列表一样,tuple[下标或切片], 遍历

    tuple(1,)
    tuple = 1, 2, 3, 4, 5, 6, 7
    x, y = (10, 20)
    x, *num, y = tuple
    

    set{}: 可变,无序;元素是不可变的唯一的

    增: add(), update()

    c = {1, 2, 3}
    d = {2, 3, 4}
    c.update(d)
    print(c, d)
    

    删: remove()
    查: 只能遍历通过for in
    去重功能
    相关数学运算: 包含 >= <=, 求并集 | , 交集 & , 差集 - , 补集 ^

    02 浅拷贝与深拷贝

    a = 100
    b = a
    b = 200
    print(a, b) # 100 200
    
    a = [1, 2]
    b = a
    b = [2, 3]
    print(a, b) # [1, 2] [2, 3]
    
    a = [1, 2]
    b = a
    b.append(3)
    print(a, b) # [1, 2, 3] [1, 2, 3]
    
    a = [1, 2]
    b = a.copy()
    c = a[:]
    d = a
    a.append(100)
    print(a, b, c, d)   # [1, 2, 100] [1, 2] [1, 2] [1, 2, 100]
    

    拷贝:就是讲变量中的值复制一份,产生新的数据新的地址,将新的数据的地址返回

    1. 浅拷贝:直接拷贝地址:copy() 或 切片 import.copy ----copy.copy()
    2. 深拷贝:将地址对应的值拷贝,产生新的地址:import copy ----copy.deepcopy()

    浅拷贝

    print("===================")
    a1 = [1, 2]
    a2 = {"a": 10}
    
    list1 = [a1, a2]
    list2 = list1.copy()
    print(list1, list2, sep = "\n") # [[1, 2], {"a": 10}] [[1, 2], {"a": 10}]
    
    list2.append(100)
    print(list1, list2, sep = "\n") # [[1, 2], {"a": 10}] [[1, 2], {"a": 10}, 100]
    
    list2[0].append(200)
    print(list1, list2, sep = "\n") # [[1, 2, 200], {"a": 10}] [[1, 2, 200], {"a": 10}, 100]
    

    深拷贝

    print("----------------")
    
    import copy
    a1 = [1, 2]
    a2 = {"a": 10}
    
    list1 = [a1, a2]
    list2 = copy.deepcopy(list1)
    print(list1, list2, sep = "\n") # [[1, 2], {"a": 10}] [[1, 2], {"a": 10}]
    
    list2.append(100)
    print(list1, list2, sep = "\n") # [[1, 2], {"a": 10}] [[1, 2], {"a": 10}, 100]
    
    list2[0].append(200)
    print(list1, list2, sep = "\n") # [[1, 2], {"a": 10}] [[1, 2, 200], {"a": 10}, 100]
    

    03 列表和字典的引用

    列表的元素和字典的值可以是任何类型的数据

    1. 列表中有字典

    用列表保存多个人信息

    persons = [{"name": "张三", "age": 22},
               {"name": "李四", "age": 20},
               {"name": "王二麻子", "age": 30}]
    print(persons)
    

    取出李四

    for person in persons:
        if person["name"] == "李四":
            print(person)
    

    找出年龄最大的人的名字

    maxage = 0
    person = " "
    for out_person in persons:
        x = out_person["age"]
        if x > maxage:
            maxage = x
            person = out_person["name"]
    print(maxage, person)
    

    2. 字典中有列表

    写一个程序,保存一个班级的信息,班级名,位置,所有学生,学生中需要保存名字,年龄,学校

    class_information = {"班级名": 1807, "位置": 601,
                         "all_student": [{"name": "张三", "age": 22, "school": "清华" },
                                  {"name": "李四", "age": 18, "school": "北大"},
                                  {"name": "王二麻子", "age": 25, "school": "复旦"}]}
    
    print(class_information["all_student"][0]["school"])
    

    练习;添加学生:姓名, 年龄, 学校

    addname = input("请输入添加的姓名: ")
    addage = input("请输入年龄: ")
    addschool = input("请输入毕业学校: ")
    
    student = {"name": addname, "age": addage, "school": addschool}
    
    class_information["all_student"].append(student)
    print(class_information["all_student"])
    

    练习 删除班级中年龄小于20岁的人

    for student in class_information["all_student"][:]: # 不切片遍历会跳过一些元素
        if student["age"] < 20:
            print(student)
            class_information["all_student"].remove(student)
    print(class_information["all_student"])
    
    
    
    print("==============")
    stu = class_information["all_student"]
    
    index = 0
    while index < len(stu):
        student == stu[index]
        if student["age"] < 20:
            del stu[index]
            continue
        index += 1
    print(stu)
    

    04 为什么要使用函数

    没有函数的时候的问题:

    1. 同样的代码需要重复很多遍
    2. 功能发生改变需要修改很多地方

    怎么解决? 使用函数

    左移

    def left():
        print("================左移=================")
        print("看后视镜")
        print("打左转向灯")
        print("踩油门")
        print("往左打方向盘")
        print("回正方向盘")
    

    右移

    def right():
        print("================右移=================")
        print("看后视镜")
        print("打右转向灯")
        print("踩油门")
        print("往右打方向盘")
        print("回正方向盘")
    
    left()
    right()
    left()
    right()
    

    05 函数的声明

    函数就是对实现某一特定功能的代码段的封装

    分类:自定义函数(由程序员声明实现对应的功能)和内置函数(python已经声明完成的)

    1. 声明函数的语法

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

    说明:

    a. def ---> python 中声明函数的关键字
    b. 函数名 ---> 标志服,不能是关键字,遵循pep8命名规范(所有字母小写,多个单词用"_"分开), 要见名知义(看见名字知道函数的功能)
    c. () ---> 固定格式,存放参数(形参)
    d. 参数列表 ---> 形参列表, 参数名1,参数名2,…… 可以有多个参数,也可以没有,参数是用来从函数外部给函数里面传值用的
    e : ---> 固定格式
    f 函数体 ---> 就是实现函数功能的代码段

    2. 初学者声明函数的步骤

    a. 确定函数功能
    b. 根据功能确定函数名
    c. 确定参数: 确定有没有,确定有几个(看实现函数的功能需不需要从函数外边传值,需要传几个)
    d. 实现函数的功能
    e. 确定返回值

    3. 函数的调用

    声明函数的时候,不会执行函数体,函数体只有在函数调用的时候才会执行

    调用语法:
    函数名(实参列表)

    说明:

    函数名 ---> 必须是已经声明过的函数
    () ---> 固定写法
    实参列表 ---> 参数1, 参数2, 参数3...... 多少个实参主要看声明函数的形参有多少个
    作用:用来给形参赋值

    练习1:写一个函数,打印两个数的和

    def qiuhe(x, y):
        print(x + y)
    
    
    a = 4
    b = 5
    qiuhe(a, b)
    

    练习2:写一个函数,打印五个*

    def print_star():
        print("*"*5)
    
    
    print_star()
    

    练习3:写一个函数,打印n个*

    def print_stars():
        n = int(input("需要打印多少颗*:"))
        print("*"*n)
    
    
    print_stars()
    

    练习:写一个函数,计算1 + 2 + 3 + ......n 的和

    def num_sum(n):
        sum1 = 0
        for i in range(1, n + 1):
            sum1 += i
        print(sum1)
    
    
    num_sum(100)
    

    06 函数的格式和调试过程

    1. 格式

    函数名(实参列表)

    2. 函数的调用过程(重点!!!!!!)

    第一步:回到函数声明的位置
    第二步:用实参给形参赋值
    第三步:执行函数体
    第四步:返回返回值
    第五步:执行完函数体,回到函数调用的地方,接着之后后面的代码

    07 函数的参数

    根据调用的时候传参分类

    1. 位置参数和关键字参数

    传值:传参一定要保证每个参数都要有值
    位置参数:按照实参的顺序一一给形参赋值
    关键字参数:形参1 = 值1, 形参2 = 值2

    位置参数

    def func1(a, b, c):
        print(a, b, c)
    
    
    func1(10, 20, 30)
    

    关键字参数

    func1(a = 100, c = 200, b = 500)
    

    2. 默认参数

    函数声明的时候可以给参数设置默认值,有默认值的参数必须放在没有默认值的参数后面

    def func2(c, b=5, a=10, d=2):
        print(a, b, c, d)
    
    
    func2(20)
    func2(8, 6, 4)
    
    
    
    
    def func3(a=10, c=30, b=20):
        print(a, b, c)
    
    
    func3(100, b=200)
    

    3. 不定长参数

    参数的个数不确定的时候,可以在形参的前面加*,将这个形参变成一个元组来接收多个参数

    注意:如果函数有多个参数,那么不定长参数要放在最后

    写一个函数,求多个数的和(遍历或者直接sum)

    def my_sum(*num):
        print(sum(num))
    
    
    my_sum(1, 2, 3, 4)
    
    
    def my_sum(*num):
        sum_num = 0
        for num in num:
            sum_num += num
        print(sum_num)
    
    
    my_sum(1, 2, 3)
    

    不定长参数需要写在形参后面

    def func4(a, b, c, *num):
        print(num, a, c, b)
    
    
    func4(1, 2, 3, 4, 5, 6, 7)
    
    
    

    相关文章

      网友评论

          本文标题:2018-10-10 Day 09 函数基础

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