python函数

python函数,第1张

python函数

函数

函数:将一段具有独立功能的代码块整合到一个整体并命名,在需要的位置调用这个名称即可完成对应需求 *** 作。
→ 可以更高效的实现代码重用

1.函数的定义

def 函数名(参数):
    代码1
    代码2
    ......

2.函数的调用
函数名(参数)
在python中,函数必须先定义后使用
3.需求:封装ATM机功能选项–定义函数

def select_func():
    print("---请选择功能---")
    print("查询余额")
    print("存款")
    print("取款")
    print("---请选择功能---")
    
print("密码正确登录成功")
select_func()
print("查询余额完毕")


4.函数的参数以及返回值
①需求:一个函数完成两个数的加法运算

def add_num(a,b):
    result = a + b
    print(result)

add_num(1,2)


② 返回值

def buy():
    return '糖'
goods = buy()
print(f'我买了{goods}')


5.函数的说明文档

查看函数的说明文档
help(函数名) → 查看函数的说明文档

def sum_num(a,b):
    """求和函数"""
    return a + b
help(sum_num)


6.函数的嵌套调用
→一个函数里面又调用了另外一个函数

def testB():
    print('===testB start===')
    print("这里是函数testB")
    print("===testB end")
def testA():
    print("===testA start===")
    testB()
    print("===testA end===")

testA()


7.函数的简单应用
需求:求三个数的平均值

def sum_num(a,b,c):
    return a + b + c
def average_num(a,b,c):
    sumResult = sum_num(a,b,c)
    return sumResult / 3

result = average_num(1,2,3)
print(result)


8.函数变量的作用域
主要分为两类:局部变量和全局变量
(1)局部变量

def testA():
    a = 100
    print(a)
testA()
print(a)


(2)全局变量

a = 100
def testA():
    print(a)
def testB():
    print(a)
testA()
testB()


(3)在函数体内部修改全局变量

a = 100
def testA():
    print(a)
def testB():
    global a
    a += 1
    print(a)
testA()
testB()
print(f'全局变量a = {a}')


9.函数的返回值
(1)return会退出当前函数,一个函数中有两个return时,只会执行前一个
(2)一个函数多个返回值

def return_num():
    return 1,2,3
result = return_num()
print(result)

注意:① 返回多个数据时,默认是元组类型 ② return后可接列表、元组或字典

10.函数的参数
(1)位置参数

def user_info(name,age,gender):
    print(f'名字是{name},年龄为{age},性别为{gender}')

user_info("丁家雄",21,"男")

(2)关键字参数
调用时,通过“键=值”的形式指定,清除了顺序需求
【调用时,如果有位置参数,位置参数必须在关键字参数前,关键字参数之间不存在先后顺序】

def user_info(name,age,gender):
    print(f'名字是{name},年龄为{age},性别为{gender}')
user_info("丁家雄",age = 21,gender= "男")
user_info(name="丁家雄",21,"男")


(3)缺省参数(默认参数)
注意:所有位置参数必须在默认参数前,包括函数定义和调用

def user_info(name,age,gender = "男"):
    print(f"名字是{name},年龄为{age},性别为{gender}")
user_info("丁家雄",21)


(4)不定长参数【可变参数】
用于不确定调用的时候会传递多少个参数(可不传)的场景。
① 包裹位置传递【元组】

def user_info(*args):
    print(args)
user_info()
user_info("丁家雄",21)


传进的所有参数都被args变量收集,合并为一个元组

② 包裹关键字传递

def user_info(**kwargs):
    print(kwargs)

user_info(name = "丁家雄",age = 21)


返回一个字典

11.拆包和交换变量值
(1)拆包

def return_num():
    return 100,200
num1,num2 = return_num()
print(num1)
print(num2)


(2)交换变量值

#借助第三变量
a = 10
b = 20
print(f'交换前的a为{a},b为{b}')
c = 0
c = a
a = b
b = c
print(f'交换后的a为{a},b为{b}')
#方法二
a = 10
b = 20
print(f'交换前的a为{a},b为{b}')
a,b = b,a
print(f'交换后的a为{a},b为{b}')


12.引用
(1)id判断int以及列表
int:(可得int类型为不可变数据类型)

a = 1
b = a
print(b)
print(f'a的id为{id(a)}')
print(f'b的id为{id(b)}')
a = 2
print(b)
print(f'a的id为{id(a)}')
print(f'b的id为{id(b)}')


列表:【列表是可变数据类型】

lista = [10,20]
listb = lista
print(f'列表a的id为{id(lista)}')
print(f'列表b的id为{id(listb)}')
lista.append(30)
print(listb)
print(f'列表a的id为{id(lista)}')
print(f'列表b的id为{id(listb)}')


当引用将int当做实参时,id会变化,因为int数据不可变,而列表相反不会变化
13.可变和不可变数据类型


14.学员管理系统

