day11 函数进阶

一、全局变量和局部变量

根据变量作用域(能使用的范围)的不同将变量分为:全局变量和局部变量

1. 全局变量

没有定义在函数里面或者类里面的变量都是全局变量、全局变量的作用域是从定义开始到程序结束
全局变量可以在函数里直接用

2.局部变量

定义在函数里面的变量就是局部变量。局部变量的作用域是从定义开始到函数结束
形参也是局部变量

# 全局变量示例1
a = 20
if True:
    print(f'if语句中:{a}')
for _ in range(3):
    print(f'循环中:{a}')
# 全局变量示例2
for _ in range(3):
    b = 100  # 全局变量
print(f'函数外面b:{b}')


def func3(m, n):
    s = m + n
    d = 100 #局部
    print(m, n, d)
3.global

global和return都是只能在函数体中使用的关键字
如果直接在函数内部修改全局变量的值,它会在函数内部创建一个对应的局部变量,导致修改失败

  • 作用1:在函数内部修改全局变量的值
  • 作用2:在函数内部定义一个全局变量
age = 19
def func4():
    global age
    age = 30
    print(f'函数内部的年龄:{age}')

func4() # 不调用是没得结果的!
print(f'函数外部的年龄:{age}')

二、进阶函数

1. 什么是返回值

凡是产生新的数据,就return
从函数内部传递到函数外部的数据就是函数返回值
放在函数里面的数据在调用以后会自动销毁

2. 什么时候函数需要返回值

如果实现函数的功能产生了新的数据,那么这个函数就需要通过返回值把新产生的数据返回

3.怎么将数据返回

1)怎么确定函数返回值
返回值就是return关键字后面的值
没有returb,默认返回None
2)怎么获取函数返回值
函数调用表达式的值就是函数返回值

4. 怎么使用函数返回值

返回值能做的,函数调用表达式都可以做

5.return的使用

1)需要将函数中产生的数据返回的时候,使用return,return返回的数据
2)提前结束函数(执行函数体的如果遇到renturn,就结束函数):一般在if语句中

# 求两个数的和
def sum1(a, b):
    return a + b

# 练习:写一个函数,如果这个数是偶数就计算这个数的阶乘,否则就计算这个数的立方
def fun1(n):
    if n & 1:
        return n ** 3
    else:
        factrial = 1
        for x in range(1, n + 1):
            factrial *= x
        return factrial
print(fun1(9))

三、匿名函数

1. 什么是匿名函数

匿名函数还是函数

定义匿名函数的语法:
函数名=lambda 参数列表:返回值
匿名函数可以看成是函数体只有一条语句的函数的简单方式

func1 = lambda x: x * 2
func2 = lambda x, y=10: x + y
print(func1(10))
print(func1(x=100))
print(func2(2))

# 练习 :写一个匿名函数判断指定的年是否是闰年
years = lambda x: x % 4 == 0 and x % 100 != 0 or x % 400 == 0
print(years(2500))

四、高阶函数

python中定义函数其实就是一个类型是function的变量
普通变量能做的,函数都可以做

1. 高阶函数

1)实参高阶函数 -如果一个函数的某个参数是函数,那么这样的函数就是实参函数
2)返回值高阶函数 -如果一个函数的返回值是函数,那么这个函数就是返回值高阶函数


# 查看变量类型
print(type(x))  # <class 'int'>
print(type(func1))  # <class 'function'>

# 查id地址
# 用一个变量给另外一个变量赋值
def func2():
    return 100
z = func1
z()
list1=[func2,func2(),100]
print(list1[0]())#100
print(list1) #[<function func2 at 0x000001BE7123F0D0>, 100, '函数']
2.系统实参高阶函数

max、min、sorted、map、reduce

1. max、min、sorted

参数key要求传一个函数,可以通过这个函数来确定比较大小的时候的比较标准
key的要求:
a.是一个函数
b.这个函数必须有且只有一个参数,这个参数就相当于序列中每个元素
c.这个函数需要一个返回值(返回值就是比较标准)

# 求个位上数字最大的元素
nums = [78,67,55,18,29]
result= max(nums,key=lambda item:item%10)
print(result)

# 求各个位上的数字和最大的元素
nums = [128,88,90,71]
def fun(item):
    s = 0
    for x in str(item):
        s += int(x)
    return s

result=max(nums,key=fun)
print(result)

# 获取nums数值最大的元素
nums=[123,'78',89,'345']
result =max(nums,key=lambda item:int(item))
print(result) #345 返回符合标准的元素,返回的是字符串

# 对nums按照个位数的大小从小到大排序:[55,67,78,18,29]
nums=[78,67,55,18,29]
new_nums = sorted(nums,key=lambda item: item%10)
print(new_nums)

students = [
    {'name': 'stu1', 'age': 23, 'score': 89},
    {'name': 'stu2', 'age': 18, 'score': 98},
    {'name': 'stu3', 'age': 24, 'score': 100},
    {'name': 'stu4', 'age': 30, 'score': 27},
    {'name': 'stu5', 'age': 10, 'score': 78}
]

# 获取students年龄最小的学生
result=min(students,key=lambda item:item['age'])
print(result)

# 按照分数对students从大到小排序
result=sorted(students,key=lambda item:item['score'],reverse=True)
print(result)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值