赞
踩
1. 匿名函数介绍
2. 语法格式:
lambda [arg1 [,arg2,...argn]]:expression 这一行代码,我们一般称为表达式
示例:
- sum = lambda a,b:a+b
- print(sum(10,20))
3. 总结
匿名函数一般不需要我们主动调用的,一般作为函数的参数使用
4. 匿名函数作为函数的参数-列表中的字典排序
- user_list = [{"name":"zhangsan","age":18},{"name":"lisi","age":19},{"name":"wangwu","age":17}]
-
- #列表中的内容都是字典,想要排序
- #列表的排序,默认是对列表中的数据进行比较大小的,可以对数字类型和字符串进行比较大小
- #但对于字典来说,就不知道怎么比大小,此时,我们需要使用sort函数中的key这个参数,来指定字典比大小的方法
- #key这个参数,需要传递一个函数,一般是匿名函数,字典的排序,其实要指定根据字典的什么键进行排序,我们只需要使用匿名函数返回字典的这个键对应的值即可
- #列表.sort(key=lambda x:x['键']
- #根据年龄排序
- user_list.sort(key=lambda x:x['age'])
'运行
- class Cat:
- def __init__(self, name, age):
- self.name = name
- self.age = age
- print("__init__被调用了")
-
- def show_info(self):
- print(f'小猫的名字是:{self.name},年龄是{self.age}')
-
- def __str__(self):
- return f'小猫的名字是:{self.name},年龄是{self.age}'
-
-
- if __name__ == "__main__":
- cat = Cat("黑猫", 12) #创建对象调用__init__构造函数
- c = cat #不会创建对象,只是给cat对象起别名
- c.show_info()
- print(cat)
'运行
1. 只有 类名() 的格式才会创建对象,调用__init__方法
2.__str__(),重写__str__(),必须返回字符串.可以把对象输出为字符串,如果不重写的话,默认输出的是对象的地址
3.1 __name__变量是python解释器自动维护的变量
3.2 __name__变量,如果代码在本模块中直接运行,值是"__main__"
3.3 __name__变量,如果代码是被导入执行,值是模块名,即代码文件名
反射是将字符串映射到实例变量或实例方法的一种机制。
常见的应用场景:(1)动态加载模块(2)web框架的URL路由
例如:(1)封装好了很多py文件,然后根据不同需求去调用不同模块 (2)写了一个类,其中封装了很多方法,这时你需要提供一个统一的入口供其他人调用(类似路由转发)
这两个问题都可以通过反射很好的解决。
(1) __import__() 动态加载模块
(2)hasattr() 判断实例是否存在字符串对应的属性
(3)getattr() 获取字符串对应的属性
(4)setattr() 将字符串对应的已存在的属性添加到实例中
(5)delattr() 删除实例中字符串对应的属性
在关键字驱动中,关键字表示KeyWord类的方法,想要调用,就使用到了反射。类似于提供一个统一的入口。
KeyWord类
- class KeyWord(object):
- def connect(self, param):
- print('ip地址:'+param[0])
- print('端口号:'+param[1])
'运行
反射统一接口
- def execute_func(obj, func_name, param):
- if hasattr(obj,func_name):
- func = getattr(obj, func_name)
- func(param)
- else:
- raise Exception("在"+type(obj).__name__+"中找不到"+func_name+"方法,请检查")
'运行
调用
- if __name__ == '__main__':
- keyword = KeyWord()
- # 传入关键字
- func_name = "connect1"
- args = ("127.0.0.1", "8081", "mca", "pwd123456")
- execute_func(keyword, func_name, args)
- # 动态导入模块,name代表模块路径,fromlist代表是否导入模块中所有的类或者方法
- func_module = __import__(name="tradekeyword.connect_util", fromlist=True)
- # 1.判断是否存在对应的类
- if hasattr(func_module, 'KeyWord'):
- # 2.判断是否存在对应的类
- cls = getattr(func_module, 'KeyWord')
- # 2.1 判断是否存在该方法
- if hasattr(cls, "connect"):
- # 2.2 获取方法
- func = getattr(cls, "connect")
- # 2.3 执行该方法
- func(cls, ("127.0.0.1", "8081", "admin", "pwd123456"))
- else:
- raise Exception("找不到方法")
- else:
- raise Exception("找不到类")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。