01Python基础阶段_Day05

01Python基础阶段_Day05

列表 推导式

格式: 列表变量 = [表达式 for 变量 in range(10)]
表达式中需要使用后面的变量,二者需要保持一致

组包和拆包

组包: 将多个值同时赋给一个变量时,解释器会进行自动组包操作
拆包: 将一个容器值(元组),里面的多个数据同时赋值多个变量,解释器会进行拆包操作
注意: 拆包要注意被赋值的变量个数和元组中的值个数相同

函数返回多个值

当在函数中,需要返回多个值的情况下,可以在return 后面直接将多个值写出来
解释器在返回时,会将多个值自动进行组包

函数嵌套调用及过程

函数嵌套是指,在一个函数的函数体内,又去调用了另外一个函数
如果函数内调用了另一个函数,那么当前函数会中断执行,跳转到另一个函数位置进行执行,被调用执行结束后,才回到当前函数恢复中断,继续执行
无论函数如何调用: 谁调用函数,被调用函数执行完就返回到谁那去

递归函数的调用及过程(了解)

递归调用是一种特殊的嵌套调用
本质就是自己调用自己

变量作用域

全局变量
是指定义函数外的变量,不属于任何一个函数,这个变量可以在任何函数中使用.
公共
局部变量
定义在某个函数中,该变量只在该函数中有效,除该函数外,都不能使用这个变量

当全局变量和局部变量同名时,在函数内使用变量,优先使用局部变量
局部变量优先级高于全局变量

多个函数间利用全局变量共享数据

因为全局变量在使用时,特性是共享,所以可以利用全局变量,实现函数间的数据通信

默认值参数

在定义函数时,函数中的形式参数,被赋值,这个值就是默认值
当在函数调用时,如果给定了值,那么就使用给定值,如果没有给定值,那就使用默认值

注意:
默认值参数只能出现在参数列表的最右侧

位置参数

实参
使用位置参数时,因为类型的原因,那么实参的顺序要和形参的顺序完全一致
当没有默认值的情况下,参数的个数和也要一致

关键字参数

形参
在定义形式参时,每个参数都可以理解成一个key
使用这个key,可以明确的为当前这个参数进行赋值
使用关键字参数,可以忽略参数的顺序问题

不定长位置参数

*args 在参数中定义了该形参后,那可以通过 *args 接收多个不确定个数的位置参数

不定长关键字参数

**kwargs 在参数中定义了该形参后,那可以通过 **kwargs 接收多个不确定个数的关键字参数

重点:
记住这种函数定义格式:当定义函数时,如果函数的参数想接收任意类型和个数,那么定义格式如下:

def 函数名(*args, **kwargs):
函数体内容

混合参数(了解)

如果很多个值都是不定长参数,那么这种情况下,可以将缺省参数放到 *args的后面, 但如果有**kwargs的话,**kwargs必须是最后的

def func(a,b,c,d,e, *args,f=1,g=2,**kwargs):
函数体代码

可变参数二次传递(重点理解)

引用概念

引用就是数据在内存中分配的存储空间的地址
id()可以得到数据在内存中的地址

通过引用,可以方便的在函数之间进行数据传递,实现函数间的数据通信

数字类型和字符串类型数据的缓存区(了解)

为了在程序中使用数据时,效率更高,ptyhon解释会在程序加载后,产生一个缓存区,缓存区中存放是常用的数据
数字: -5 ~ 255
字符串: 长度为小于20的字符串

可变类型和不可变类型

不可变类型:
数字 int
字符串 str
浮点数 float
布尔类型 bool
元组 tuple

特点: 这些数据都是不可以直接修改的,如果在修改或赋值时,都会开辟一个新空间

可变类型:
列表 list
字典 dict
集合 set

特点: 这个些数据类型,是可以直接在原对象上进行修改数据,修改完成后,并不影响原对象地址

函数版学生管理系统

这个程序要理解记住的是逻辑,而不是代码

``

'''
函数应用:学生管理系统
'''

# 定义一个学生的列表,用来保存管理学生
students = []


# 主控制函数
def main():
    while True:
        # 通过死循环控制程序可以重复运行
        # 显示菜单
        show_menu()
        # 键盘输入选择一个功能
        select_id = input("请输入一个功能ID:")
        # 根据输入调用相应的功能
        operator(select_id)


# 菜单函数实现
def show_menu():
    print("-----------------------------------")
    print("      学生管理系统V1.0      ")
    print("1:添加学生")
    print("2:删除学生")
    print("3:修改学生")
    print("4:查询学生")
    print("5:显示所有学生")
    print("6:退出系统")
    print("-----------------------------------")


