第三周 Day2 —— Python函数

第二周 Day 2 —— Python函数

一、返回值

1. 什么是返回值

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

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

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

3.怎么将数据返回

​ 1)怎么确定函数返回值

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

​ 2)怎么获取函数返回值

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

def sum1(a, b):
    return a + b

s = sum1(10, 20)
print(s)       # 30
4. 怎么使用函数返回值

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

5. return的使用

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

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

练习:写一个函数,给一个整数,如果这个数是偶数就计算这个熟的阶乘,否则就计算这个数的立方值。

def func1(num: int):
    if num & 1:
        return num ** 3
    else:
        num1 = 1
        for x in range(1, num + 1):
            num1 *= x
        return num1

二、全局变量和局部变量

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

1. 全局变量

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

2. 局部变量

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

3. global

globalreturn都是只能在函数体中使用的关键字。global在函数中定义全局变量。

global的作用:a.在函数内部修改全部变量的值。

b.在函数内部定义一个全局变量。

age = 10
def func():
    global age
    age = 20
    print(age)           # 20
    global name
    name = '小明'


func()
print(age)               # 20
print(name)              # 小明

如果直接在函数内修改全局变量的值,它会在函数内容创建一个对应的局部变量,导致修改失败。

三、匿名函数

1. 什么是匿名函数

​ 匿名函数还是函数。匿名函数可以看成是函数体只有一条语句的普通函数。

定义匿名函数的语法:

(函数名 =) lambda 参数列表:返回值

lambda x: x*2

func1 = lambda x: x**2

func2 = lambda x, y=10: x+y
print(func2(2))          # 12

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

func2 = lambda year: (year % 4 == 0 and year % 100 != 0) or year % 400 == 0

print(func2(400))        # True
print(func2(1998))       # False
2.函数就是变量
  1. Python中定义函数其实就是定义一个类型是function的变量,函数名就是变量名。
  2. 普通变量能做的,函数都可以做。

四、高阶函数

1.实参高阶函数

​ 如果一个函数的握个参数是函数,那么这样的函数就是实参高阶函数。

def fun1(x):              # 实参高阶函数
    print(x() + 10)

func2 = lambda a=10, b=20: 12.4

fun1(func2)     # 22.4
2.返回值高阶函数

​ 如果一个函数的返回值是函数,那么这个函数就是返回值高阶函数。

3. 系统实参高阶函数 —— maxminsortedmapreduce
  1. maxmin

    参数key要求传一个函数,可以通过这个函数来确定比较大小的时候的比较标准。

    key的要求:a. 是一个函数

    b. 这个函数必须有且只有一个参数(这个参数就相当于序列中的每个元素)

    c. 这个函数需要一个返回值(返回值就是比较标准)

    nums = [40, 45, 87, 59, 98]
    # 求元素值最大的元素
    result = max(nums, key=lambda item: item)
    print(result)             # 98
    # 求nums中个位数最大的元素
    result = max(nums, key=lambda item: item % 10)
    print(result)             # 59
    
    ############################################
    
    nums = [128, 88, 90, 71]
    # 求各个位上的数字和最大的元素
    def f(item):
        s = 0
        for x in str(item):
            s += int(x)
        return s
    result = max(nums, key=f)
    print(result)                     # 88
    

    练习:获取nums数值最大的元素

    nums = [123, ‘78’, 89, ‘345’]

    nums = [123, '78', 89, '345']
    result = max(nums, key=lambda item: int(item))
    print(result)                  # 345
    
  2. sorted

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

    练习:

    1)获取students年龄最小的学生(用min)

    2)按照分数对students从大到小排序

    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}
    ]
    # 1)获取students年龄最小的学生(用min)
    result = min(students, key=lambda item: item['age'])
    print(result)
    # 2)按照分数对students从大到小排序
    new_students = sorted(students, reverse=True, key=lambda item: item['score'])
    print(new_students)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值