0
点赞
收藏
分享

微信扫一扫

python进阶-----十三课(上)--函数进阶

天天天蓝loveyou 2022-03-27 阅读 76

python进阶,在第一期的基础上做了极大的优化,整体更加美观易懂

十三、函数进阶 ()

内容较多(该篇幅超过4000字),分为上下两个篇幅,此篇是上

13.1、定义嵌套

def a():
    def b():  # 在函数a里面再定义一个函数b,这就是函数嵌套
        print()

13.2、函数的调用嵌套

def test1():  # text1()函数
    print("开头")
    print("中间")
    print("结尾")


def test2():  # text2()函数
    print("test2开头")
    test1()
    print("test2结尾")


test2()  # 运行过程:从test2开始运行,打印test2函数内的第一行,即第一个print,然后检测到test1函数,跳到test1函数内部,打印test1里面的三个打印,test1打印完后再跳到test2里面输出test2里面的最后一个print,然后程序运行完成。
# 结果:
>>> test2开头
>>> 开头
>>> 中间
>>> 结尾
>>> test2结尾

小需求:随机输入一个数字,然后嵌套观众老爷,我错了,例如输入5,然后打印5遍观众老爷我错了(根据输入的数字打印对应的次数)

shu = int(input("请输入循环次数:"))
def wcl():
    print("观众老爷,我错了")

def wcl1(a):  # a为接收的数字,控制循环次数
    print("_" * 30)  # 打印30个_
    i = 0
    while i < a:  # 通过传入的参数来控制循环
        wcl()  # 跳入wc1函数,运行打印"观众老爷,我错了"
        i += 1  # 用于给循环结束提供条件
    print("_" * 30)

wcl1(shu)  # 到这一行函数才开始运行,shu接收输入的数字,并且传入wcll()函数中
>>> 请输入循环次数:5
>>> ______________________________
>>> 观众老爷,我错了
>>> 观众老爷,我错了
>>> 观众老爷,我错了
>>> 观众老爷,我错了
>>> 观众老爷,我错了
>>> ______________________________

13.3、函数嵌套

小需求:输入三个数,a:求三个数之和,b:求三个数平均值

num1, num2, num3 = map(int, input("请输入三个数,(中间用空格隔开):").split())  # 将输入的三个数分隔开,并分别传入num1, num2, num3

def he(a, b, c):  
    h = a + b + c  # 对传入的参数相加求和并赋值给h,在下一行通过return返回
    return h


def ave(a, b, c):
    print(f"输入的数字为{a}  {b}  {c}")
    print(f"{num1}+{num2}+{num3}的和为{he(a, b, c)}")  # 从这里开始函数开始调用he函数


ave(num1, num2, num3)  # 函数从这里开始,调用ave函数,并且传参
# 结果
>>> 请输入三个数,(中间用空格隔开)1 3 5
>>> 1+3+5的和为9

13.4、变量作用域

13.4.1、局部变量

小需求:定义一个函数,在函数体内部声明一个变量,函数体内部访问,函数体外部访问, 查看区别

def test3():
    b = 10
    print(b)  # 在函数体内部,

test3()
# 结果:
>>> 10
def test4():
    c = 10

test4()  # 函数体内部没有print函数,所以不会有输出结果
print(c)  # 在函数体外部,脱离函数体直接销毁,所以会报错
# 结果:
>>> NameError: name 'c' is not defined
# 报错:原因,b变量是局部变量,在函数体外不能访问

13.4.2、全局变量

全局变量指:在函数体内外的变量,全局变量在所有地方都能生效的变量

a1 = 100  # 全局变量,在函数体外面声名
def test3():
    print(a1)  # 这个时候a1=100
def test4():
    test3()  # 调用test3函数
    # 尝试对a1赋值为200
    a1 = 200  # 如果想修改a1为全局变量,直接使用关键字global:声明变量为全局变量
    print(a1)  # 再打印重新赋值后的a1

test4()
print(a1)  # 最后在函数体外再打印一下a1,查看a1是否有变化
# 结果:
>>> 100  # test3里面a1,结果为100
>>> 200  # test4里面的a1,改变a1,在局部内对a1重新赋值,a1为200。
>>> 100  # 函数体外面,a1为全局变量,值不变,结果依旧为100
a1 = 100  # 全局变量,在函数体外面声名
def test3():
    print(a1)
def test4():
    test3()
    global a1  # 声明变量为全局变量
    a1 = 200
    print(a1)

test4()
print(a1)
# 结果:
>>> 100
>>> 200  # test4里面的a1,通过global函数改变a1为全局变量,并且对a1重新赋值,a1为200。
>>> 200  # 因为global函数将a1定义为全局变量,并且为a1进行重新赋值,所以a1变成了200

13.5、lambda表达式

小需求,定义一个函数,有返回值100

正常写法

def a():
    return 100  # 如果使用print(100),结果会变成,100,None
print(a())
# 结果:
>>> 100

使用lambda函数

b = lambda: 100  # 无参数列表
# print(b)  # 直接打印b会得到lambda的地址<function <lambda> at 0x0000020C56BC7168>
print(b())  # 得到100返回值,通过把保存的变量当成是函数调用
# 结果:
>>> 100
def add(a, b):
    return a + b

print(add(2, 5))
# 结果:
>>> 7

使用lambda函数

c = lambda a, b: a + b  # 定义一个函数c,函数里面有两个参数a, b,进行相加运算,然后return返回
d = c(5, 6)  #  对函数c进行传参,将数字5, 6作为参传入
print(d)
# 结果:
>>> 11
举报

相关推荐

0 条评论