python入门到精通 _4 def初识函数及进阶

1. 初识函数

函数:是组织好的,可重复使用的,用来实现特定功能的代码段。

将功能封装在函数内,可供随时随地重复利用
提高代码的复用性,减少重复代码,提高开发效率

1.1 函数的定义

## 函数的声明
def 函数名():
	函数体
	return 返回值

## 函数的调用
函数名(参数)

函数使用步骤:
先定义函数
后调用函数

注意:① 参数如不需要,可以省略 ② 返回值如不需要,可以省略 ③ 函数必须先定义后使用

1.2 函数的参数

在函数运行的时候,接受外部传入的数据

传入参数的数量是不受限制的。
可以不使用参数
也可以仅使用任意N个参数

注意事项
函数定义中的参数,称之为形式参数
函数调用中的参数,称之为实际参数
函数的参数数量不限,使用逗号分隔开
传入参数的时候,要和形式参数一一对应,逗号隔开

返回值none:

  1. 什么是None
    None是类型’NoneType’的字面量,用于表示:空的、无意义的
  2. 函数如何返回None
    不使用return语句即返回None
    主动return None
  3. 使用场景
    函数返回值
    if判断
    变量定义

案例:
定义一个函数,名称任意,并接受一个参数传入(数字类型,表示体温)
在函数内进行体温判断(正常范围:37-38度)

def check(num):
    if num < 37:
        print(f"体温为{num},体温不正常,需要隔离")
    elif num > 38:
        print(f"体温为{num},体温不正常,需要隔离")
    else:
        print(f"体温为{num},体温正常")

check(int(input("请输入你的体温:")))

在这里插入图片描述

1.3 局部与全局变量

变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)
主要分为两类:局部变量和全局变量

局部变量:

所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效

局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量

全局变量:

所谓全局变量,指的是在函数体内、外都能生效的变量

global关键字

使用 global关键字 可以在函数内部声明变量为全局变量

综合案例

定义一个全局变量:money,用来记录银行卡余额(默认5000000)
定义一个全局变量:name,用来记录客户姓名(启动程序时输入)
定义如下的函数:
查询余额函数
存款函数
取款函数
主菜单函数
要求:
程序启动后要求输入客户姓名
查询余额、存款、取款后都会返回主菜单
存款、取款后,都应显示一下当前余额
注意存取款数>0
取款应当判断是否大于余额
客户选择退出,程序会退出,否则一直运行

## ATM银行模拟操作
money = 5000000 # 初始金额
name = input("请输入你的名字:") # 键盘输入姓名
# 查询函数
def chax(caoz):
    if caoz == True:
        print("-------查询余额---------")
    print(f"{name}您好!,你当前的余额为:{money}")

# 存款函数
def ck(num):
    if num > 0:
        global money # 设置money为全局变量
        money += num
        print(f"成功存入{num}元")
        chax(False)

# 取款函数
def qk(num):
    global money  # 设置money为全局变量
    if num <= money: # 不能超过余额
        money -= num
        print(f"成功取出{num}元")
        chax(False)

# 主函数界面
def main():
    print("-------------主菜单------------")
    print(f"{name},您好,欢迎来到ATM。请选择操作:")
    print("查询余额\t[输入1]")
    print("存款\t\t[输入2]")
    print("取款\t\t[输入3]")    # 通过\t制表符对齐输出
    print("退出\t\t[输入4]")
    return input("请输入您的选择:")

# 设置无限循环,确保程序不退出
while True:
    choose_input = main() # 调用main界面
    if choose_input == "1":
        chax(True)
        continue    # 通过continue继续下一次循环,一进来就是回到了主菜单
    elif choose_input == "2":
        num = int(input("您想要存多少钱?请输入:"))
        if num < 0:
            print("输入错误")
            continue
        ck(num)
        continue
    elif choose_input == "3":
        num = int(input("您想要取多少钱?请输入:"))
        if num > money:
            print("抱歉,余额不足")
        elif num < 0:
            print("输入错误")

            continue
        qk(num)
        continue
    else:
        print("程序退出啦")
        break       # 通过break退出循环

在这里插入图片描述
在这里插入图片描述

2. 函数进阶

2.1 函数多返回值

函数要有多个返回值

# 定义多返回值
def test_return()
	return 1, 2 # 返回两个值