info = []
def print_info():
    print("-" * 20)
    print("欢迎来到学员管理系统")
    print("1.添加学员")
    print("2.删除学员")
    print("3,修改学员信息")
    print("4.查询学员信息")
    print("5.显示所有学员信息")
    print("6.退出系统")
    print("-" * 20)

def add_info():
    new_id = input("请输入学号:")
    new_name = input("请输入姓名:")
    new_tel = input("请输入手机号:")

    global info
    for i in info:
        if new_name == i['name']:
            print("该用户已存在!")
            return
    info_dict = {}
    info_dict['id'] = new_id
    info_dict['name'] = new_name
    info_dict['tel'] = new_tel

    info.append(info_dict)
    print(info)

def del_info():
    del_name = input("请输入您要删除的学员的名字:")
    global info
    for i in info:
        if del_name == i['name']:
            info.remove(i)
            break
        else:
            print("该学员不存在")

    print(info)

def modify_info():
    modify_name = input("请输入您要修改的学员的姓名:")
    global info
    for i in info:
        if modify_name == i['name']:
            i['tel'] = input("请输入新的手机号:")
            break
        else:
            print("该学员不存在!")
    print(info)

def search_info():
    search_name = input("请输入您要查询的学员的姓名:")
    global info
    for i in info:
        if search_name == i['name']:
            print("查找到的学员信息如下:")
            print(f"该学员的学号为{i['id']},姓名是{i['name']},手机号为{i['tel']}")
            break
        else:
            print("该学员不存在!")

def print_all():
    print("学号t姓名t手机号")
    for i in info:
        print(f"{i['id']}t{i['name']}t{i['tel']}")


while True:
    print_info()
    user_num = input("请选择您需要的功能序号:")
    if user_num == '1':
        add_info()
    elif user_num == '2':
        del_info()
    elif user_num == "3":
        modify_info()
    elif user_num == "4":
        search_info()
    elif user_num == "5":
        print_all()
    elif user_num == "6":
        exit_flag = input("确定要退出吗?yes or no")
        if exit_flag == 'yes':
            break
    else:
        print("输入错误,请重新输入")


15.递归
特点:函数自己调用自己;必须有出口
需求:3以内数字累加和

def sum_numbers(num):
    if num == 1:
        return 1
    return num + sum_numbers(num - 1)
sum_result = sum_numbers(3)
print(sum_result)

16.lambda表达式

如果函数有一个返回值,并且只有一句执行代码,可以用lambda简化

lambda表达式的参数可有可⽆,函数的参数在lambda表达式中完全适⽤。

lambda表达式能接收任何数量的参数但只能返回⼀个表达式的值。

(1)lambda函数实现

def fn1():
    return 200
print(fn1)
print(fn1())

fn2 = lambda : 100
print(fn2)
print(fn2())


(2)计算a+b

fn1 = lambda a,b : a + b
print(fn1(1,2))

(3)lambda的参数形式
①无参数
②一个参数
③ 默认参数
④ 可变参数*args
⑤ 可变参数 **kwargs

fn1 = lambda : 100
print(fn1())
fn2 = lambda a : a
print(fn2("丁家雄"))
fn3 = lambda a,b,c = 100 : a + b + c
print(fn3(1,2))
fn4 = lambda *args : args
print(fn4(1,2,3,4))
fn5 = lambda **kwargs : kwargs
print(fn5(name = '丁家雄',age = 21))


(4)带判断的lambda

fn1 = lambda a,b : a if a > b else b
print(fn1(100,200))


(5)列表数据按字典key值排序

students = [
    {'name':"丁",'age':21},
    {'name':'王','age':21},
    {'name':'小丁','age':0}
]
#按name值升序排列
students.sort(key = lambda x : x['name'])
print(students)
#按name值降序排列
students.sort(key = lambda x : x['name'],reverse=True)
print(students)
#按age值升序排列
students.sort(key = lambda x : x['age'])
print(students)

17.高阶函数
将函数作为参数传入,这样的函数称为高阶函数

def sum_num(a,b,f):
    return f(a) + f(b)
result = sum_num(-1,2,abs)
print(result)

18.内置高阶函数
(1)map(func,lst)
将传⼊的函数变量func作⽤到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。

需求:计算列表序列中各个数字的3次方

list1 = [1,2,3,4,5]
def func(x):
    return x ** 3
result = map(func,list1)
print(result)
print(list(result))

(2)reduce(func,lst)
其中func必须有两个参数。每次func计算的结果继续和序列的下⼀个元素做累积计
算。
reduce()传入的参数func必须接收2个参数

import functools
list1 = [1,2,3,4,5]
def func(a,b):
    return a + b
result = functools.reduce(func,list1)
print(result)

(3)filter()
filter(func, lst)函数⽤于过滤序列, 过滤掉不符合条件的元素, 返回⼀个 filter 对象。如果要转换为列表,可以使⽤ list() 来转换。

list1 = [i for i in range(1,11)]
def func(x):
    return x % 2 == 0
result = filter(func,list1)
print(result)
print(list(result))

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5156607.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存