文章目录
python-特别知识点
- 在python中 所有的数据类型都是类,每个数据值都是类的实例。
- 任何类型的数据都可以通过bool()函数转换为布尔值,那些被认为 “没有的”、“空的”值会被转换为False ,反之会被转换为True。
- pyhon中的布尔类型为bool类,bool是int的子类,它只有两个值:True和False。
- 比较运算符可用于任意类型的数据,但参与比较的两种类型的数据要相互 兼容,即能进行隐式转换。浮点数与整数都可以进行比较 1.0==1 结果是:True。
- python也采用了“短路”设计。“短路”指“逻辑与”和“逻辑或”在计算过程中 只要结果确定,则不再计算后面的表达式,从而提高效率,有点像电路短路。
- 在python编程规范中推荐 使用4个半角空格。
- while语句中还可以带有else子语句,是在循环体正常结束时才执行的语句。循环体被中断,不会执行else语句。
- 可迭代对象包括字符串,列表,元组,集合和字典等。
- for语句中的else子语句与while语句中的else子语句作用是一样的,在循环体正常结束时才执行else语句,在循环被中断时不执行。
- 跳转语句能够改变程序的执行顺序,包括break,continue和return。break和continue用于循环体中,而return用于函数中。
- break语句会终止循环,continue语句会终止本次循环,循环体中的continue之后的语句将不再执行,接着进行下次循环。
- 加和乘运算符也可以用于序列中的元素操作。加运算符可以将两个序列连接起来,乘运算符可以将两个序列重复多次。
- 序列的切片就是从序列中切分出小的子序列。
- 切下的小切片包括start位置的元素,但不包括end位置的元素,start和end都可以省略。
- nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] nums[1:7:2] 从索引1(元素1)开始。步长为2,所以下一个选中的元素是索引3(元素3),因为从索引1到索引3正好跳过了索引2。继续以步长2进行,下一个选中的元素是索引5(元素5),因为从索引3到索引5跳过了索引4。步长为2并不是说跳过两个元素,而是每次移动两个索引位置来选择元素。
- 在python中方法和函数是有区别的。方法隶属于类,通过类或对象调用方法。函数不隶属于任何类,直接调用即可。
- 如果想在字符串中包含一些特殊的字符,例如换行符等,在普通字符串中就需要转义,前面要加上反斜杠\。这叫做字符转义。
- 在普通字符串前加r就是原始字符串了。
- Python中的函数很灵活。可以在模块中但是类之外定义,作用域是当前模块,我们称之为函数。也可以在别的函数中定义,我们称之为嵌套函数,也可以在类中定义,我们称之为方法。
- 由于定义函数时的参数不是实际参数,会在调用函数时传递给他们实际数据,所以我们称定义函数时的参数为形式参数,简称形参。称调用函数时传递的实际数据为实际参数,简称实参。你可以将形参理解为在函数中定义的变。
- Python中的函数可以定义接收不确定数量的参数,这种参数被称为可变参数。可变参数有两种,即在参数前加 * 或 **
- *可变参数在函数中被组装成一个元组
- **可变参数在函数中被组装成一个字典
- 变量可以在模块中创建,作用域是整个模块,被称为全局变量。变量也可以在函数中创建,在默认情况下作用域是整个函数,被称为局部变量。
- 函数中的同名变量会屏蔽模块中的同名变量。如果在函数中将其声明为global,则会将函数中的这个同名变量提升为全局变量。
- 任何一个函数都有数据类型,这种数据类型是function,被称为函数类型。函数类型的数据与其他类型的数据是一样的,任意类型的数据都可以作为函数返回值使用,还可以作为函数参数使用。因此,一个函数可以作为另一个函数返回值使用,也可以作为另一个函数参数使用。
- python中销毁对象时由python垃圾回收器在后台释放对象,不需要程序员手动释放对象。
- 实例变量和实例方法属于对象,通过对象调用。而类变量和类方法属于类,通过类调用。
- init()方法是构造方法,构造方法用来初始化实例变量。注意,init的前后是两个下划。
- 类中的self表示当前对象,构造方法中的self参数说明这个方法属于实例,self.age中的self表示age属于实例,即实例成员变量。
- 类中的__init__()方法是一个非常特殊的方法,用来创建和初始化实例变量,这种方法就是“构造方法”。在定义__init__()方法时,它的第1个参数应该是self,之后的参数用来初始化实例变量。调用构造方法时不需要传入self参数。
- 定义实例方法时,它的第一个参数也应该是self,这会将当前实例与该方法绑定起来,这也说明该方法属于实例。在调用方法时不需要传入self,类似于构造方法。
- 类变量是属于类的变量,不属于单个对象。例如,有一个Account(银行账户)类,它有三个成员变量:amount(账户金额)、interest_rate (利率)和owner(账户名)。amount和owner对于每一个账户都是不同的,而interest_rate对于所有账户都是相同的。amount和owners是实例变量,interest_rate是所有账户实例共享的变量,它属于类,被称为“类变量”。
- 定义类方法需要的装饰器,装饰器以@为开头修饰函数,方法和类,用来约束他们。类方法与类变量类似,属于类,不属于个体实例。在定义类方法时,它的第1个参数不是self,而是类本身。
- 注意:类方法可以访问类变量和其他类方法,但不能访问其他实例方法和实例变量。
- 在默认情况下,Python中的变量是公有的,可以在类的外部访问它们。如果想让它们成为私有变量,则在变量前加上双下画线(__)即可。
- 私有方法:私有方法与私有变量的封装是类似的,在方法前加上双下画线(__)就是私有方法了。
- 为了实现对象的封装,在一个类中不应该有公有的成员变量,这些成员变量应该被设计为私有的,然后通过公有的set (赋值)和get(取值)方法访问。
- 我们可以在类中定义属性,属可以替代get()set()这两个公有方法。
- 私有变量__age,对应的属性名称应该去除前面双下划线之后的名称,即age。定义age属性的get()方法,使用@property装饰器进行修饰,方法名就是属性名,即age。定义age属性的set()方法,使用@age.setter装饰器进行修饰,age是属性名。
- 属性在本质上就是两个方法,在方法前加上装饰器使得方法称为属性。属性使用起来类似于公有变量,可以在赋值符号左边或右边,左边被赋值,右边取值。
- 继承性也是面向对象重要的基本特性之一。在现实世界中继承关系无处不在。例如猫与动物之间的关系:猫是一种特殊动物,具有动物的全部特征和行为,即数据和操作。在面向对象中动物是一般类,被称为“父类”;猫是特殊类,被称为“子类”。特殊类拥有一般类的全部数据和操作,可称之为子类继承父类。
- 在Python中声明子类继承父类,语法很简单,定义类时在类的后面使用一对小括号指定它的父类就可以了。
- 子类继承父类时,只有那些公有的成员变量和方法才可以被继承。
- 构造方法的作用是初始化类的实例成员变量,在初始化子类时,也初始化父类的实例成员变量。super().init()。
- 在Python中,当子类继承多个父类时,如果在多个父类中有相同的成员方法或成员变量,则子类优先继承左边父类中的成员方法或成员变量,从左到右继承级别从高到低。
- 如果子类的方法名与父类的方法名相同,则在这种情况下,子类的方法会重写(Override)父类的同名方法。
- 多态性也是面向对象重要的基本特性之一。“多态”指对象可以表现出多种形态。例如,猫、狗、鸭子都属于动物,它们有“叫”和“动”等行为,但是叫的方式不同,动的方式也不同。
- 在多个子类继承父类,并重写父类方法后,这些子类所创建的对象之间就是多态的。这些对象采用不同的方式实现父类方法。
- Python的多态性更加灵活,支持鸭子类型测试。鸭子类型测试指:若看到 一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟可以被称为鸭子。由于支持鸭子类型测试,所以Python解释器不检查发生多态的对象是否继承了同一个父类,只要它们有相同的行为(方法),它们之间就是多态的。