当前位置:   article > 正文

Python学习day05--函数_python中def modifystne

python中def modifystne

思维导图

day05 函数

0. 复习

标识符规则: 由字母,数字和下划线组成,不能以数字开头
变量名不能和关键字重名.
关键字是系统定义好的标识符,具有特殊的作用.
数据类型: int(整型) float(浮点型) str(字符串类型) bool(布尔类型, True False) list(列表) tuple(元组)  dict(字典)
    type() 函数可以查看变量的数据类型
输入: input()  --> str  类型转换 
输出: print()  %s--字符串  %d -- int  %f--float    %--%%
    f-string {变量}

逻辑运算符
	and  逻辑与 一假为假
	or   逻辑或 一真为真
	not  逻辑非 取反
比较运算符
	==  != 

判断 if elif  else 
循环 while
	for xx in 容器/range():
        pass
    range(a, b, step)  [a, b) 之间的整数
	break 终止循环
    continue 跳过本次循环,继续下次循环
    循环 else 结构: 循环不是被 break 终止的时候会执行 else 中的代码
                        
str: 下标 切片 
list: insert append extend ...                         
tuple: 元组中的数据不能修改 查询的方法  index()
dict: key:value 键值对的形式   

函数:
定义: 使用 def  关键字, 
def 函数名(形参列表):
    函数代码
    return 数据                    
    pass                    

函数调用,才会执行函数中的代码
函数名(实参列表) 
局部变量: 在函数内部定义的变量,只能在当前函数内部使用, 如果想要将这个变量在函数外部使用, ①可以 return 将这个变量返回  ② 使用 global,将其变为全局变量
全局变量: 在任意地方可以访问,想要在函数内部修改全局变量的值,使用 global 声明                        
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

1.函数传参的两种形式[掌握]

image-20201007090951806

image-20201007090653414

2. 函数形参

2.1 缺省参数(默认参数)

# print()
# 缺省参数,形参.在函数定义的时候,给形参一个默认值,这个形参就是缺省参数,
# 注意点: 缺省参数要写在普通参数的后边
# 特点: 在函数调用的时候,如果给缺省参数传递实参值,使用的是传递的实参值,如果没有传递,使用默认值


def func(a, b, c=10):  # 形参c 称为缺省形参
    print(f"a: {a}")
    print(f"b: {b}")
    print(f"c: {c}")


func(1, 2)  # 没有给c 传递实参,使用默认值10
func(1, 2, 3)  # 给c传递实参值,使用传递的数据3


# def fun1(a=1, b, c):   # 代码报错,语法错误
#     pass

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

2.2 不定长参数

注意点: 函数定义中的 args 和 kwargs可以是任意的形参变量,不过习惯使用 args 和 kwargs.
  • 1

image-20201007095423143

2.3 函数形参的完整格式

# 普通形参  缺省形参  不定长元组形参   不定长字典形参
def func(a, b=1):  # 先普通再 缺省
    pass


def func1(a, b=1, *args):  # 语法上不会报错,但是缺省参数不能使用默认值
    print('a', a)
    print('b', b)
    print(args)


def func2(a, *args, b=1):  # 普通形参  不定长元组形参  缺省形参
    print('a', a)
    print('b', b)
    print(args)


def func3(a, *args, b=1, **kwargs):  # 普通形参  不定长元组形参  缺省形参 不定长字典形参
    pass


# func1(1, 2, 3, 4)
# func2(1, 2, 3, 4)
func2(1, 2, 3, 4, b=10)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

image-20210321173944580

3. 拆包[掌握]

  • 注意点: 容器中元素数据的个数需要和变量的个数保持一致.
# 组包, 将多个数据值,组成元组,给到一个变量.
a = 1, 2, 3
print(a)  # (1, 2, 3)


def func():
    return 1, 2  # 组包


# 拆包: 将容器的数据分别给到多个变量, 需要注意: 数据的个数和变量的个数要保持一致
b, c, d = a   # 拆包
# print(b, c, d)

e, f = func()
print(e, f)

my_list = [10, 20]
a, b = my_list
print(a, b)
my_dict = {'name': 'isaac', 'age': 18}
a, b = my_dict   # key值
print(a, b)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

