Python基础之day04-函数

Python基础之day04-函数

文章目录


代码仓库地址: https://gitee.com/andox_yj/python

一、函数的介绍,定义,调用

  1. 介绍:当遇到某段代码需用重复用到时,就可以把该段代码封装成一个小的功能模块,在使用的时候可以重复调用
    这就是函数。函数能提高应用的模块性,和代码的重复利用率。

  2. 注意:函数内的代码在每次重新调用的时候都会重头执行

    """
    # 定义函数:函数名定义规范,一般为单词字母小写,多个单词之间用_下划线连接
    def 函数名():
        代码
    # 调用函数:
    函数名()
    
    
    
    # 定义一个输出个人信息的函数
    def info():
        print("姓名:Andox")
        print("年龄:18")
        print("性别:男")
    
    
    # 调用函数,执行函数内的代码,可重复调用
    info()
    info()
    

二、带参数的函数

  1. 介绍:带有参数的函数就是当调用函数的时候,需要给函数一些变量,值或者是对象,就可以把这些当做参数传给函数定义函数时,需要几个参数,就在()括号里写入几个接收参数的变量名,在函数内的代码里直接使用该变量即可。此时里接收的叫做"形参"

    def info(name, age, gender):
        print(name)
        print(age)
        print(gender)
        
    	# 调用函数方法1:传入与函数定义接收的数量一致的数据给函数。此时这里传入的叫做"实参"
    	info("Andox", "18", "男")
    	# 调用函数方法2:直接指定参数接收的是那个数据,此时与上面调用的结果一样。
    	info(name="Andox", age="18", gender="男")
    """
    注意:
        1.定义时小括号中的参数,用来接收参数用的,称为 “形参”
        2.调用时小括号中的参数,用来传递给函数用的,称为 “实参”
        3.形参与实参的数量必须相等,如果没赋值指定参数的话,需要按照位置顺序数量来填写。
        4.多传会报错,少传,如果函数内不使用就不会报错,如果使用了没传的参数,就会报错。
        5.赋值传递参数的时候,位置可以发生变化。
    """
    
  2. 函数的参数类型:位置参数,可变参数,关键字参数

    # 1.位置参数:按照从左向右的位置依次传入,叫位置参数
    def info(name, age):
        print(name)  # Andox
        print(age)  # 18
    info("Andox", 18)
    
    # 2.可变参数:在变量名前加*号,该变量会存放所有未命名的变量参数,该变量在函数内为元组,通常名称伟*args
    def info(*args):
        print(args)  # ('Andox', 18)
    info("Andox", 18)
    
    # 3.关键字参数:在变量名前加两个*号,该变量会接收key=value的参数, 该变量在函数内为字典.通常命名为**kwargs
    def info(**kwargs):
        print(kwargs)  # {'name': 'anem', 'age': 18}
    info(name="anem", age=18)
    
    # 一般参数对位置顺序为:位置参数-->可变参数-->关键字参数
    def info(name, *args, **kwargs):
        print(name)  # Andox
        print(args)  # (18,)
        print(kwargs)  # {'gender': '男'}
    info("Andox", 18, gender="男")
    

三、带返回值的函数

  1. 函数返回值:函数返回值就是在调用函数后需要函数给反馈一个结果。所以就需要使用带有返回值的参数

  2. 注意:接收函数返回值的变量可以与函数内定义的变量相同。
    每个函数内只能有一个return,if-else除外。return后面可以不返回内容,当做函数的停止。

    # 1.定义带有返回值的函数,在函数最后添加return关键字来把函数执行后的结果返回出去
    def count():
        num = 1 + 2
        return num
    
    # 2.在调用函数时,需要使用一个变量来接收函数的返回值,书写规范为:变量 = 函数()
    num = count()
    print(num)
    

四、函数的嵌套调用

介绍:既在函数里面调用了另外一个函数

def function1():
    print("函数1执行")

def function2():
    print("函数2开始执行")
    function1()
    print("函数2执行结束")


function2()
"""
调用函数2的时候,当函数2里面执行又遇到了函数1,
# 则会执行到函数1调用的位置后,去执行函数1。当函数1执行完后,接着回来执行函数2剩余的代码。
执行顺序:
    函数2开始执行
    函数1执行
    函数2执行结束
