Python函数进阶

1. 匿名函数

1.1 匿名函数

没有名字的函数。

'''
语法:
函数名 = lambda 形参列表:返回值


相当于
def 函数名(形参列表):
    return 返回值
'''

1.2 注意

1)匿名函数的本质还是函数;

2)普通函数中的绝大部分内容匿名函数都支持

1.3 练习

练习1:求任意两个数据的和。

# 普通函数
def sum1(num1: int, num2= 2):
    return num1 + num2

# 匿名函数
x = lambda num1,num2= 2: num1 + num2
print(x(10,30))    # 40
print(x(num1=12,num2=33))
print(x(100))

练习2:一个匿名函数判断指定的年是否是闰年。

is_leap_year = lambda year: (year % 4 ==0 and year % 100 != 0) or year % 400 ==0
print(is_leap_year(2022))    # False

练习3:求个位数最大的元素。

# 求最大的元素
nums = [12,39,18,80,34]
print(max(nums))

# 求个位数最大的元素
nums = [12,39,18,80,34]
def func1(x):
    return x % 10


print(max(nums, key=func1))
print(max(nums, key=lambda  x: x % 10))

练习4:求绝对值最大的元素。

nums = [12,39,-18,-80,34]
print(max(nums, key=lambda x: x**2))
print(max(nums, key=lambda x: -x if x < 0 else x))

2. 变量作用域

2.1 变量作用域

变量作用域即变量使用范围;

根据变量作用域不同,可以将变量分为两种:全局变量、局部变量。

2.2 全局变量

1)定义在函数或者类外面的变量就是全局变量(没有定义在函数里面和类里面的变量就是全局变量);

2)全局变量的作用域:从定义开始到程序结束。

# a是全局变量
a = 10

print('外面a:',a)

# b是全局变量
for b in range(3):
    # c是全局变量
    c = 20
    print('循环里面a:',a)
    print('循环里面b:',b)

print('外面b:',b)
print('外面c:',c)

def func1():
    print('函数里面a:',a)
    print('函数里面b:',b)


func1()

2.3 局部变量

1)定义在函数里面的变量就是局部变量。(形参也是局部变量);

2)局部变量的作用域:从定义开始到函数结束。

# d、e、f都是局部变量
def func1(d,e):
    f = 100
    print('函数里面:',d,e,f)


func1(2,5)
# print('函数外面:',d,e,f)    # 报错!

2.4 global关键字

1)变量能不能使用,看的是使用的时候内存中有没有。

2)定义全局变量的时候,全局变量保存在全局栈区间中,程序结束之后才会被自动释放;

局部变量是保存在函数对应的临时栈区间中,函数调用结束就会被自动释放。

3)global是函数体中的关键字,可以在函数体中修饰变量,让变量在使用和保存的时候都在全局栈中进行。

a. 函数中修改全局变量的值

b. 直接在函数中定义全局变量

aa = 100
bb = 100

def func2():
    # 不会修改全局变量aa的值,而是创建一个局部变量aa
    aa = 200
    print('里面aa:',aa)    # 在函数里面使用的是局部变量aa的值

    # print(bb)    # 报错!global修饰变量必须放在这个变量使用之前
    global bb
    bb = 200
    print('里面bb:',bb)

    global cc
    cc = 300


func2(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值