# 使用x,y接收两个值
x, y = test_return()
print(x)
print(y)

按照返回值的顺序,写对应顺序的多个变量接收即可
变量之间用逗号隔开
支持不同类型的数据return

2.2 函数多种传参方式

使用方式上的不同, 函数有4中常见参数使用方式:

  • 位置参数
  • 关键字参数
  • 缺省参数
  • 不定长参数

2.2.1 位置参数

定义:

位置参数:调用函数时根据函数定义的参数位置来传递参数

语法:

# 位置参数
def user(name, age, gender):
    print(f"你的姓名是:{name},你的年龄是:{age},你的性别是:{gender}")

user("小趴菜", 20, "男")

在这里插入图片描述

注意:传递的参数和定义的参数的顺序及个数必须一致

2.2.2 关键字参数

定义:

关键字参数:函数调用时通过“键=值”形式传递参数.
作用: 可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求.

语法:

# 关键字传参
def user(name, age, gender):
    print(f"你的姓名是:{name},你的年龄是:{age},你的性别是:{gender}")

user(name = "小趴菜", gender = "男", age = 20) # 可变换顺序
user("小趴菜", gender = "男", age = 20) # 也可与位置参数混用

在这里插入图片描述

注意:函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序

2.2.3 缺省参数

定义:

缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值
(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用).
作用: 当调用函数时没有传递参数, 就会使用默认是用缺省参数对应的值.

语法:

# 缺省参数
def user(name, age, gender = "男"):
    print(f"你的姓名是:{name},你的年龄是:{age},你的性别是:{gender}")

user("小趴菜", 20)
user("小趴菜", 20, "女")

在这里插入图片描述

注意:函数调用时,如果为缺省参数传值则修改默认参数值, 否则使用这个默认值

2.2.4 不定长参数

定义:

不定长参数:不定长参数也叫可变参数. 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.
作用: 当调用函数时不确定参数个数时, 可以使用不定长参数

不定长参数的类型:
①位置传递
②关键字传递

①位置传递:

语法:

# 不定长参数
# 位置传递 tuple类型
def user(*args):
    print(args)

user("小趴菜", 20)
user("小趴菜", 20, "女")

在这里插入图片描述

注意:传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是位置传递

②关键字传递:

语法:

# 关键字传递 dict类型
def user(**kwargs):
    print(kwargs)

user(name = "小趴菜", age = 20)
user(name = "小趴菜", age = 20, gender = "女")

在这里插入图片描述

注意:参数是“键=值”形式的形式的情况下, 所有的“键=值”都会被kwargs接受, 同时会根据“键=值”组成字典.

2.3 匿名函数

2.3.1 函数作为参数传递

在前面的函数学习中,我们一直使用的函数,都是接受数据作为参数传入:
数字
字符串
字典、列表、元组等

其实,我们学习的函数本身,也可以作为参数传入另一个函数内。

语法:

# 函数作为参数传递
def func(compute):
    result = compute(1, 2)
    print(result)
def compute(x, y):
    return x + y

func(compute) # 结果为3

函数compute,作为参数,传入了func函数中使用。
func需要一个函数作为参数传入,这个函数需要接收2个数字进行计算,计算逻辑由这个被传入函数决定
compute函数接收2个数字对其进行计算,compute函数作为参数,传递给了func函数使用
最终,在func函数内部,由传入的compute函数,完成了对数字的计算操作、

所以,这是一种,计算逻辑的传递,而非数据的传递。
就像上述代码那样,不仅仅是相加,相见、相除、等任何逻辑都可以自行定义并作为函数传入。

2.3.2 lambda匿名函数

函数的定义中
def关键字,可以定义带有名称的函数
lambda关键字,可以定义匿名函数(无名称)
有名称的函数,可以基于名称重复使用
无名称的匿名函数,只可临时使用一次

匿名函数定义语法:

lambda 传入参数:函数体()

lambda 是关键字,表示定义匿名函数
传入参数表示匿名函数的形式参数,如:x, y 表示接收2个形式参数
函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码

def func(compute):
    result = compute(1, 2)
    print(result)

func(lambda x, y: x+y) # 结果为3

使用def和使用lambda,定义的函数功能完全一致,只是lambda关键字定义的函数是匿名的,无法二次使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值