1.返回值
# 1.什么是返回值
'''
从函数内容传递到函数外部的数据就是函数返回值
'''
# 2.什么时候函数需要返回值
'''
如果实现函数功能产生了新的数据,那么这个函数就需要通过返回值把新产生的数据返回
'''
# 3.怎么将数据返回
'''
1)怎么确定函数返回值
返回值就是return关键字后面的值(如果没有return, 默认返回None)
2)怎么获取函数返回值
函数调用表达式的值就是函数返回值
'''
def sum1(a,b):
return a+b
s = sum1(10, 20)
print(s) # 30
# 4.怎么使用函数返回值
# 返回值能做的,函数调用表达式都可以做
def func1():
return 'abc'
print(func1()) # abc
dict1 = {func1():123}
print(dict1) # {'abc': 123}
# 5.return的使用
'''
1)需要将函数中产生的数据返回的时候使用return:return 需要返回的数据
2)提前结束函数(执行函数体的时候如果遇到return,函数直接结束)
'''
def func3():
print('====')
print('----')
return 100
print('0000')
de = func3()
print(de)
# ====
# ----
# 100
2.全局变量和局部变量
# 根据变量作用域(能使用的范围)的不同将变量分为:全局变量和局部变量
# 1.全局变量
# 没有定义在函数里面或则类里面的变量都是全局变量。全局变量的作用域是从定义开始到程序结束。
# 2.局部变量
# 定义函数中的变量就是局部变量(形参也是局部变量)。局部变量的作用域是从定义开始到函数结束。
# 3.global
# global和return都是只能在函数体中使用的关键字
'''
如果直接在函数内容修改全局变量的值,它会在函数内容建一个对应的局部变量,导致修改失败。
global作用1:在函数内部修改全局变量的值
global作用2:在函数内部定义一个全局变量
'''
练习:
age = 18
name = '小小'
def func4():
global age
age = 20
global name
name = '小明'
func4()
print(age, name) # 20 小明
3.匿名函数:
# 1.什么是匿名函数
'''
匿名函数还是函数。匿名函数可以看成是函数体只有一条语句的函数的简写方式
定义匿名函数的语法:
函数名 = lambda 参数列表:返回值
相当于:
def 函数名(参数列表):
return 返回值
'''
练习1:
func1 = lambda x:x*2
# def func1(x):
# return x*2
print(func1(10)) # 20
练习2:
func2 = lambda x,y=10:x+y
# def func2(x, y=10):
# return x+y
print(func2(2)) # 12
练习3:写一个匿名函数判断指定的年是否是闰年
is_leap_year = lambda year:year % 4 == 0 and year % 100 != 0 or year % 400 == 0
print(is_leap_year(2000)) # True
法二:
def func3(year:int):
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
return True
else:
return False
a = func3(1997)
print(a) # False
4.函数就是变量
# 1.python中定义函数其实就是定义一个类型是function的变量,函数名就是变量名。
# 2.普通变量能做的,函数都可以做(查看变量类型,查看变量id,用一个变量给宁一个变量赋值
# 3.高阶函数
# 1)实参高阶函数 - 如果一个函数的某个参数是函数,那么这样的函数就是实参高阶函数
# 2)返回值高阶函数 - 如果一个函数的返回值是函数,那么这个函数就是返回值高阶函数
def func3(x):
print(x()+10)
func3(lambda a= 10, b= 20: 7
# 4.系统实参高阶函数
# max、min、sorted、map、reduce
# 1)max、min
'''
参数key要求传一个函数,可以通过这个函数来确定比较大小的时候的比较标准
key的要求:
a.是一个函数
b.这个函数必须有且只有一个函数(这个参数就相当于序列中每个元素)
c.这个函数需要一个返回值(返回值就是比较标准)
'''
练习1:
nums = [78, 67, 55, 18, 29],求nums中个位数最大元素
result = max(nums, key= lambda item:item % 10)
print(result)
练习2:
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
练习3:
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) # {'name': 'stu5', 'age': 10, 'score': 78}
# 2)按照分数对students从大到小排序
result = sorted(students, key=lambda item:item['score'],reverse=True)
print(result)