Skip to main content
 Web开发网 » 编程语言 » Python语言

Python常用知识点汇总(Flash)

2021年11月27日5300百度已收录

  一.Python中的数据结构

  python的元组、列表、字典数据类型是很python(there python is a adjective)的数据结构。这些结构都是经过足够优化后的,所以如果使用好的话,在某些area会有很大的益处。

  1.元组

  个人认为就像java的数组,python中的元组有以下特性:

  任意对象的有序集合,这条没啥说的,数组的同性;

  通过偏移读取;

  一旦生成,不可改变;

  固定长度,支持嵌套

  来例子吧,python 代码

  >>> (0, 'haha', (4j, 'y')) ###元组用圆括号标志

  (0, 'haha', (4j, 'y'))

  >>> t = (1, 3, 'b')

  >>> t[2]

  'b'

  >>> t[3]

  Traceback (most recent call last): File "#41>", line 1, in <module></module> t[3] IndexError: tuple index out of range

  >>> t[-1]

  'b'

  >>> t[0:-1]

  (1, 3)

  >>> t * 2 ##这里是元组内的对象都重复两次,而不是每个对象值乘以2

  (1, 3, 'b', 1, 3, 'b')

  >>> for x in t:

  print x,

  1 3 b

  >>> 'b' in t

  True

  >>> q = t + ((3, 'abc')) ##也可以写成:q = t + (3,’abc’)

  >>> q

  (1, 3, 'b', 3, 'abc')

  >>> for x in (2, (3, 'a')): ##嵌套的元组遍历,输出时被嵌套的元组作为一个对象输出

  print x

  2 (3, 'a')

  >>> len(q)

  5

  >>> len((2, (3, 'abc'))) ##注意嵌套元组的长度

  2

  >>> (1, 2, 3)[1]

  2

  >>> q[1] = 'd'

  Traceback (most recent call last): File "#57>", line 1, in <module></module> q[1] = 'd' TypeError: 'tuple' object does not support item assignment

  >>> a = ('b', 'c', q)

  >>> 1 in a ###判断元组中是否有某个值

  False

  >>> q in a

  True

  >>> a = ('b', 'c', (1, 3, 'b', 3, 'abc'))

  >>> a

  ('b', 'c', (1, 3, 'b', 3, 'abc'))

  上面的例子足以说明大部分了,使用元组时最重要的一点是“一旦生成,就不可变了”。

  2.列表

  列表所具有的特性也要比元组更多、更灵活,其character总结如下:

  任意对象的有序集合;

  可通过偏移存取,注意,列表中的元素都是可变的,这是不同于元组的;

  长度可变,支持嵌套;

  还有一些类似java的对象引用机制

  由于列表的这些特性,使得列表在实际应用中被广泛使用,下面是一些例子。

  1)首先是基本用法

  python 代码

  >>> l = ['a', 'b', 'c']

  >>> len(l) 3

  >>> l + ['d'] ['a', 'b', 'c', 'd']

  >>> l * 2 ['a', 'b', 'c', 'a', 'b', 'c']

  >>> for x in l:

  print x, a b c

  2)索引和分片,赋值(单个元素赋值,分片赋值)

  python 代码

  >>> l = ['abc', 'def', 'ghi', 123]

  >>> l[2] 'ghi'

  >>> l[-3] 'def'

  >>> l[:3] ['abc', 'def', 'ghi']

  >>> l[1] = 'haha'

  >>> l ['abc', 'haha', 'ghi', 123]

  >>> l[1:] = ['apple', 'banana']

  >>> l ['abc', 'apple', 'banana']

  >>> l[2] = [123, 345, 456]

  >>> l ['abc', 'apple', [123, 345, 456]]

  >>> l[1:] = [123, 234, 345, 456, 567]

  >>> l ['abc', 123, 234, 345, 456, 567]

  3) 添加、排序、删除操作

  python 代码

  >>> l = ['abc', 'def', 'ghi', 123]

  >>> l.append(456)

  >>> l ['abc', 'def', 'ghi', 123, 456]

  >>> l.sort()

  >>> l [123, 456, 'abc', 'def', 'ghi']

  >>> del l[0]

  >>> l [456, 'abc', 'def', 'ghi']

  >>> del l[2:]

  >>> l [456, 'abc']

  4)一些有趣的用法

  去掉列表中每个元素头尾的空格:## str.strip() 函数使用

  python 代码

  >>> freshfruit = [' banana', ' loganberry ', 'passion fruit ']

  >>> [str.strip() for str in freshfruit] ['banana', 'loganberry', 'passion fruit']

  把列表中,大于3的元素,乘以2:

  python 代码

  >>> vec = [2, 4, 6]

  >>> [2*x for x in vec if x > 3] [8, 12]

  把列表1的每一个元素和列表2的每一个元素相乘:

  python 代码

  >>> lst1 = [2, 4, 6]

  >>> lst2 = [4, 3, -9]

  >>> [x*y for x in lst1 for y in lst2] [8, 6, -18, 16, 12, -36, 24, 18, -54]

  取获[0-10)的平方:

  python 代码

  [x**2 for x in range(10)]

  3.字典

  python里的字典就像java里的HashMap,以键值对的方式存在并操作,其特点如下:

  通过键来存取,而非偏移量;

  键值对是无序的;

  键和值可以是任意对象;

  长度可变,任意嵌套;

  在字典里,不能再有序列操作,虽然字典在某些方面与列表类似,但不要把列表套在字典上。

  字典的键必须是不可改变的类型,如:字符串,数字,tuple(元组);值可以为任何Python数据类型。

  1)基本操作

  python 代码

  >>> table = {'abc':1, 'def':2, 'ghi':3}

  >>> table['abc'] 1

  >>> len(table) 3

  >>> table.keys() ['abc', 'ghi', 'def']

  >>> table.values() [1, 3, 2]

  >>> table.has_key('def') True

  >>> table.items() [('abc', 1), ('ghi', 3), ('def', 2)]

  2)修改,删除,添加

  python 代码

  >>> table = {'abc':1, 'def':2, 'ghi':3}

  >>> table['ghi'] = ('g', 'h', 'i')

  >>> table {'abc': 1, 'ghi': ('g', 'h', 'i'), 'def': 2}

  >>> del table['abc']

  >>> table {'ghi': ('g', 'h', 'i'), 'def': 2}

  >>> table['xyz'] = ['x', 'y', 'z'] ##另一种添加方法>>> dict1.setdefault('b',2)

  >>> table {'xyz': ['x', 'y', 'z'], 'ghi': ('g', 'h', 'i'), 'def': 2}

  #清空字典

  >>> dict1.clear()

  >>> dict1 #字典变为空了

  #删除字典对象

  >>> del dict1

  >>> dict1

  Traceback (most recent call last):

  File "< interactive input>", line 1, in < module>

  NameError: name 'dict1' is not defined

  在这里需要来一句,对于字典的扩充,只需定义一个新的键值对即可,而对于列表,就只能用append方法或分片赋值。

  3)对字典的遍历

  python 代码

  >>> table = {'abc':1, 'def':2, 'ghi':3}

  >>> for key in table.keys():

  print key, '\t', table[key] abc 1 ghi 3 def 2

  二.文件读写

  与java的File类相比,python的文件类要狭义一些

  1) 文件写

  python 代码

  >>> myfile = open('myfile', 'w') ##另外一种写法myfile=file(‘myfile’,’w’)

  >>> myfile.write('hello world\n')

  >>> myfile.close()

  python的一个open语句就打开了一个文件(当给定的文件不存在时,会自动建立一个新的文件)。open的第一个参数是文件名,第二个参数是操作模式,所谓操作模式就是你打开一个文件是用来干什么的,是读,还是写 (当然操作模式不仅只有读和写)。还有一件事,操作完要记得关。

  2) 文件读

  python 代码

  >>> myfile = open('myfile', 'r') ##另外一种写法myfile=file(‘myfile’,’r’)

  >>> myfile.readline () 'hello world\n'

  很是简单,这样两句就顶java一长串的流嵌套,当然,java那样做也是有道理的。

  三.Python中使用pickle持久化对象

  Python中可以使用pickle 模块将对象转化为文件保存在磁盘上,在需要的时候再读取并还原。具体用法如下:

  pickle.dump(obj, file[, protocol])

  这是将对象持久化的方法,参数的含义分别为:

  n obj: 要持久化保存的对象;

  n file: 一个拥有write() 方法的对象,并且这个write() 方法能接收一个字符串作为参数。这个对象可以是一个以写模式打开的文件对象或者一个StringIO对象,或者其他自定义的满足条件的对象。

  n protocol: 这是一个可选的参数,默认为0,如果设置为1 或True,则以高压缩的二进制格式保存持久化后的对象,否则以ASCII格式保存。

  对象被持久化后怎么还原呢?pickle 模块也提供了相应的方法,如下:

  pickle.load(file)

  只有一个参数file ,对应于上面dump方法中的file 参数。这个file 必须是一个拥有能接收一个整数为参数的read() 方法以及一个不接收任何参数的readline() 方法,并且这两个方法的返回值都应该是字符串。这可以是一个打开为读的文件对象、StringIO 对象或其他任何满足条件的对象。

  下面是一个基本的用例:

  # -*- coding: utf-8 -*-

  import pickle

  # 也可以这样:import cPickle as pickle

  obj = {"a": 1, "b": 2, "c": 3}

  # 将obj 持久化保存到文件tmp.txt 中

  pickle.dump(obj, open("tmp.txt", "w"))

  #filename=file(‘tmp.txt’,’w’)

  #pickle.dump(obj,filename)

  # do something else ...

  # 从tmp.txt 中读取并恢复obj 对象

  obj2 = pickle.load(open("tmp.txt", "r"))

  #filename=file(‘tmp.txt’,’r’)

  #pickle.load(filename)

  print obj2

  不过实际应用中,我们可能还会有一些改进,比如用cPickle 来代替pickle ,前者是后者的一个C 语言实现版本,拥有更快的速度,另外,有时在dump 时也会将第三个参数设为True 以提高压缩比。

  四.Python连接操作MySQL数据库

  MySQLdb在Python中也就相当于JAVA中MySQL的JDBC Driver,Python也有类似的数据接口规范Python DB API,MySQLdb就是Mysql的实现。操作也比较简单和其它平台或语言操作数据库一样,就是建立和数据库系统的连接,然后给数据库输入SQL,再从数据库获取结果。

  1.下载MySql-python:

   ,

  2.解压、编译和安装

  Shell> tar -zxvf MySQL-python-1.2.3.tar.gz

  Shell> cd MySQL-python-1.2.3

  Shell> python setup.py build #编译

  Shell> python setup.py install #安装

  注:

  如果在执行编译操作python setup.py build时报如下错误:

  rom setuptools import setup

  ImportError: No module named setuptools

  解决方法:

  1)wget -q

  2)python ez_setup.py ( 这一步必然失败,是为了第三步取得url准备的.)

  运行这行的时候,linux会停留在Downling ~~~~~这类似的上面.

  这是因为你的这个目录下中没有setuptools-0.6c8-py2.4.egg东西.

  3)wget

  注意:第三步的url是根据第二步得到的url.

  这时候你再运行第二步.之后再运行安装你前面不能够安装的软件.应该就解决了setuptools方面的问题了.

  关键东西:是要准备好2个东西:ez_setup.py和setuptools-0.6c8-py2.4.egg.

  3.测试

  Shell> python

  >>> import MySQLdb

  如果没有出错提示,刚安装成功

  4.Python连接MySQL操作示例:

  Shell>cat mysqldb.py

  #!/usr/bin/python

  import MySQLdb #导入模块,注意大小写!!

  #建立和数据库的连接

  conn=MySQLdb.connect(host='localhost',user='root',passwd='root',db='test')

  #host:Mysql主机地址或名称

  #user:连接使用的用户名

  #passwd:连接使用的用户名密码

  #db:默认打开的数据库

  #获取操作游标

  cursor=conn.cursor()

  #执行SQL

  cursor.execute('select * from tab4')

  #获得SQL执行返回结果集的第一条记录

  row1=cursor.fetchone()

  print ‘the first records is:’,row1

  #获取5条记录,注意由于之前执行有了fetchone(),所以游标已经指到第二条记录了,也就是从第二条开始的所有记录

  print "只获取5条记录:"

  results = cursor.fetchmany(5)

  for r in results:

  print r

  #重置游标位置,0,为偏移量,mode=absolute | relative,默认为relative,

  cursor.scroll(0,mode='absolute')

  #当使用fetchone()方法是,指针是会发生移动的。所以,若不重置指针,那么使用fetchall

  #的信息将只会包含指针后面的行内容。

  #实际上,我觉得应该尽量避免移动指针;而应从select语句得到全部结果后,交给python处理比较方便,但我们应该明白该指针的含义。

  #获得SQL执行返回的所有结果集,该结果集是以元组数据结构存放,第一条为row[0]

  rows=cursor.fetchall()

  print ‘the first records is:’,rows[0]

  print 'the results of tab4 is:',rows

  #用for循环打印结果集

  for row in rows:

  print row

  #关闭连接,释放资源

  cursor.close()

  conn.close()

  执行该脚本:

  Shell> ./mysqldb.py

  mysql server version: ((1L, 'sam', 1L), (2L, 'sam2', 2L), (3L, 'sam3', 3L), (4L, 'sam4', 4L))

  5.Python对MySQL的数据库其他操作

  Python在MySQL中创建数据库newdb,创建数据库表newtab,并向newtab中插入一条、多条记录

  Shell>cat newdb.py

  #!/usr/bin/python

  import MySQLdb

  #建立和数据库系统的连接

  conn = MySQLdb.connect(host='localhost', user='root',passwd='longforfreedom')

  #获取操作游标

  cursor = conn.cursor()

  #执行SQL,创建一个数据库.

  cursor.execute("create database if not exists python")

  #选择数据库

  conn.select_db('python');

  #执行SQL,创建一个数据表.

  cursor.execute("create table test(id int, info varchar(100)) ")

  value = [1,"inserted "];

  #插入一条记录

  cursor.execute("insert into test values(%s,%s)",value);

  values=[]

  #生成插入参数值

  for i in range(20):

  values.append((i,'Hello mysqldb, I am recoder ' + str(i)))

  #插入多条记录

  cursor.executemany("insert into test values(%s,%s) ",values);

  count = cursor.execute('select * from test')

  print '总共有%s 条记录',count

  #获取一条记录,每条记录做为一个元组返回

  print "只获取一条记录:"

  result = cursor.fetchone();

  print result

  #print 'ID: %s info: %s' % (result[0],result[1])

  print 'ID: %s info: %s' % result

  #关闭连接,释放资源

  cursor.close();

  conn.close();

  本文源自:ht tp://w w w.c svt.ne t/

评论列表暂无评论
发表评论
微信