一、内置函数
1. range(start,end,step)
2. zip
- 将多个集合中的元素,结合到一起
nation = ['CN', 'CN', 'US', 'US']
movies = ('斗鱼', '小红书', 'FaceBook', 'Google')
year = {'1992', '1995', '2004', '2010'}
# 多个集合中的数据转变为一个一一个对应的数据
# [('CN', '斗鱼', '1992'), ('CN', '小红书', '2004'), ('US', 'FaceBook', '1995'), ('US', 'Google', '2010')]
result = zip(nation, movies, year)
print(list(result))
3. sorted()
- 排序
result = sorted([1, 0, 20, 12, -90], reverse=True)
print(result)
4. map()
- 将一个可迭代的数据中的每个元素,用一个函数来处理
- 函数:自定义函数以及内置函数
data = ['1', '2', '3', '4']
# 将一个可迭代的对象中的每一个元素,用函数(如int)来处理
# 得到一个新的迭代器
result = map(int, data)
print(list(result))
5. filter()
data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 函数用 a_b来定义
def is_odd(number):
if number % 2 == 0:
return True
else:
return False
listData = filter(is_odd, data)
print(list(listData))
二、面向对象
1. 基本使用
- self:代表当前对象,类似this
- 对象中不包含self的形参,不能在外部调用
- 魔术方法:在某种情况会自动触发
- 析构方法:在对象销毁时候触发
class Person:
age = 10
# 需要构造器来做的,必须用none来赋值
name = None
address = None
# 魔术方法: init: 变量初始化的时候会触发
def __init__(self, name, address):
self.name = name
self.address = address
print('person created')
# 析构方法
'''
1. 对象没有其他方法引用时: 会触发
2. 代码执行完后
3. 通过del 手动删除一个对象的引用时
'''
def __del__(self):
print('person is killed')
# 成员方法:第一个参数为self,代表是当前对象的
def sing(self):
print('sing a song')
def work(self):
print('work hard')
person = Person('erick','xian')
person.sing()
print(person.age)
# 可以给对象加属性,加的属性可以通过del删除
# 删除的属性,必须是加上去的,而不能删除对象本来的属性
person.sex = 'male'
print(person.sex)
del person.sex
# 可以通过类来直接访问对象
print(Person.age)
# 获得当前对象所有属性:{'name': 'erick', 'address': 'xian'}
print(person.__dict__)
2. 权限修饰
class Person:
age = 10
# 需要构造器来做的,必须用none来赋值
# 不带下划线:public
name = None
address = None
# _: protected: 只是约定成俗,但是python其实并没有实现protected的属性
# __: private
_sex = None
__time = None
# 魔术方法: init: 变量初始化的时候会触发
def __init__(self, name, address, sex, time):
self.name = name
self.address = address
self._sex = sex
self.__time = time
print('person created')
ym = Person('erick', 'xian','male','1920')
# 获得当前对象所有属性:{'name': 'erick', 'address': 'xian'}
print(ym.__dict__)
3. 继承
- 多继承:重名方法,继承的()中,先定义哪个父类,就用哪个
class Father:
name = None
age = None
def __init__(self, name, age):
self.name = name
self.age = age
class Son(Father):
sex = None
def __init__(self, name, age, sex):
# 调用父类构造
Father.__init__(self, name, age)
self.sex = sex
son = Son('erick', 11, 'male')
print(son.sex)
print(son.name)
4. 多态
- 就是接口模式
5. 接口
- 依然用class关键字
# 接口
class Animal:
def eat(self):
pass
# 实现类
class Cat(Animal):
def eat(self):
print('猫吃鱼')
class Dog(Animal):
def eat(self):
print('狗吃屎')
cat = Cat()
cat.eat()
dog = Dog()
dog.eat()
6. 方法
- 对象方法
- 类方法
- 绑定类方法
- 静态方法
class Person:
# 成员方法: 只能用对象调用
def work(self):
print('work hard')
'''
类方法:直接用类名调用:
1. @classmethod: 装饰器
2. 形参: 最好用cls,见名知意
3. 可以用类对象和类本身调用
'''
@classmethod
def play(cls):
print('我是类方法')
'''
绑定类方法:
1. 只能用类名来调用
'''
def sleep():
print('我是绑定类方法')
'''
静态方法
1. 可以用类名和对象调用
'''
@staticmethod
def sing():
print('静态方法')
person = Person()
person.work()
person.play()
person.sing()
Person.play()
Person.sleep()
Person.sing()
7. 魔术方法
针对类
class Person:
name = None
age = None
"""
构造器:
1. 用于创建对象
2. 如果没有返回值,则创建失败
3. 如果不写,系统会分配一个
"""
def __new__(cls, *args, **kwargs):
print('开始new')
print(cls)
print(args) # ('erick', 20)
print(kwargs)
return object.__new__(cls) # 必须要,不然对象创建失败
'''
init: 用于给成员变量赋值
'''
def __init__(self, name, age):
print('开始初始化')
self.name = name
self.age = age
def __del__(self):
print('destroyed')
'''
java的toString方法
1. 利用print打印对象时
2. 利用str()转换对象时
'''
def __str__(self):
return 'hello, I am toString'
person = Person('erick', 20)
print(person)
三、异常
- try except