一.闭包
闭包是在一个函数内部定义一个函数,内层函数对外层函数的非全局变量的引用
def hello ():
name = '小明'
def world(activity):
return name+activity
return world
adv = hello()
print(adv('打篮球')) #结果:小明打篮球
二常用函数
1.sorted
排序
lists = [2,5,2,4,7]
print(sorted(lists,reverse=True)) # reverse=True 倒序排序 结果:[7, 5, 4, 2, 2]
print(sorted(lists)) #排正序 结果:[2, 2, 4, 5, 7]
2.filter
筛选符合条件的元素
def get_data(x):
return x%2==0
print(list(filter(get_data,range(1,11)))) #[2, 4, 6, 8, 10]
3.reduce
对一个序列进行累积操作
from functools import reduce
def get_data(x,y):
return x+y
print(reduce(get_data,range(1,11))) #55
4.map
def get_data(x):
return x**3
print(list(map(get_data,[1,2,3]))) #[1, 8, 27]
5.reversed
对列表进行逆序操作
lists = [1,3,2,5,2]
print(list(reversed(lists))) #[2, 5, 2, 3, 1] # 排倒序
6.max min
求最大最小值
lists = [1,5,9,87,1,5,97,5]
print(max(lists)) #97
print(min(lists)) #1
三.匿名函数
get_data = lambda x:x**3
print(list(map(get_data,[1,2,3]))) # [1, 8, 27]
from functools import reduce
get_data = lambda x,y:x+y
print(reduce(get_data,range(1,101))) # 5050
四.类和实例
1.类的格式
1、类由 class 开头,类名首字母大写,类名后面的括号表示继承自基类 object ,所
有类都会继承这个类;
2、类的构造方法是 __init__ ,第一个参数是固定的,永远是 self ,类里面通过 self 调
用属性和方法,
class student (object):
#这里面是类属性
gender = '男'
def __init__(self,name):
#这里面是实例属性
self.name = name
stu1 = student('张十三')
stu2 = Student('李四')
print(stu1.name,stu1.gender) # 张十三 男
print(stu2.name,stu2.gender) # 李四 男
print(Student.gender) # 男
#类只能调用类属性,,实例可以调用所有属性
2.实例方法,类方法,静态方法:
class student (object):
gender = '男'
def __init__(self,name):
self.name = name
#实例方法
def say(self)
print(f'{self.name}去吃饭')
stu1 = student('张十三') #实例化的过程
stu2 = Student('李四')
stu1.say() #张十三去吃饭
stu2.say() #李四去吃饭
# 类方法
@classmethod
def hello(cls):
print(cls,'hello world')
Student.hello() #<class '__main__.Student'> hello world
# 静态方法
@staticmethod
def world():
print('你好')
Student.world() #你好
3.类的私有属性
如果让内部属性不被外部属性访问,在属性前面加上两个下划线——,实例变量名如果一——开头,就变成一个私有变量,只有内部可以访问,外部不能访问。
class Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def print_score(self):
print('%s: %s' % (self.__name, self.__score))
stu = Student('wang', 22)
print(stu.__name) #AttributeError: 'Student' object has no attribute '__name'
也有办法可以调用,所以说python中没有绝对的私有属性。
ass Student(object):
def __init__(self, name, score):
self.__name = name
self.__score = score
def get_name(self):
return self.__name
def print_score(self):
print('%s: %s' % (self.__name, self.__score))
stu = Student('wang', 22)
stu._Student__name = '小明'
print(stu.get_name()) #小明
4.类的封装
5.类的继承
class Animal:
live = "有生命的"
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self):
print('动物都需要进食')
class Cat(Animal):
pass
class Dog(Animal):
pass
print(Cat.live) #有生命的
p1 = Dog("小花",2,)
print(p1.name,p1.age) #小花 2
6.多重继承
class God:
def fly(self):
print('会飞')
def climb(self):
print('神仙也可以爬树')
class Monkey:
def climb_trees(self):
print('爬树')
class MonkeySun(God, Monkey):
pass
sun = MonkeySun()
sun.climb() #神仙也可以爬树
sun.climb_trees() #爬树
sun.fly() #会飞
7.类的多态
class Animal(object):
def run(self):
print('runing')
class Dog(Animal):
def run(self):
print('Dog is runing')
class Cat(Animal):
def run(self):
print('Cat is runing')
def runclass(obj):
obj.run()
runclass(Animal()) #runing
runclass(Dog()) #Dog is runing
runclass(Cat()) #Cat is runing
8.tapy
可以使用tapy()货物对象的类型:
9.isinstance
用于盘算子类的继承关系
class Animal(object):
def run(self):
print('runing')
class Dog(Animal):
pass
dog = Dog()
isinstance(dog,Dog)
isinstance(dog,object)
10.dir
如果要获得一个对象的所有属性和方法,可以使用 dir() 函数:
import math
dir(math)
11.getattr, setattr,hasattr
getattr() 可以获取类的某个属性, setattr() 可以设置类的某个属性,hasattr() 可
以判断类是否拥有某个属性:
使用getattr()尝试获取对象一个不存在的属性值会报错
class Animal(object):
def __init__(self):
self.type = 'animal'
self.area = 'China'
def run(self):
print('runing')
class Dog(Animal):
pass
dog = Dog()
print(hasattr(dog,'type')) #True
print(hasattr(dog,'run')) #True
print(hasattr(dog,'name')) #False
print(getattr(dog,'area')) #China
setattr(dog,'name','小黑')
print(getattr(dog,'name')) #小黑