第二周 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
global
和return
都是只能在函数体中使用的关键字。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.函数就是变量
Python
中定义函数其实就是定义一个类型是function
的变量,函数名就是变量名。- 普通变量能做的,函数都可以做。
四、高阶函数
1.实参高阶函数
如果一个函数的握个参数是函数,那么这样的函数就是实参高阶函数。
def fun1(x): # 实参高阶函数
print(x() + 10)
func2 = lambda a=10, b=20: 12.4
fun1(func2) # 22.4
2.返回值高阶函数
如果一个函数的返回值是函数,那么这个函数就是返回值高阶函数。
3. 系统实参高阶函数 —— max
、min
、sorted
、map
、reduce
-
max
、min
参数
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
-
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)