image-20210321174124367

a = 10
b = 20

# 方法一:
# c = a
# a = b
# b = c
# print(a, b)

# 方法二: +/-   */÷
# a = a + b  # a 30
# b = a - b  # 10
# a = a - b  # 20
# print(a, b)

# 方法三, python中的使用 组包和拆包
a, b = b, a
print(a, b)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

image-20201007104829862

4. 引用

# 可以使用 id() 查看变量的引用, 可以将id 值认为是内存地址的别名
# python中数据值的传递的是引用
# 赋值运算符可以改变变量的引用

# 将数据10 存储到变量a 中,  本质是将数据10 所在内存的引用地址保存到变量a 中
a = 10
# 将变量a中保存的引用地址给给到b
b = a
print(a, b)  # 使用print函数打印变量a 和b 引用中存储的值
print(id(a), id(b))
a = 20
print(a, b)
print(id(a), id(b))

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

image-20201007110613051


image-20201007112234121

5. 可变与不可变类型

# 类型的可变与不可变: 在不改变变量引用的前提下,能否改变变量中引用中的数据,
# 如果能改变是可变类型, 如果不能改变,是不可变类型
# int float bool str list tuple dict
# 不可变类型:  int float bool str  tuple
# 可变类型: list dict

# num = 10
# num = 20
#
# my_list = [1, 2]
# my_list.append(3)

a = 1000
b = 1000
print(id(a), id(b))  # python中的内存优化,对于不可变类型进行的,
print(id(a) == id(b))

a = 'hello'
b = 'hello'
print(id(a), id(b))  # python中的内存优化,对于不可变类型进行的,

my_tuple = (1, 2)
my_tuple1 = (1, 2)
print(id(my_tuple), id(my_tuple1))
print(id(my_tuple) == id(my_tuple1))
print('-' * 20)
my_list = [1, 2, 3]
my_list1 = [1, 2, 3]
print(id(my_list), id(my_list1))

print('*' * 30)
my_tuple2 = (1, 2, [3, 4])
print(my_tuple2)
my_tuple2[2][1] = 10
print(my_tuple2)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

image-20210321175113920 image-20201007115601441

6. 引用做函数参数注意点

# 函数传参传递的也是引用
my_list = [1, 2, 3]  # 全局变量


def func1(a):
    a.append(4)


def func2():
    # 为啥不加global, 因为没有修改 my_list 中存的引用值
    my_list.append(5)


def func3():
    global my_list
    my_list = [1, 2, 3]   # 修改全局变量的值


def func4(a):
    # += 对于列表来说,类似列表的extend方法,不会改变变量的引用地址
    a += a  # a = a + a, 修改了a变量a的引用
    # print(a)


func1(my_list)    # [1, 2, 3, 4]
func2()  # [1, 2, 3, 4, 5]
func3()  # [1, 2, 3]
print(my_list)

b = 10  # 不可变类型
func4(b)
print(b)  #

func4(my_list)
print(my_list)  # [1, 2, 3, 1, 2, 3]

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

image-20210321175342376

7. 函数应用: 学生管理系统

增删改查操作
存储学生信息: 
    姓名
    年龄
    班级
    性别
    ...
    {'name': 'isaac', 'age': 18, ...}

存储所有的学生信息:
    列表: [{}, {}, {}, ....]

功能菜单,业务框架.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

image-20201007144540884

搭建业务框架

def show_menu():
    print('1. 添加学生')
    print('2. 删除学生')
    print('3. 修改学生信息')
    print('4. 查询单个学生信息')
    print('5. 查询所有的学生信息')
    print('6. 退出系统')


while True:
    show_menu()
    opt = input('请输入用来选择的操作编号:')
    if opt == '1':
        print('1. 添加学生')
    elif opt == '2':
        print('2. 删除学生')
    elif opt == '3':
        print('3. 修改学生信息')
    elif opt == '4':
        print('4. 查询单个学生信息')
    elif opt == '5':
        print('5. 查询所有的学生信息')
    elif opt == '6':
        print('欢迎下次使用本系统......')
        break
    else:
        print('输入有误,请再次输入')
        continue

    input('...... 回车键继续操作.......')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

添加学生信息

