python的特点
Python 崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。
与 Java 和 C++ 这些语言相比,Python 最大的两个特点是:
- 语句结束不用分号“;”。
- 代码块用缩进来控制,而不用大括号“{}”
基本语法
数据类型
python是一种弱类型语言,变量的定义不需要在前加类型说明,而且不同类型之间可以方便地相互转换。python有五个标准的数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Dictionary(字典)
其中 List、Tuple、Dictionary 为容器,Python 支持四种不同的数字类型:int(有符号整型)、long(长整型)、float(浮点型)、complex(复数)。
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
Demo:
age = 18 # int
weight = 62.51 # float
name = "Tony" # string
print("age:", age)
print("weight:", weight)
print("name:", name)
# 变量的类型可以直接改变
age = name
print("age:", age)
a = b = c = 5
# a,b,c三个变量指向相同的内存空间,具有相同的值
print("a:", a, "b:", b, "c:", c)
print("id(a):", id(a), "id(b):", id(b), "id(c):", id(c))
age: 18
weight: 62.51
name: Tony
age: Tony
a: 5 b: 5 c: 5
id(a): 1457772400 id(b): 1457772400 id(c): 1457772400
常用容器
List(列表)
List(列表)是python中使用最频繁的数据类型,用**[ ]**标识.。
列表可以完成大多数集合类的数据结构实现,类似于java中的ArrayList。此外,一个List中还可以同时包含不同类型的数据,支持字符、数字、字符串,甚至可以包含列表(即嵌套)。
- 列表中值的切割也可以用到变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认0开始,从右到左索引默认-1开始,下标可以为空表示取头或尾。
- 加号(+)是列表连接运算符,星号(*)是重复操作。
list = ['TOMDIJ',2,3,54,"SUNNY",180.2]
tinyList = [123,"tiny"]
print(list)
print(list[0])
print(list[1:3])
print(tinyList * 2)
print(list + tinyList)
list[0] = 100
print(list)
list.append("love you")
print(list)
结果
['TOMDIJ', 2, 3, 54, 'SUNNY', 180.2]
TOMDIJ
[2, 3]
[123, 'tiny', 123, 'tiny']
['TOMDIJ', 2, 3, 54, 'SUNNY', 180.2, 123, 'tiny']
[100, 2, 3, 54, 'SUNNY', 180.2]
[100, 2, 3, 54, 'SUNNY', 180.2, 'love you']
Dictionary(字典)
Dictionary(字典)是Python中除列表以外最灵活的内置数据结构类型。字典用“{}”标识,字典由索引(key)和它对应的值value组成,相当于java中的map。
列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取的。
dict = {}
dict['one'] = "this is one"
dict[2] = "this is two"
tinydict = {'name': 'Tony', 'age': 24, 'height': 177}
print(dict['one']) # 输出键为'one' 的值
print(dict[2]) # 输出键为 2 的值
print(tinydict) # 输出完整的字典
print(tinydict.keys()) # 输出所有键
print(tinydict.values()) # 输出所有值
结果:
this is one
this is two
{'name': 'Tony', 'age': 24, 'height': 177}
dict_keys(['name', 'age', 'height'])
dict_values(['Tony', 24, 177])
类的定义
使用class语句来创建一个新类,class之后为类的名称并以冒号结尾,如下
class ClassName:
'类的帮助信息' #类文档字符串
class_suite #类体
类的帮助信息可以通过ClassName._doc_查看,class_suite由类成员,方法,数据属性组成。如:
class Test:
"这是一个测试类"
def __init__(self):
self.__ivalue = 5
def getvalue(self):
return self.__ivalue
其中,_init_为初始化函数,相当于构造函数
访问权限
- foo :定义的是特殊方法,一般是系统定义名字,类似_init_()之类的。
- _foo :以单下划线开头的表示的是protected类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于from module import *。
- __foo :双下划线的表示的是私有类型(private)的变量,只能是允许这个类本身进行访问了。
类的继承
继承的语法结构如下:
class 派生类名(基类名):
类体
Python中继承中的一些特点:
- 在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
- 在调用基类的方法时,需要使用super()前缀。
- Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称做“多重继承”。
基础重载方法
Python的类中有很多内置的方法,我们可以通过重写这些方法来实现一些特殊的功能
序号 | 方法 | 描述 | 简单的调用 |
---|---|---|---|
1 | init(self [,args…] ) | 构造函数 | obj = className(args) |
2 | del(self) | 构成方法,删除一个对象 | del obj |
3 | repr(self) | 转化为供解释器读取的形式 | repr(obj) |
4 | str(self) | 用于将值转化为适于人阅读的形式 | str(obj) |
5 | cmp(self, x) | 对象比较 | cmp(obj,x) |
Demo 顿悟
class Person:
"人"
visited = 0
def __init__(self, name, age, height):
self.__name = name
self._age = age
self.height = height
def getName(self):
return self.__name
def getAge(self):
return self._age
def showInfo(self):
print("name", self.__name)
print("age", self._age)
print("height", self.height)
print("visited", self.visited)
Person.visited = Person.visited + 1
class Teacher(Person):
"老师"
def __init__(self, name, age, height):
super().__init__(name, age, height)
self.__title = None
def getTitle(self):
return self.__title
def setTitle(self, title):
self.__title = title
def showInfo(self):
print("title:", self.__title)
super().showInfo()
def testPerson():
"测试方法"
toney = Person("Toney",25,1.77)
toney.showInfo()
print();
jenny = Teacher("Jenny",45,1.80)
jenny.setTitle("教授")
jenny.showInfo();
testPerson()
测试结果
name Toney
age 25
height 1.77
visited 0
title: 教授
name Jenny
age 45
height 1.8
visited 1