python 入门一(数据结构)

来源:互联网 发布:杭州淘宝拍摄公司 编辑:程序博客网 时间:2024/06/07 09:52

通过几天的学习了解了一下python,发现python很多同能使用很方便,这篇文章作为python入门的一篇介绍文章,里面涉及到的具体内容会在之后的文章会进行深入学习,下面就来看看python

因为语法很多语言很相似,所以这里就不说语法了,只看所支持的数据结构、类、方法、变量、多线程、多进程、python数据库操作、python文件操作、python网络爬虫

一、python支持的数据结构:

1、元组:

python中的元组定义方式: value1=("v1","v2")这个格式,也就是圆括号中包括了具体元素

元组的特性:

(1)、元素创建后不能再向元组中添加元素,也不能删除,只能获取元组中某个元素在元组中的索引位置和某个元素在元组中出现的次数的统计,没有其他什么方法了。

元组demo:

def tell():    yz = ("1", "2", "2", "3")     lens = len(yz)    indexs = yz.index("2",)    counts = yz.count("2")    print(yz)    print("lens:" + str(lens) + " indexs:" + str(indexs) + " counts:" + str(counts)) if __name__ =="__main__":    tell()

2、列表:

python中的列表定义方式:value1 =["1","2","3","4"] 看这个格式是不是很像java中的list集合,是的而且很多方法都很类似哦,可以对比着学习!

列表的特性:

(1)、python中的列表和java中的List集合很相似,包括使用方式和方法,python中的列表能进行添加、删除、修改、排序、获取执行索引位置的值、统计一个元素出现的次数!

列表demo:

def tell():    lb=['1','2','3']    lens = len(lb)    lb.insert(4, "5")    lb.append("5")    counts = lb.count("5")    lens2 = len(lb)    lb.remove("1")    len3 = len(lb)    print(str(lb))    print("lens:"+str(lens) +" lens2:"+str(lens2) +" counts:"+str(counts) +" len3:"+str(len3))if __name__ =="__main__":    tell()

列表排序demo:

(1)、列表中的元素是int类型或者是能转化为int的数据格式则排序的时候可以将sort(key=int, reverse=False)中的key设置为int,就按照大小来排序

def tell():    #lb=['1','2','3','4','5']    lb=[1,2,3,4,5]    print("lb:"+str(lb))    lb.sort(key=int, reverse=False)    print("lb sort:"+str(lb))    lb.sort(key=int, reverse=True)    print("lb sort:"+str(lb))   if __name__ =="__main__":    tell()
(2)、如果列表中的元素不是int型或不能转化为int型的比如 “1qaz” 这种字符的,我们可以按照长度来排序

from builtins import lendef tell():    lb=['111','2q','31','4','5']    print("lb:"+str(lb))    lb.sort(key=len, reverse=False)    print("lb sort:"+str(lb))    lb.sort(key=len, reverse=True)    print("lb sort:"+str(lb))   if __name__ =="__main__":    tell()

(3)、如果列表中的元素是元组则可以使用lambda表达式来给出排序规则

from builtins import lendef tell():    lb=[("a",1),("b",2),("c",4),("d",3),("e",5)]    print("lb:"+str(lb))    lb.sort(key=lambda x:x[1], reverse=False)    print("lb sort:"+str(lb))    lb.sort(key=lambda x:x[1], reverse=True)     print("lb sort:"+str(lb))       ccc =sorted(lb,key=lambda x:x[0],reverse=False)    ddd =sorted(lb,key=lambda x:x[1],reverse=False)    print("ccc:"+str(ccc))    print("ddd:"+str(ddd))if __name__ =="__main__":    tell()

其中的lambda中的x[0]就是按照元组的第一个元素排序而x[1]就是按照元组的第二个元素排序


3、字典:

python中的字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:

  dict = {"key1" : "value1", "key2" : "value2"}
定义的字典,这个是不是看着很像json对象的格式啊 ……
字典的特性:

(1)、python中的字典的特性和java中的map很像包括操作都是很类似的,所以可以按照使用map的思路去学习使用python的字典。

字典demo:

from builtins import lendef tell():    dict = {"key1" : "value1", "key2" : "value2"}    print("dict:"+str(dict))    key1v = dict.keys()    for  key in key1v:        print("keys:"+str(key))    values = dict.values()    for  va  in values:        print("values:"+str(va))    key1vvv= dict.get("key1")    print("get key:"+str(key1vvv))    key2v = dict["key2"]    print("key2v:"+str(key2v))    dict["key2"]="new value2"    key3v = dict["key2"]    print("key2v:"+str(key3v))if __name__ == "__main__":    tell()