1. 通过 input 函数获取学生的信息, 姓名, 年龄, 性别
2. 将学生信息转换为字典进行保存
3. 将这个学生字典添加的列表中
代码优化:
    假设学生的名字都不能重复,在添加学生的时候,进行判断,如果学生名字已经存在,则不添加.
  • 1
  • 2
  • 3
  • 4
  • 5

删除 /修改/查询学生信息

都使用 name 对学生进行判断

1. 使用 input 获取要删除 /修改/查询 的学生姓名
2. 判断学生信息是否存在
3. 学生存在,对学生进行 删除 /修改/查询 操作
4. 学生信息不存在,直接结束
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
# 定义学生列表,保存所有的学生信息
stu_list = []


def show_menu():
    print('1. 添加学生')
    print('2. 删除学生')
    print('3. 修改学生信息')
    print('4. 查询单个学生信息')
    print('5. 查询所有的学生信息')
    print('6. 退出系统')


def insert_student():
    # 1. 通过 input 函数获取学生的信息, 姓名, 年龄, 性别
    name = input('请输入学生名字:')
    # [{}, {}, {}]  判断的是字典中的 value 是否存在
    for stu in stu_list:
        if stu['name'] == name:
            print('----------学生信息存在---------')
            return  # 结束函数的执行

    age = input('请输入学生年龄:')
    gender = input('请输入学生性别:')
    # 2. 将学生信息转换为字典进行保存
    stu_dict = {'name': name, 'age': int(age), 'gender': gender}
    # 3. 将这个学生字典添加的列表中
    stu_list.append(stu_dict)
    print('==============学生信息添加成功====================')


def remove_student():
    # 1. 使用 input 获取要删除 /修改/查询 的学生姓名
    name = input('请输入要操作的学生的名字:')
    # 2. 判断学生信息是否存在
    for stu in stu_list:
        if stu['name'] == name:
            # 3. 学生存在,对学生进行 删除 /修改/查询 操作
            stu_list.remove(stu)
            # return
            break
    # 4. 学生信息不存在,直接结束
    else:
        print('***********该学生信息不存在,无法删除**************')


def modify_student():
    # 1. 使用 input 获取要删除 /修改/查询 的学生姓名
    name = input('请输入要操作的学生的名字:')
    # 2. 判断学生信息是否存在
    for stu in stu_list:
        if stu['name'] == name:
            # 3. 学生存在,对学生进行 删除 /修改/查询 操作
            stu['age'] = int(input('请输入新的年龄:'))
            # return
            break
    # 4. 学生信息不存在,直接结束
    else:
        print('***********该学生信息不存在,无法修改**************')


def search_student():
    # 1. 使用 input 获取要删除 /修改/查询 的学生姓名
    name = input('请输入要操作的学生的名字:')
    # 2. 判断学生信息是否存在
    for stu in stu_list:
        if stu['name'] == name:
            # 3. 学生存在,对学生进行 删除 /修改/查询 操作
            print(f'姓名:{stu["name"]}, 年龄:{stu["age"]}, 性别:{stu["gender"]}')
            # return
            break
    # 4. 学生信息不存在,直接结束
    else:
        print('***********该学生信息不存在**************')


def show_all_info():
    if len(stu_list) > 0:
        for stu in stu_list:
            print(f'姓名:{stu["name"]}, 年龄:{stu["age"]}, 性别:{stu["gender"]}')
            # print(stu)
    else:
        print('目前没有学生信息')


def main():
    while True:
        show_menu()
        opt = input('请输入用来选择的操作编号:')
        if opt == '1':
            # print('1. 添加学生')
            insert_student()
        elif opt == '2':
            # print('2. 删除学生')
            remove_student()
        elif opt == '3':
            # print('3. 修改学生信息')
            modify_student()
        elif opt == '4':
            # print('4. 查询单个学生信息')
            search_student()
        elif opt == '5':
            # print('5. 查询所有的学生信息')
            show_all_info()
        elif opt == '6':
            print('欢迎下次使用本系统......')
            break
        else:
            print('输入有误,请再次输入')
            continue

        input('...... 回车键继续操作.......')


main()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/261584
推荐阅读
相关标签
  

闽ICP备14008679号