函数
调试相关
- F8 step over单步执行会把函数调用视作一行,直接执行,不会进入函数内部
- F7 step into也可以单步执行,如果是函数,会进入函数内部
- 函数注释使用三对引号
参数相关
- 形参和实参:定义函数时使用的参数是形参,调用函数时传入的函数是实参
- 局部变量和全局变量:局部变量是在函数内部定义的变量,全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量
- 当列表作为实参进入函数时,如果在函数内部对列表进行+=操作,实际上是调用了列表的extend方法,没有赋值的过程,因此会影响函数外全局变量的结果,而如果在函数内部对列表进行
list = list +list
,则等号左边的list被视为局部变量,不会影响函数外部的全局变量
- 缺省参数:具有默认值的参数叫做缺省参数,定义缺省参数时要放在最后一个的位置
- 多值参数:参数前有个
*
可以接收元组,参数前有**
可以接收字典;*args
代表变量arguments,**kwargs
中的kw代表keyword,可以记忆键值对参数
*agrs
在调用时只需要用逗号隔开就可以
def demo(num, *nums, **person):
print(num)
print(nums)
print(person)
demo(1)
out:
1
()
{}
demo(1,2,3,4,name="小明")
out:
1
(1,2,3,4)
{"name":小明}
- 拆包:在调用多值参数的时候,如果希望将一个元组变量,直接传递给agrs,可以在元组变量前加一个
*
,如果希望传递一个字典,可以在变量前加**
- 递归:一个函数内部调用自己,当参数满足某一个条件时,不再执行,这通常被称为函数的出口,如果不指定函数的出口,会形成死循环
类
- 类是负责创造对象的
- 类的命名要符合大驼峰命名法,单词首字母大写,单词之间没有下划线
- 对象特征的描述称为属性,对象具有的行为称为方法
dir(对象名)
可以查看该对象的所有属性和方法
__方法名__
格式的方法是Python提供的内置方法和属性
- 定义类中的函数时,第一个参数必须是
self
初始化方法与属性
- 创建对象:
对象变量 = 类名()
- 给对象增加属性:在类的外部通过
类名.属性名 = 属性值
即可;但是不推荐这种方式,如果调用时没有找到该属性,就会报错
- 方法内部,
self.
可以访问对象的属性,也可以调用该对象的其他方法;在调用方法时,不需要传入self
参数
calss Cat:
def eat(self):
print("%s 爱吃鱼" % self.name) # 哪个对象调用该方法,方法内的self就是那个对象的引用
def drink(self):
print("%s 爱喝水" % self.name)
tom = Cat()
tom.name='Tom'
tom.eat()
- 初始化方法:当我们创建对象时,解释器会首先给对象分配内存地址,其次会为属性设置初始值,也就是调用初始化方法
__init__
,初始化方法是对象的内置方法,是用来定义类具有哪些属性的方法
calss Cat:
def __init__(self):
print("something")
tom = Cat() # 这里会输出 "something",也就是自动调用了初始化方法
- 定义属性:在初始化方法内部,
self.属性名 = 属性值
就可以定义类的属性了
calss Cat:
def __init__(self,new_name):
print("something")
self.name = new_name
def eat(self):
print("%s 爱吃鱼" % self.name)
tom = Cat("Tom") # 在初始化方法中通过形参的形式设定初始值后,在创建对象时就可以直接传入相应的实参
内置方法和属性
__del__
方法,在对象被从内存中销毁之前,会自动调用该方法
__str__
方法,在类中定义该方法,就能够在打印对象名时,输出自定义的内容,但是该内置方法必须返回字符串
私有属性和方法
- 对象的属性和方法,只在对象内部被使用,而不会被外部访问
- 在定义属性名或方法名前,增加
__
即可定义为私有属性和方法
- Python中没有真正意义上的私有属性和方法,通过
_类名__名称
即可访问到相应的私有属性和方法
继承
- 继承可以让子类拥有父类所有的方法和属性,子类可以拥有多个父类
- 继承的语法如下:
class 子类名(父类名):
pass
- 方法的重写:当父类的方法不能满足子类的需求,可以对方法进行重写;重写可以分为覆盖父类的方法和对父类的方法扩展.
- 覆盖:在子类中定一个和父类中同名的方法,子类在调用时只会调用重写后的方法
- 扩展:在新定义的方法中,使用
super().原有方法名()
即可实现扩展的目的
多态
- 不同的子类调用相同父类方法,产生不同的结果
- 多态以继承和重写父类的方法为前提
装饰器
@函数
def xxx():
pass
- python自动执行所艾特的函数,并且将下方定义的函数,作为参数传递给所艾特的函数,即执行函数(xxx),执行完后,将结果赋值给xxx,即xxx = 函数(xxx)