"""
函数补充
1.函数的参数为函数
2.lambda关键字 -- 简化函数的编写
3.偏函数(partial function):在不改变原有代码的情况下,对其进行参数固定值改写
4.变量的作用域问题
-
局部变量和全局变量同名的问题
-
global关键字使用
"""
1.测试函数的参数为函数
普通函数,输出了一个字符串
def fn():
print("fn....在执行")
def test_fn1(fn):
使用传递进来的函数
fn()
print("fn....函数允许了")
test_fn1(fn)
案例一:使用自定义规则(名字的长短)对列表进行排序
sort_list=[10,34,2,57,13,98]
print("排序前:",sort_list)
sort_list.sort()
print("排序后:",sort_list)
sort_list1=["zhangsan","lisi","wangwu","lijian","llaixitao"]
print("排序前:",sort_list1)
sort_list1.sort()
print("排序后:",sort_list1)
1.获取字符串长短函数
def get_len(str):
return len(str)
sort_list2=["zhangsan","lisi","wangwu","lijian","llaixitao"]
print("排序前:",sort_list2)
为排序增加规则函数,并使用命名关键字参数传递函数,原理就是函数作为参数传递
sort_list2.sort(key=get_len)
print("排序后:",sort_list2)
2.测试lambda关键字
def lambda_test1():
return "zhangsan"
print(lambda_test1())
使用lambda对其进行简化
lijian=lambda :"zhangsan"
print(lijian())
def lambda_test2(x):
return x
print(lambda_test2(10))
使用lambda对其进行简化
lijian1=lambda x:x
print(lijian1(10))
def sum(x,y):
return x+y
sum=lambda x,y : x+y
print(sum(10,20))
以lambda作为参数实现排序规则
print("排序前:",sort_list2)
sort_list2.sort(key=lambda x : -len(x))
print("排序后:",sort_list2)
lambda作为返回值返回 ===》函数的返回值为函数
def test_return():
return lambda x:x +10
lijian2=test_return()
res=lijian2(100)
print(res)
3.测试偏函数
sum2=lambda x,y : x+y
在sum2的基础上对其进行改写实现功能为 恒与100相加
一般情况下不允许修改原有代码
print(id(sum2))
import functools
使用偏函数进行改写
sum2=functools.partial(sum2,y=100)
print(id(sum2))
print(sum2(50))
4.测试参数的作用域问题
全局变量
username="zhangs"
def test_args():
username="lisi"
提升作用域,变为全局变量 global在定义时不能是使用定义且直接赋除值的形式
global password="123456"
global password
password="123456"
局部变量
print(f"username:{username}")
test_args() #username:lisi 同名问题中采用就近原则
print(password)
课堂练习:创建一个函数,用来存储学生信息,其中包含信息如下:姓名,学号,三科成绩(语文数学英语),
对学生进行数学成绩排序11 1111
"""
{"name":"zhangsan1","number":"2014162000","语文":98,"数学":60,"英语":77}
{"name":"zhangsan2","number":"2014162034","语文":88,"数学":65,"英语":75}
{"name":"zhangsan3","number":"2014162023","语文":68,"数学":62,"英语":78}
{"name":"zhangsan4","number":"2014162020","语文":78,"数学":80,"英语":73)
{"name":"zhangsan5","number":"2014162021","语文":92,"数学":90,"英语":67}
提示:
1.字典存储单个学生信息2.列表存储全部学生信息
3.定义排序规则
4.使用列表排序
11 11 11
"""
#1.创建一个题目函数,后续运行即可
def main():
#3.将所有的学生信息存储在列表中
students = []
#2.获取每个学生的信息并封装为字典
while True:
running=int(input("请选择要进行的操作:1.继续录入 2.推出"))
if(running == 1):
name=input("请输入学生姓名:")
number=input("请输入学生的学号:")
score1=int(input("请输入学生的语文成绩:"))
score2=int(input("请输入学生的数学成绩:"))
score3=int(input("请输入学生的英语成绩:"))
#创建一个空字典
student = {}
student["name"] = name
student["number"] = number
student["语文"] = score1
student["数学"]= score2
student["英语"]= score3
#将每个学生的内容存储在学生总列表中
students.append(student)
else:
break
print("排序前:",students)
#4.定义排序规则,并排序
students.sort(key=lambda x:x["数学"])
#5.返回排序后学生列表即可
print("排序后:",students)
main()