cxz Day11. 总结 函数的进阶

Day11. 总结 函数的进阶

一、 返回值

1. 什么是返回值

函数从函数内部传递到函数外部的数据就是函数的返回值

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

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

3. 怎么将数据返回

  1. 怎么确定函数返回值

return关键字后面的值就是返回值(如果没有return,默认返回None)

  1. 怎么获取函数的返回值

函数调用表达式的值就是函数返回值

4. return的使用

  1. 需要将函数中产生的数据返回的时候使用return :return 需要返回的数据

  2. 提前结束函数(执行函数体的时候如果遇到return,函数直接结束)

  • 例题:写一个函数,给一个整数,如果是偶数就计算这个数的阶层,否则计算这个数的立方值。
def calculate1(int1: int):
    if int1 & 1:
        new_int1 = int1 ** 3
        return new_int1
    else:
        s3 = 1
        for x in range(1, int1 + 1):
            s3 *= x
        return s3

二、全局变量和局部变量

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

1.全局变量

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

a = 10  # a 是全局变量
if True:
    print('=====')

for x in range(3):
    b = 100  # b和x是全局变量
print('b')

2. 局部变量

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

3.global

global 和 return 都是只能在函数体中使用的关键字

如果直接在函数内部修改全局变量的值,他会在函数内部创建一个对应的局部变量,导致修改失败。
global作用一:在函数内部修改全局变量的值
作用二:在函数内部定义一个全局变量

age = 18


def func4():
    global age  # 加global后就不会在函数内部创建一个新的age
    age = 20
    print('函数内部的年龄', age)


func4()  # 20
print('函数外部的年龄', age)  # 18

4. 什么是匿名函数 – 匿名函数也是函数

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

def func1(x):
    return x * 2

func9 = lambda x: x * 2
  • 例题:写一个匿名函数判断指定的年是否是闰年
year = lambda year1: year1 % 4 == 0 and year1 % 100 != 0 or year1 % 400 == 0

print(year(2001))

三、函数是变量

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

def func1():
    print('函数')
# 打印变量
print(func1)
# 查看变量类型
print(type(func1))
# 查看变量类型
print(id(func1))
# 用一个变量给另一个变量赋值
z = func1

1.高阶函数

  1. 实参高阶函数 – 如果一个函数的某个参数是函数,那么这样的函数就是实参高阶函数

  2. 返回值高阶函数 – 如果一个函数的返回值是函数,那么这个函数就是返回值高阶函数

2. 系统实参高阶函数

max, min, sorted, map, reduce

  1. max, min, sorted

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

nums = [78,67,55,18,29]
# 求nums中个位数最大的元素
result = max(nums, key= lambda item: item % 10)  # (item指向序列中所有的元素)
print(result)
# 求各个位上的数字和最大的元素
def f(item):
    s = 0
    for x in str(item):
        s += int(x)
        return s
result = max(nums, key=f)
print(result)
nums = [123, '78', 89, '345']
比较nums数值最大的元素
result = max(nums, key=lambda item: int(item))
print(result)

nums = [78,67,55,18,29]
# 按照个位数的大小从小到大排序
result = sorted(nums, key=lambda item: item % 10)
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中年龄最小的学生
# 按照分数值对学生进行从大到小排序
result1 = min(students, key=lambda item: item['age'])
result2 = sorted(students, key=lambda item:item['score'], reverse=True)
print(result1)
print(result2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值