python学习小结
这次学习主要学习python中特有的语法与面向对象编程,python中if、for等基本语法不在这次小结中提及,在python中一切都是对象,定义一个变量(如:a=10)是对象,列表、字典、集合、类都是对象。
基础语法
值传递与引用传递
python中传递方式没有让程序员选择的传递方式,python中自有一套传递规则,它分为两种传递方式:不可变对象传递方式与可变对象传递方式。
- 不可变对象传递方式为值传递,修改传递对象数据不会影响原对象数据,如:数字、元组、字符串。
- 可变对象传递方式为引用传递,修改传递对象数据的同时原对象数据也被修改,如:列表、字典。
推导式
推导式能方便快速创建列表,推导式有列表推导式、字典推导式、集合推导式、生成器推导式。
list = [a for a in range(10)]
list = [a for a in range(10) if a%2==0]
上述第一条语句生成一个[1,2,3,…10]的列表,第二条在生成过程中会判断a是否能被2的整除。
dic = {a:b for a in range(3) for b in range(0,3)}
生成{0: 2, 1: 2, 2: 2}一个字典。
str = "hello world"
dic = {a:str.count(a) for a in str}
统计str字符串中每个字符出现的次数。
{a for a in "hello" }
把hello每个字符拆分生成集合。
gnt = ((a,b)for a in range(3) for b in range(3));#创建生成器
print(tuple(gnt))#生成元组
python中没有直接生成元组的推导式,可以使用生成器转为元组。
lambda表达式
lambda声音一个匿名函数,一种简单的在一行中完成匿名函数,lambda生成的函数是一个函数对象。
fun = lambda a,b:a+b
a = fun(1,2)
函数
定义函数:def 函数名称(参数表):
def fun():
pass
fun()
面向对象
类与类对象
python对象包括三个部分:id(对象标识符)、type(对象类型)、value(对象值、属性与方法)。
- 构造函数 init()
构造函数用于初始化实例对象的实例属性。 - 析构函数 del()
析构函数用于在对象被回收时删除实例需要释放的对象。
类对象与实例对象
python中一切都是对象,所以我们定义的类也是一个对象,称为对象模具,可以通过对象模块创建不同的实例对象;实例对象就是通过对象模具创建的实例。
类属性与实例属性
我们定义的类是一个对象,那么它也有自已的属性,类的属性可以在所有实例中访问。
- 类属性
#class 类名:
# 变量名 = 初始化 #类属性定义
#访问使用:类名.变量名
class stu:
name = "张某"
print(stu.name);
name是类stu的类属性,通过类名.变量名访问,它是所有实例对象共享的。
- 实例属性
实例属性只能通过对象模具创建后,通过实例变量才能访问,通常在构造函数__init__中定义与初始化。
class stu:
def __init__(self):
self.age = 20
s = stu()
print(s.age)
类方法与实例方法
- 类方法
类方法及为“类对象”的方法,通过装饰器@classmethod定义,并且第一个参数必须为"cls",在类方法中不能访问实例方法与属性,它通过“类名.方法名(参数表)”访问。
class stu:
name = "张某"
@classmethod
def getName(cls):
print(cls.name)
stu.getName()
在类方法中要访问类属性必须通过cls访问。
- 实例方法
实例方法是通过对象模具创建的对象的方法,实例方法属于实例对象,实例对象创建它便存在,实例对象回收它消失。
class stu:
def printName(self):
print("name")
s = stu()
s.printName()
私有属性与私有方法
类的私有属性在变量名前加双下划线定义(如:self.__name),私有方法同样在方法前加双下划线定义。
class stu:
def __init__(self):
self.__name = "张某"
def __printName(self):
print(self.__name)
s = stu()
print(s.name)#无法访问私有属性,系统报错
print(s.printName)#无法访问私有方法,系统报错