wee03day01(函数的返回值)

本文详细介绍了Python中函数返回值的概念、返回值的使用、全局变量和局部变量的区别、匿名函数的定义与应用以及实参高阶函数如map、filter和reduce的用法实例。
摘要由CSDN通过智能技术生成

一. 函数的返回值

1. 返回值的定义

  • 返回值就是从函数内部传递到函数外部的数据(实现函数功能的时候可能会产生新的数据,这个数据如果不通过函数的返回值返回,在函数外部是无法使用这个数据的)

#错误代码

def sum(num1,num2):
    result = num1 + num2
    print(result)

sum(100,200)
print(result)
### 会报错

2.如何将数据作为函数返回值返回

  • return关键字后面的表达式结果就是函数返回值

3.函数外部如何获取函数返回值:

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

注意:

  • 如果执行函数遇到了return,return后面的值就是函数的返回值。如果没有遇到return,函数的返回值是None。
  • 如果实现函数的功能产生了新的数据,这个新的数据应该作为函数的返回值返回,而不是打印。

二. return返回值的作用

  1. 将数据作为函数返回值返回

  2. 提前结束函数    -----  如果执行函数体的时候遇到return,函数直接结束
def func1():
    print('hello world')
    return
    print('+++++')

func1()

#hello world

## 查看是否都是中文

def func1(str1:str):
    for x in str1:
        if not '\u4e00' <= x <= '\u9fa5':
            return False
        return True
print(func1('hello _1world'))

# 直接用return

## 判断用户名是否合法

def func1(str1:str):
    if not str1[0].isupper():
        return False
    count = 0
    for x in str1[1:]:
        if not (x.isupper() or x.islower() or x.isdigit()):
            return  False
        elif x.isdigit():
            count += 1
    if count == 0:
        return False

三. 全局变量和局部变量

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

1.全局变量

  • 定义:没有定义在函数或者类里面的变量就是全局变量;全局变量的作用域是从定义开始到程序结束。
a = 100
print(f"外面使用a:{a}")

for x in range(5):
    b = 200
    print(f"外面使用a:{a}")

def func2():
    print(f"外面使用a:{a}")
func2()

------- a 和 x和b 都属于全局变量,对于x,和b,因为它们也没有写在函数和类中,所以都是全局变量,在任何地方都可以使用

2.局部变量

  • 定义:定义在函数中的变量就是局部变量(包括形参);局部变量的作用是从定义开始到函数结束
def func2(m):
    n = '小明'
    print(f"函数里面才能使用m和n:{m},{n}")
func2(110)
# m / n是局部变量

3. global关键字

  • 全局变量默认保存在全局栈区间,局部变量默认保存在函数对应的临时栈区间
  • 全局栈区间: 程序开始运行时创建的,程序运行结束后自动释放
  • 函数对应的临时栈区间: 调用函数的时候创建,函数调用结束就释放。

注意:可以在函数中通过global关键字修改局部变量的保存方式,让局部变量保存在全局栈区间中。

def fun3():
    global weight
    weight = 30

### 局部变量运行结束后会被释放,全局变量会一直保留

  • 在函数中定义全局变量使用global
  • 在函数中修改全局变量也使用global

四. 匿名函数

1.定义:

  •  本质还是函数(匿名函数是可以用一条语句来实现函数功能的)

2. 语法:

  • lambda 形参列表:返回值
函数名 = lambda 行参列表:返回值

sum2 = lambda num1,num2: num1+num2
print(sum2(10,50))

# 60

练习

# 练习:定义一个匿名函数获取一个整数的十位数
ten = func6 = lambda  num1: num1 // 10 % 10
print(ten(23))
# 练习:定义一个匿名函数求整数列表中所有元素的个位数的和
k =lambda lst: sum([x % 10 for x in lst])
print(k([101,102]))

五. 实参高阶函数        ---  有一个参数是函数的函数

1. 参数是函数的参数如何传参:

  • a. 传满足条件的普通函数的函数名
  • b. 传一个满足条件的匿名函数