# 功能选择函数
# 参数是传递的用来选择的功能
def operator(select_id):
    if select_id == "1":
        add_stu()
    elif select_id == "2":
        del_id = input("请输入一个要删除的学生学号:")
        del_stu(del_id)
    elif select_id == "3":
        modify_id = input("请输入一个要修改的学生学号:")
        modify_stu(modify_id)
    elif select_id == "4":
        query_id = input("请输入一个要查询的学生学号:")
        search_stu_with_id(query_id)
    elif select_id == "5":
        show_all_info()
    elif select_id == "6":
        # return 这个不能结束循环,函数返回回到调用处,但还是循环
        exit(0)
    else:
        print("输入的ID错误,请重新输入!")


# 实现一个输入函数,用来从键盘获取学生信息,并返回
def input_stu_info():
    stu_id = input("请输入学号:")
    stu_name = input("请输入姓名:")
    stu_age = input("请输入年龄:")

    return stu_id, stu_name, stu_age


# 实现添加函数
def add_stu():
    # 主体思路就是向列表中添加一个字典
    # 创建一个学生字典
    stu = {}
    # 调用输入函数,获取信息
    stu_info = input_stu_info()
    # 利用获取信息为字典添加数据
    stu["id"] = stu_info[0]
    stu["name"] = stu_info[1]
    stu["age"] = stu_info[2]
    # 将字典加到列表中
    students.append(stu)
    print(students)


# 查找学生,返回被找到的学生
def search_stu_with_id(stu_id):
    # 遍历每个学生
    for stu in students:
        # 判断学生是否是查找的人
        if stu["id"] == stu_id:
            # 找到返回该学生
            show_stu_info(stu)
            return stu
    else:
        print(f"学号为{stu_id}的学生不存在")
        return None


# 实现一个用来显示单个学生信息的函数
def show_stu_info(stu):
    print(f"学号:{stu['id']} 姓名:{stu['name']} 年龄:{stu['age']}")


# 实现删除学生
def del_stu(del_id):
    # 找到要删除的id
    stu = search_stu_with_id(del_id)
    # 从列表删除
    if stu != None:
        students.remove(stu)


# 实现修改学生
def modify_stu(modify_id):
    # 查找学生
    stu = search_stu_with_id(modify_id)
    if stu != None:
        # 调用输入函数,获取信息
        stu_info = input_stu_info()
        # 利用获取信息为字典添加数据
        stu["id"] = stu_info[0]
        stu["name"] = stu_info[1]
        stu["age"] = stu_info[2]


# 显示所有学生信息
def show_all_info():
    # 遍历打印
    for stu in students:
        show_stu_info(stu)


main()

匿名函数

高阶函数map&reduce&filter

上课部分代码

`

# 列表推导式,创建一个具有一百个数字的列表
c1 = []
for i in range(100):
    c1.append(i)

print(len(c1))
# 第一个是变量值从后面取,两个保持一致
c2 = [i for i in range(100)]
print(len(c2))

# 带条件的,实现列表所有值都是3的倍数
c1 = [x for x in range(1, 101) if x % 3 == 0]
print(c1)

# 列表中的每个元素都是具有两个值得元组
c1 = [(x, x) for x in range(10)]
print(c1)
c1 = [(x, y) for x in range(10) for y in range(3)]
print(c1)

# 组包
a = 1, 2, 3, 4, 5
print(type(a))

# 拆包
# 注意,拆包时容器中的元素个数与变量个数要相同
a1, a2, a3, a4, a5 = a
print(a1, a2, a3, a4, a5)


# 函数同时返回多个数据
def get_max_min():
    c1 = [1, 0, 3, 5, 9, 4, 7]
    c1.sort()
    ma = c1[len(c1) - 1]
    mi = c1[0]
    print(ma, mi)
    # 解释器在执行代码时,发现return后如果有多个值,那么会将这多个值组包成一个元组
    # 然后将这个元组返回
    return ma, mi


ret = get_max_min()
print(ret)


# 函数的嵌套调用
def func_a():
    print("a strat")
    func_b()
    print("a stop")


def func_b():
    print("b strat")
    func_c()
    print("b stop")


def func_c():
    print("c strat")

    print("c stop")


func_a()


# 求阶乘
def factorial(n):
    if n == 1:
        return 1
    return n * factorial(n - 1)


print(factorial(5))

# 使用全局变量共享数据
num = 0


def upload_data():
    # 如果想修改全局变量,得先声明
    global num
    num = 100
    print(num)


def download_data():
    print(num)


download_data()
upload_data()
download_data()


# 函数的默认参数
# 使用默认值参数,需要注意,在默认值参数的右侧,不能再没有默认值参数
def show(a=0, b=0):
    print(a + b)


show()
show(1)
show(1, 2)


# 可变参数的二次传递
def show(a, *args, **kwargs):
    print(a)
    print(args)
    # *args手动解包
    display(*args)


def display(a, b, c, d):
    print(a, b, c, d)


show(1, 2, 3, 4, 5)

`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值