函数的返回值
从函数内部传递到函数外部的数据,return后面的值就是返回值.
获取函数调用表达式的值,就是获取这个函数的返回值
一个函数只有1个返回值,多个数据作为函数的返回值返回,可以在return后面写多个数据
return还可以提前结束函数,函数体遇到return,直接结束
def func2(a,b):
reslut1=a+b
reslut2=a*b
return reslut1,reslut2
func2(10,20)
def func3():
print('+++++++')
print('+++++1++')
return # 相当于 return None
print('+++++2++') # 后面无效代码,无法执行
print(func3())
变量作用域
变量作用域:变量在完成定义后,可以使用的范围
变量分为全局变量,局部变量
全局变量:没有定义在函数里面或者类里面的变量都是全局变量,从定义开始,到程序结束,都能使用
局部变量:定义在函数里面的变量是局部变量(形参也是局部变量;定义在类里的变量叫做属性)
全局变量默认保存在全局栈区间中,程序结束前可以随时使用
局部变量默认保存在函数对应的临时栈区间,调用结束后,消失
在函数中定义变量的时候,可以在定义变量前加global
关键字,让函数中的变量保存在全局栈区间中,这样就可以随时使用.
如果要在函数中修改一个全局变量的值,必须先用global
对变量进行说明.
函数参数的确定
实参给怎样的数据,由参数在函数体中的使用方式决定
实参高阶函数-函数的参数是函数
如果一个参数是函数的时候,传参有两种方式:1)普通函数的函数名 2)匿名函数
匿名函数
匿名函数本质还是函数,用来实现简单的功能
语法:
函数名=lambda 形参列表:返回值
相当于:
def 函数名(形参列表):
return返回值
# 示例1 定义一个函数求两个和
sum2=lambda num1,num2:num1+num2
print(sum2(10,20)) # 30
print(sum2(num1=100,num2=200)) # 300
常用的实参高阶函数
1.max,min,sorted
使用方法:
1)max(序列) --直接比较序列元素大小,求出最大值
2)max(序列,key=函数) --按照函数制定的比较规则比较元素大小,求出最大值
函数的要求:a.有且只有一个参数(参数代表序列中每一个元素)
b.需要有一个返回值(返回值是比较的对象,也就是参数和元素之间的关系)
# 示例1.求nums中值最大的元素
nums=[12,23,49,23,83,45,67]
result=max(nums,key=lambda item:item)
print(result)
# 练习1:求nums中十位数最大的元素: 90
nums = [9108, 23, 167, 90, 556, 149]
result=max(nums,key=lambda item:item%100//10) # 取十位数 nums//10%10 or nums%100//10
print('练习1:',result)
# 练习2:求nums中绝对值最小的元素
# abs(数据) -返回指定数据的绝对值
nums = [-992, 12, 78, -34, 99]
result=min(nums,key=lambda item:abs(item))
# result=min(nums,key=lambda item:item**2) # 平方越大,绝对值越小
print('练习2:',result)
2.map -基于原序列中元素根据要求创建一个新的序列
使用方法:
1)map(函数,序列) --根据函数制定的规则,将指定序列的元素转化为新序列的元素
函数的要求:a.有且只有1个参数(参数代表序列中的元素)
b.有返回值(返回值对应新序列中的元素)
2)map(函数,序列1,序列2,序列3…)
函数的要求:a.有且只有n个参数(参数代表序列中的元素)
b.有返回值(返回值对应新序列中的元素)
# 示例1:创建一个列表,列表中的元素是nums中所有元素的个位数
nums=[82,36,13,64,34,92,71]
new_nums=[i%10 for i in nums]
result=map(lambda item:item%10,nums) # 结果显示为迭代器
print('示例1:',list(result))
print(new_nums)
# [2,6,3,4,4,2,1] 列表推导式也能用 nums=[i%10 for i in nums]
# 示例2.将A和B中的元素对应求和产生新的系列
A=[12,23,31,41,51]
B=[23,41,231,23,45]
result=map(lambda i1,i2:i1+i2,A,B)
print(list(result))
# 练习1:将nums中所有的元素乘以10
nums = [82, 67, 89, 6617, 90, 23, 71]
result=map(lambda item:item*10,nums)
print('练习1:',list(result))
# 练习2:基于scores创建一个列表,列表中元素根据nums中元素确定为'及格'或者'不及格'
scores = [82, 67, 89, 66, 90, 23, 71]
# ['及格', '及格', '及格', '及格', '不及格', '及格']
result=map(lambda item:'及格'if item>=60 else'不及格',scores)
print('练习2:',list(result))
3.reduce-将序列中的所有元素,通过制定的规则合并成一个新的数据
使用方法:
reduce(函数,序列,默认值)
函数要求:a.有且只有2个参数(第一个参数指向默认值,第二个参数指向序列中的所有元素)
b.需要返回值(描述合并方式,说明结果是默认值和序列中的元素是怎么样操作得到的)
求和默认值设为0
求乘积默认值设为1
合并为字符串默认值设为空字符串
注意:reduce使用之前需要先导入
from functools import reduce
from functools import reduce
# 示例1:求和nums所有元素的和
nums=[10,20,30,40]
result=reduce(lambda i,item:i+item,nums,0)
print(result)
# 示例2:求nums所有的元素的乘积
nums=[10,20,30,40]
result=reduce(lambda i,item:i*item,nums,1)
print(result)
# 示例3:求nums所有的元素个位数的和
nums=[27,23,45,26]
result=reduce(lambda i,item:i+item%10,nums,0)
print(result)
# 示例4:将所有元素合并成一个字符串:
nums=[23,231,412,51]
result=reduce(lambda i,item:i+str(item),nums,'')
print(result)