"""

五、局部变量与全局变量

  1. 定义在函数内的就是局部变量,使用范围从:定义开始到函数结束
  2. 定义在函数外面的就是全局变量,使用范围从:定义开始到程序结束
  3. 可以将函数内的变量修改为全局变量,使用范围从:定义开始到程序结束。
    """
     定义方法:在函数内定义变量前,先用global声明该变量为全局变量
             global 变量名
             变量名 = 值
    """
    num = 10  # 定义全局变量
    def info():
        age = 10  # 定义局部变量
        global name  # 声明全局变量
        name = "Andox"
    
    info()
    print(name)  # Andox
    
    
  4. 注意:
    • 如果外面有同名的变量定义在该调用该函数之前,则在运行到该函数的全局声明是,会修改外面的函数
    • 如果外面没有定义同名的变量,如果想在外面使用,必须要在调用该函数之后才能使用该变量

六、拆包

# 1.对函数返回值进行拆包
def info():
    high = 175
    weight = 120
    age = 18
    return high, weight, age

high, weight, age = info()  # 拆包
print(high, weight, age)  # 175 120 18

# 2.对列表的拆包
a, b = [1, 2]
print(a, b)  # 1 2
# 3.对元祖的拆包
a, b = (3, 4)
print(a, b)  # 3 4
# 4.对字典的拆包:注意拆出来得到的是key
a, b = {"a": 1, "b": 2}
print(a, b)  # a b

七、引用

引用介绍:
使用id()来查看数据储存在内存中的地址,变量名实际储存的是数据在内存中的地址,
我们可以通过这边地址访问到储存在内存中的变量。而我们传递变量时,其实是把该变量
的引用(变量储存在内存中的地址)传递出去。

a = 100
b = [1, 2]
c = (1, 2)
d = {"name": "Andox"}
print(id(a))  # 4321048320
print(id(b))  # 140495662574720
print(id(c))  # 140495643250240
print(id(d))  # 140495643211776

可变类型与不可变类型是指:如果能直接修改那么就是可变,否则是不可变
可变类型有: 列表、字典、集合
不可变类型有: 数字、字符串、元组,
当变量为不可变类型时,对其修改,其实是把修改后的新数据地址,重新储存在该变量名中
当变量为可变类型时,对其修改,是在内存原来的位置进行修改

# 不可变类型
a = 10
print(id(a))  # 4403084224
a += 1
print(id(a))  # 4403084256  #修改后地址改变
# 可变数据类型
b = [1]
print(id(b))  # 140476780873152
b.append(2)
print(id(b))  # 140476780873152  # 修改后地址不变

八、函数案例-学生管理系统

import time
import os
# 定一个列表,用来存储所有的学生信息(每个学生是一个字典)
info_list = []

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

def add_new_info():
    """添加学生信息"""
    global info_list

    new_name = input("请输入姓名:")
    new_tel = input("请输入手机号:")
    new_qq = input("请输入QQ:")

    for temp_info in info_list:
        if temp_info['name'] == new_name:
            print("此用户名已经被占用,请重新输入")
            return  # 如果一个函数只有return就相当于让函数结束,没有返回值

    # 定义一个字典,用来存储用户的学生信息(这是一个字典)
    info = {}

    # 向字典中添加数据
    info["name"] = new_name
    info["tel"] = new_tel
    info["qq"] = new_qq

    # 向列表中添加这个字典
    info_list.append(info)

def del_info():
    """删除学生信息"""
    global info_list

    del_num = int(input("请输入要删除的序号:"))
    if 0 <= del_num < len(info_list):
        del_flag = input("你确定要删除么?yes or no")
        if del_flag == "yes":
            del info_list[del_num]
    else:
        print("输入序号有误,请重新输入")

def modify_info():
    """修改学生信息"""
    global info_list

    modify_num = int(input("请输入要修改的序号:"))
    if 0 <= modify_num < len(info_list):
        print("你要修改的信息是:")
        print("name:%s, tel:%s, QQ:%s" % (info_list[modify_num]['name'],
                                          info_list[modify_num]['tel'], info_list[modify_num]['qq']))
        info_list[modify_num]['name'] = input("请输入新的姓名:")
        info_list[modify_num]['tel'] = input("请输入新的手机号:")
        info_list[modify_num]['qq'] = input("请输入新QQ:")
    else:
        print("输入序号有误,请重新输入")

def search_info():
    """查询学生信息"""
    search_name = input("请输入要查询的学生姓名:")
    for temp_info in info_list:
        if temp_info['name'] == search_name:
            print("查询到的信息如下:")
            print("name:%s, tel:%s, QQ:%s" % (temp_info['name'],
                                              temp_info['tel'], temp_info['qq']))
            break
    else:
        print("没有您要找的信息....")

def print_all_info():
    """遍历学生信息"""
    print("序号\t姓名\t\t手机号\t\tQQ")
    i = 0
    for temp in info_list:
        # temp是一个字典
        print("%d\t%s\t\t%s\t\t%s" % (i, temp['name'], temp['tel'], temp['qq']))
        i += 1

def main():
    """用来控制整个流程"""
    while True:
        # 1. 打印功能
        print_menu()

        # 2. 获取用户的选择
        num = input("请输入要进行的操作(数字)")

        # 3. 根据用户选择,做相应的事情
        if num == "1":
            # 添加学生
            add_new_info()
        elif num == "2":
            # 删除学生
            del_info()
        elif num == "3":
            # 修改学生
            modify_info()
        elif num == "4":
            # 查询学生
            search_info()
        elif num == "5":
            # 遍历所有的信息
            print_all_info()
        elif num == "6":
            # 退出系统
            exit_flag = input("亲,你确定要退出么?~~~~(>_<)~~~~(yes or no) ")
            if exit_flag == "yes":
                break
        else:
            print("输入有误,请重新输入......")

# 程序的开始
main()
上一篇:Java学习---day04


下一篇:Java-day04-IDEA&数组