当然字典还有很多特性以及内建的很多方法,这里就不说了……一搜一大把


二、python类

在简单的使用python的时候其实你是可以不用定义类的,你可以定义方法来实现你想要的功能,但是python 提供了类、类的继承所以我们还是使用类、对象来编程吧……

下面我们从类的定义、self、类的实例、类变量、实例变量、类的继承、类的多继承来学习……

1、python中类的定义

(1)、类的定义

#!/usr/bin/pythonclass c1(object):    def __init__(self,name):        self.name = name        print("init  object"+self.name)    def tel(self):        print(self.name)if __name__ == "__main__":    obj = c1("init name") # create object    obj.tel()
括号中的object 表示这个类是继承了object类,和java中的Object类是一样的。

__init__方法就是构造函数,用来初始化对象,方法中的第一个参数self表示的就是c1这个类的一个具体实例,在这个demo中self就是obj这个实例,这个方法是在创建对象是自动调用的,而其中的self也是会自动传递的,不用自己去传。

self.name 这个name是这个obj对象的变量而不是c1类变量,所以只能通过obj才能访问name变量而不能通过c1来访问。

tel(self)方法中也自动传了一个self参数是因为表示这个方法是一个类方法,因为我们在python可以不定义类而单独定义方法来执行业务所以类中方法的self第一是区分是否为类方法,第二有self对象,我们就能在这个方法中访问对象变量了。

注意:类中定义方法self这个参数是必须有的,否则报错,算是语法错误!!!而我们只是单独定义类的时候就不会自动传self(因为self表示的是一个对象)。


(2)、类变量对象变量

#!/usr/bin/pythonclass c2(object):    count=10    def __init__(self,name):        self.name = name        print("init  object"+self.name +" count:"+str(c2.count))    def tel(self):        c2.count+=1        print("self name"+self.name)        print("c2.count:"+str(c2.count))if __name__ == "__main__":    obj = c2("c2 name") # create object    obj.tel()    print(c2.count)

代码中相比1中的代码定义了一个count类变量,这个和java中的static变量一样是属于这个类的,所以在任何地方都可以通过"类名.变量名"来获取这个类变量的值和java中不同的是,在python中类变量是无法通过对象来访问的……


(3)、类的继承(单继承)

#!/usr/bin/pythonclass c2(object):    count=10    def __init__(self,name):        self.name = name        print("init object:"+self.name +" count:"+str(c2.count))    def tel(self):        c2.count+=1        print("self name:"+self.name)        print("c2.count:"+str(c2.count))        class subc3(c2):    def __init__(self,name):        self.name= name        print("init subc3:" +self.name +" c2.count:"+str(c2.count))    def telc3(self):        print("subc3 tel:"+self.name)if __name__ == "__main__":    obj = c2("c2 name") # create object    obj3 =subc3("sub3name")    obj3.telc3()    obj3.tel()   

先来看一下定义一个类时传的参数,比如我们定义c2这个类的时候我们传的参数就是object而在定义subc3时传递的参数是c2这个类,从这里也说明了python的类继承方式我们知道在java中所有的类都是继承自Object这个类,而在python中是不是也很相似啊,只是写法不同而已,而subc3传递的参数是c2所以subc3是继承自c2这个类的,你应该也发现了python中类的继承了。

(4)、类的多继承(python中是有多继承的,可以同时继承多个类)

#!/usr/bin/pythonclass c2(object):    count = 10    def __init__(self, name):        self.name = name        print("init object:" + self.name + " count:" + str(c2.count))    def tel(self):        c2.count += 1        print("self name:" + self.name)        print("c2.count:" + str(c2.count))        class subc3(c2):    def __init__(self, name):        self.name = name        print("init subc3:" + self.name + " c2.count:" + str(c2.count))    def telc3(self):        print("subc3 tel:" + self.name)    class subc5(subc3,c2):    def __init__(self):        print("subc5")    def tel5(self):         print("tel5")if __name__ == "__main__":    obj = c2("c2 name")  # create object    obj3 = subc3("sub3name")    obj5 = subc5()    obj5.tel5()   
但是在多继承的时候可能会出现,TypeError: Cannot create a consistent method resolution
order (MRO) for bases c2, subc3 这个异常,异常的具体原因以及处理方式见如下两篇文章:

http://blog.csdn.net/new_abc/article/details/47904595


ok 篇幅太长了,剩下的部分下篇见!

草鸟入门,如有不对还请指教!

原创粉丝点击