函数的进阶
一、返回值
"""
从函数内部传递到函数外部放入数据
"""
"""
如果实现函数的功能产生了新数据,那么就返回
"""
"""
返回值就是return后面的值(如果没有return,就默认返回None)
函数调用表达式的值,就是函数返回值
"""
"""
需要将函数中产生的数据返回的时候使用return: return 需要返回的数据
提前结束函数(执行函数的时候,遇到return,函数直接结束)
"""
def big1(num1: int):
if num1 & 1 == 0:
new_num = 1
for x in range(1, num1+1):
new_num *= x
return new_num
else:
return num1 ** 3
re = big1(5)
print(re)
二、全局变量和局部变量
"""
没有定义在"函数里面"或者"类里面"的变量都是全局变量。
作用域:是从定义开始到程序结束
"""
"""
定义在函数中的变量就是局部变量(形参就是局部变量)
作用域:从函数定义开始到函数结束
"""
"""
如果直接在函数内部修改全局变量的值,他会在函数内创建一个对应的局部变量,导致失败
global:1.可以再函数内部修改全局变量
2.在函数内部定义一个全局变量
"""
三、匿名函数
"""
匿名函数的语法:
lambda 参数列表:返回值
相当于
def 函数名(参数列表):
return 返回值
"""
def func1(x):
return x*2
func1 = lambda x: x*2
print(func1(5))
func2 = lambda x: x % 4 == 0 and x % 100 != 0 or x % 400 == 0
print(func2(2011))
四、函数就是变量
五、实参高阶函数
"""
key的要求:
a.是一个函数
b.这个函数必须有且只有一个参数(这个参数就相当于序列中的元素)
c.这个函数需要一个返回值(返回值就是比较标准)
"""
nums = [78, 56, 89, 18, 25]
def f(str1):
s = 0
for x in str(str1):
s += int(x)
return s
result = max(nums, key=f)
print(result)
nums = [123, '78', 89, '345']
result1 = max(nums, key=lambda x: int(x))
print(result1)
nums = [78, 56, 89, 18, 25]
new_nums = sorted(nums, key=lambda x: x % 10)
print()
print(new_nums)
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}
]
result2 = min(students, key=lambda x: x['age'])
print(result2)
result3 = sorted(students, key=lambda y: y['score'], reverse=True)
print(result3)
students.sort(key=lambda z: z['score'], reverse=True)
print(students)