**2.常用的实参高阶函数用法:max、min、sorted、列表.sort、map、filter、reduce

         1. max、 min、sorted、 列表.sort
  •  max(容器)  -----  直接比较容器中元素的大小求最大值

  • max(容器,key = 函数)  ------ 按照函数定制规则比较容器中元素大小求最大值
    • 函数的要求:
      • a. 有且只有一个参数,这个参数指向容器中的每个元素
      • b. 需要一个返回值,返回值就是比较对象
    • 案例: 求nums中个位数最大的元素
nums = [19,872,76,54,32,110]
## 这里用匿名函数
result = max(nums, key=lambda item: item % 10)
print(result)
#19

  •  案例: 求学生分数最高的
students = [
    {'name':'张三', 'age':19, 'score':89},
    {'name': '李三', 'age': 23, 'score': 28},
    {'name': '王五', 'age': 20, 'score': 99},
    {'name': '小明', 'age': 29, 'score': 70},
    {'name': '小红', 'age': 18, 'score': 56}
]

result1 = max(students,key=lambda item: item['score'])
print(result1)
  • 案例:求绝对值最大的数字
# 案例:求nums中绝对值最大的元素
nums3 = [19, -872, 76, 54, -32, 110]
result3 = max(nums3,key=lambda x:x**2)
print(result3)


nums3 = [19, -872, 76, 54, -32, 110]
result3 = max(nums3,key=lambda x:abs(x))
print(result3)
  • 案例:将nums中元素绝对值升序排序
  • 案例:将学生列表按年龄降序排列

2. map  基于原来容器中的元素创建新的容器
  • a.map( 函数,容器)

        函数要求:有且只有一个参数,这个参数代表后面这个容器中每个元素

        需要一个返回值,返回值就是新的容器中元素

  • map(函数,容器1,容器2,....)        
    • 有且只有两个参数,分别对应代码后面两个容器中的每个元素
               需要一个返回值,返回值就是新的容器中的元素

练习:使用map将nums中所有的元素都乘以100
                nums = [19, 872, 76, 54, 32, 110]

# 练习:使用map将nums中所有的元素都乘以100
nums = [19, 872, 76, 54, 32, 110]

result = map(lambda x : x*100,nums)
print(list(result))

练习:map(pass,,keys,values)容器先写上, 在lambda 写上

     map(lambda k,v:  (k,v) , keys,values)  ) 是需要几个参数,最后写(k,v)输出样式

# 练习: 基于keys和values的内容创建一个字典
keys = ['name', 'age', 'gender']
values = ['小明', 18, '男']
# {'name': '小明', 'age': 18, 'gender': '男'}

result2 = dict(map(lambda k,v: (k,v),keys,values ))
print(result2)

3.filter 

  • filter(函数,容器)          -- 按照函数制定的规则提取容器中的元素

                  函数要求: 有且只有一个参数,代码容器中的每个元素

                   需要有一个返回值,返回值就需要提取的数据满足条件

案例:提取nums中所有的偶数

nums = [19, 872, 76, 54, 32, 110]
result = filter(lambda item: item % 2 == 0, nums)
print(list(result))

4. reduce  

  • reduce(函数,容器,初始值)  ---  将容器中元素按照函数制定的规则合并成一个数据
  • 加法合并 初始值为0, 乘法为1, 字符串拼接为空串
  • 函数要求:有且只有两个参数,第一个参数对应初始值,第二个参数对应容器的每个元素
  • 注意:reduce 使用前需要先倒入: from functools import reduce
练习:

nums = [19, 872, 76, 54, 32, 110]
#求和
result = reduce(lambda i,item: i + item ,nums,0)
print(result)

# 个位求和
result1 = reduce(lambda i,item: i + item % 10, nums, 0)
print(result1)

#字符串拼接
result5 = reduce(lambda i,item: i+str(item),nums,'')
print(result5)
#19872765432110

# 乘法
#1是初始值,因为是乘法,初始值为1, lambda后面两个参数,第一个是初始值,
#第二个是对用所有元素
result3 =  reduce(lambda i,item: i * item,nums,1)
print(result3)


# 计算求和
list1 =['23','344','90','67']
result4 = reduce(lambda i,item:i+int(item) ,list1,0  )
print(result4)

  • 12
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值