1.字符串 2.数字计算 3.列表 4.元组 5.集合 6.字典 7.逻辑判断 8.流程控制语句 9.函数 10.类
python中所有的一切都是对象,且拷贝默认为浅拷贝,引用为直接引用。涉及变量对象赋值,会指向同一个地址
注:对于变量值/表达式的字符串,只能用+号进行拼接。
注:由于0和-0是一样的,所以负数索引从-1开始
切片的语法的左闭右开的。
str="Python" print str[0:2] # [0,2)即运行结果为:Py print str[2:5] # [2,5)即运行结果为:tho print str[:2]+str[2:] # [0,2)+[2,n)即运行结果为:Python print str[-2:] #[-2,n-1)即运行结果为:on print str[42:] #运行结果为空,越界索引会被自动处理注:切片省略开始索引时默认为0,省略结束索引时默认为到字符串的结束。
注:python2默认除法是整除,而python3默认除法是精确至除尽。
Python支持多种不同的数据类型放到同一列表中。
list=[1,"123",1.5>1.6] print list #运行结果:[1, '123', False]字符串的数据类型是immutable ,它不允许修改; 列表是一个 mutable 类型,它自己的内容可以改变。
list=[1,2,3,4,5,6] list[0]=7 print list #运行结果:[7,2,3,4,5,6]使用append()添加新元素
list=[1,2,3,4,5,6] list.append(7) print list #运行结果:[1,2,3,4,5,6,7]使用切片修改列表
list=[1,2,3,4,5,6] list[0:3]=[] print list list[0:1]=[1,2,3,4] print list list[:]=[] print list #运行结果: #[4, 5, 6] #[1, 2, 3, 4, 5, 6] #[]如果我们要创建一个列表[0,2,4,6,8,10],那我们可能要执行如下语句:
list=[] for i in range(6) list.append(i*2)但其实我们可以用更加简洁的语句来完成这个工作
#1 list=[2*i for i in range(6)] #2 list = list(map(lambda i: i*2, range(6)))将多个for组合成元组元素
list=[(x, y) for x in [1,2,3] for y in [3,1,4] if x != y] #list=[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)] 在这里插入代码片元组的成员元素可以被索引,但不能被修改。创建一个元组的语法如下:
#1 用一堆括号括起来 t=(1,2,3,4,5) #2 t=1,2,3,4,5,Python集合相当于Java中的< Set >,存放不重复的无序单一元素。创建一个集合的语法如下:
#1 set={"a","x",1,2,5} #2 set=set('abracadabra') #set={'a', 'r', 'b', 'c', 'd'}注:空集合只能用set()来创建,而不能用{}(因为{}表示的是空字典)。集合也支持推导式形式。
集合支持:减(-)、或(|)、与(&)、异或(^)。
a={'a','b','c','d'} b={1,2,3,4,'a'} print a-b #set(['b','c','d']) print a|b #set(['a','b','c','d',1,2,3,4]) print a&b #set(['a']) print a^b #set(['b','c','d',1,2,3,4])Python字典相当于Java中的Map,存储的是键值对。创建字典的语法如下: key和value都支持任意数据类型的数据。
dis = {'a': 1, 'b': 2,3:'c'}1.items(),去除关键字和对应值
for k, v in dis.items(): #遍历字典 print(k, v)python中的逻辑判断符号跟C语言是一样的。
> #大于 < #小于 == #等于 >= #大于等于 <= #小于等于 != #不等于python的if语句中elseif有点像C语言中switch…case…的存在。
x=0 if x<0 : print("x小于0") elif x==0: print("x等于0") elif x==1: print("x等于1") else: print("x大于1")Python中的for语句跟其他与语言有很大的不同,它主要用于序列的迭代。
list=[1,2,3,4,5,6] #遍历整个list for i in list: print i ‘’‘ 运行结果: 1 2 3 4 5 6 ’‘’ #只遍历[2,5)那部分 for i in list[2:5]: print i ''' 运行结果: 3 4 5 '''range()函数会根据参数生成一个数字列表。
#一个参数(n),代表取值范围[0,n) range(10) # [0,1,2,3,4,5,6,7,8,9] range(-5) # [] #两个参数(x,y),代表取值范围[x,y) range(5,10) # [5,6,7,8,9] #三个参数(a,b,c),代表从[a,b)中找出所有x,x满足条件 x%c==0用于跳出循环,这个跟C是一样的,简单演示一下。
list=[1,2,3,4,5,6] for i in range(len(list)): if i>0: break print list[i] #运行结果:1借鉴于C语言,用于跳过后面的语句,直接进入下一次循环。
list=[1,2,3,4,5,6] for i in range(len(list)): if i==1: continue print list[i] ‘’‘ 运行结果: 1 3 4 5 6 ’‘’pass语句是在语法上需要一个语句,但不需要做什么的时候用的,比如:
if True: pass while True: pass class MyEmptyClass: pass def initlog(*args): passpython定义函数的语法如下:
def 函数名(参数列表): 函数体 return 返回值 #不能没有return注:函数在定义时也可以给参数赋初始值,但不能将没初始值的参数放在有初始值的参数后面(会报错)。
以下摘自官方文档: Python 的类提供了面向对象编程的所有标准特性:类继承机制允许多个基类,派生类可以覆盖它基类的任何方法,一个方法可以调用基类中相同名称的的方法。对象可以包含任意数量和类型的数据。和模块一样,类也拥有 Python 天然的动态特性:它们在运行时创建,可以在创建后修改。
在Python中类的构造函数是定义一个名为 __ init__(init的左右两边都两道下划线,总共4道)的函数,函数的第一个参数为self。构造函数不需要return
class User: def __init__(self,其它参数): passPython的成员变量不需要实现定义好,在需要用到的时候直接使用语法: self.变量名 定义并初始化即可(在Python中不允许出现未初始化的变量)。
class User: def __init__(self,a,b): self.name=a self.age=bPython中成员函数(也包括构造函数),它们的第一个参数一定是self,指向对象本身,这个参数在函数调用赋值的时候会被忽略,只传参给后面的参数。普通成员函数是需要return的。
class User: ...... def setName(self,name): self.name=name return假设有一个类是下面这样子的:
class User: def __init__(self,name,age): self.name=name self.age=age def setName(self,name): self.name=name return利用这个类,我们可以创建如下对象:
user1=User("MouYang",20) #name="MouYang" age=20调用成员变量
print user1.name # MouYang print user1.age # 19调用成员函数(在Python中,隶属于对象的函数称为方法)
#方法1:直接调用 user1.setName("Mouyang") #方法二:创建方法对象 userName=user1.setName #创建 userName("Mouyang") #调用单继承 类的继承是在类定义中实现的,语法如下:
class 当前类名(父类名): pass如果弗列在另外一个文件(模块)中,则需要用一下语法实现:
class 当前类名(模块名.父类名): pass多继承:python与C++相同,允许一个子类同时继承多个父类,语法如下:
class 当前类(父类1, 父类2, 父类3): pass在Python中,如果子类想要调用父类的方法,是通过super()函数来实现的,具体如下:
class Parent1: def setName(self,name): pass class Parent2: def setAge(self,age): pass class child(Parent1,Parent2): super(Parent1,self).setName("Mouyang") #super(父类名,self).父类方法()在Pyhton中没有私有成员(仅能从内部访问)的存在,所有成员都是对外开放访问的。但是,官方有这样一个说法: 大多数 Python 代码都遵循这样一个约定:带有一个下划线的名称 (例如 _spam) 应该被当作是 API 的非公有部分 (无论它是函数、方法或是数据成员)。 这应当被视为一个实现细节,可能不经通知即加以改变。 即默认以 _ 开头的成员被当成私有的。如:
class User: _name="" def _abc(): pass类中任何以两个下划线开头的变量(如__spam)都会被改写成 单下划线+类名+单下划线+标识符的形式(如 _类名_spam)。这种改写是隐式的,不会直接修改代码部分。 改写规则的设计主要是为了避免意外冲突;访问或修改被视为私有的变量仍然是可能的。这在特殊情况下甚至会很有用,例如在调试器中。
如果你想定义一个像C一样的结构体(struct),直接定义一个空类就行