# 1.函数
# 函数就是将一段具有独特功能的代码段整合到一个整体并命名
# 在需要的位置调用这个名称即可完成对应的需求
# 函数的作用:封装代码(方便管理),实现代码重用
print('1.函数作用')
name_list = ['小明', '小刚']  # 列表
print(len(name_list))  # 长度为2
print()
name_list.append('小芳')
print('列表的长度:', len(name_list))  # 长度为3
print('list', name_list)  # 可以拼写  name_list.print 一样的
print('type', type(name_list))
print('id', id(name_list))
print()
name_list.append('小雨')
print('列表的长度:', len(name_list))
print('list', name_list)
print('type', type(name_list))
print('id', id(name_list))

python中的函数(1)

# 2.定义函数
'''
def 函数名称(参数):
    代码1
    代码2
    ···
根据不同需求 参数可有可无
函数必须先定义再调用    
使用函数:
函数名称(参数)
'''
print()
print('2.定义函数')
# 定义一个函数输出上面的重复代码(列表信息输出)
def list_info():  # information  info
    print()
    print(name_list[0])
    print('列表的长度:', len(name_list))
    print('list', name_list)
    print('type', type(name_list))
    print('id', id(name_list))
name_list = ['小明', '小刚']  # 列表

name_list.append('666')
list_info()  # 调用函数

name_list.append('888')
list_info()  # 调用函数

python中的函数(1)

# 3.简单的函数的使用
print()
print('3.简单的函数的使用')
# information
def print_info():
    print('我真帅,我真好,我今天真棒!')
print_info()

python中的函数(1)

# 4.函数的参数
# 参数作用:让函数更加灵活
print()
print('4.函数的参数')
# 定义一个输出列表的函数
def print_info(list_data):  # 形参 参数只会作用函数里面的数据
    print(list_data)
print()
print_info([666, 555])  # 实参
# 定义列表中数据求和的函数
def list_sum(list_data):  # 将列表中的数据求和
    total = 0
    for i in list_data:
        total += i
    print(total)
print()
list1 = [1, 2, 3, 4]
list2 = [66, 22, 11]
list_sum(list1)  # print(sum(list1))
list_sum(list2)
# 定义一个输出列表长度的函数
def list_len(list_data):
    i = 0
    for _ in list_data:  # 临时变量_
        i += 1
    print(i)
print()
list1 = [1, 2, 3, 4]
list2 = [66, 22, 11]
list_len(list1)  # print(len(list1))
list_len(list2)

python中的函数(1)

# 5.函数的返回值
# return 返回的参数
# return之后整个函数将会直接结束,return后面的代码不会运行
print()
print('5.函数的返回值')
# 定义列表中数据求和的函数
def list_sum1(list_data):  # 将列表中的数据求和
    """
    函数整体注释 将列表中数据求和
    :param list_data: 参数注释
    :return: 返回值注释
    """
    total = 0
    for i in list_data:
        total += i
    print(total)
    return total  # 当需要用到列表中的和
    # print('666')  # return之后函数结束,后面的代码不会运行
print()
list1 = [1, 2, 3, 4]
data = list_sum1(list1)  # 用变量data接收return后的返回值
print(data)

python中的函数(1)

# 6.函数的说明文档
print()
print('6.函数的说明文档')
help(len)  # 打印函数的说明文档
help(list_sum1)  # 不要函数后面的括号
# 多个参数
# 注解  ->int 提示返回类型是int
#      a:int  提示输入的实参是int类型,但是若不是int类型,它不会报错
def data_sum(a: int, b, c)->int:  # a:int 提示输入的实参是int类型
    """
    求和
    :param a: 数字1
    :param b: 数字2
    :param c: 数字3
    :return: a+b b+c
    """
    print(a+b+c)
    return a+b, b+c  # 不会报错,只是提示
print()
float_data = 3.00
data_sum(1, 2, float_data)
data = data_sum(1, 2, 3)
print(data)  # 返回的是个元组

data1, data2 = data_sum(1, 2, 3)  # 拆包方式
print(data1, data2)

python中的函数(1)

# 7.函数的嵌套调用
print()
print('7.函数的嵌套调用')
def test_a():
    print('a')
def test_b():
    test_a()
    print('b')
test_b()

python中的函数(1)

# 今日练习
'''
(1)定义一个去除列表中重复数据的函数
(2)传入一个列表参数[3,4,2,2,4,0,1,4]
(3)将列表数据去重后进行返回(return)
(4)在外部输出去重后的列表
'''
print()
print('今日练习')
# 定义一个去除列表中重复数据的函数
def list_uniq_1(list_data: list)->list:  # 注解 提示实参为list类型,返回值为list类型
    """
    利用集合set的去重
    去除列表中重复的数据
    :param list_data: 输入的列表
    :return:  返回去重后的列表
    """
    set_1 = set(list_data)
    list_1 = list(set_1)
    return list_1
def list_uniq_2(list_data: list)->list:  # 注解 提示实参为list类型,返回值为list类型
    """
    利用not in
    去除列表中重复的数据
    :param list_data: 输入的列表
    :return:  返回去重后的列表
    """
    list_new = []
    for i in list_data:  # 遍历列表中的每个数据
        if i not in list_new:  # 如果遍历到的数据没有在新列表中
            list_new.append(i)  # 那么把它添加到新列表
        else:  # 如果遍历到的数据在新列表
            pass  # 就跳过
    return list_new
list1 = [3, 4, 2, 2, 4, 0, 1, 4]
list2 = list_uniq_1(list1)
print(list2)
list3 = list_uniq_2(list1)
print(list3)

python中的函数(1)