先进方法1:用字符串的join方法:a = ['a','b','c','d']content = ''content = 'K'.join(a)print contentcontent的结果:'akbkckd'先进方法2:用字符串的替换占位符替换a = ['a','b','c','d']content = ''content = '%s%s%s%s' % tuple(a)print contentcontent的结果是:'abcd'

介绍下效率比较低的方法3:a = ['a','b','c','d']content = ''for i in a:content = content + iprint contentcontent的结果是:'abcd'

=============替换=======

a = 'hello word'我把a字符串里的word替换为python

1用字符串本身的replace方法a.replace('word','python')输出的结果是hello python

2用正则表达式来完成替换:import restrinfo = re.compile('word')b = strinfo.sub('python',a)print b输出的结果也是hello python

import re

link = re.compile("\d+")

content = "laowang-#222#22#haha"

info = re.sub(link,'www.cnpythoner.com',content)

print info

结果:laowang-#www.cnpythoner.com#www.cnpythoner.com#haha

例子3

re.sub('[abc]', 'o', 'Mark')结果'Mork're.sub('[abc]', 'o', 'rock')结果 'rook're.sub('[abc]', 'o', 'caps')结果 'oops'   因此正则表达式将会把 caps 变成 oops,因为 c 和 a 都被转换为 o了。

=========字符串截取========

1是从左到右索引默认0开始的,最大范围是字符串长度少1s = 'ilovepython's[0]的结果是i2是从右到左索引默认-1开始的,最大范围是字符串开头s = 'ilovepython's[-1]的结果是n

s[len(s)-1]  == n

3截取多个字符

s[1:5]的结果是love

s[:3] 和s[0:3]的意思是一样的

s[:-1]和 s[0:-1]的意思是一样的,s[:-1]的结果是ilovepytho

s[:] 结果是all

=========引用,拷贝========

1引用

a=[1,2,3,4]

b=a;

print id(a);

print id(b);

结果:

25588440

地址也是25588440

传递地址;所以改变a会修改到b的值

a[1]=5;

print a,b;

结果:ture

2拷贝如果我们只想修改a列表里面的内容。而不想修改b的内容,那就要用到python的拷贝了a=[1,2,3]b=a[:]###拷贝了一份a的内容给ba[1]=6print a输出a的内容是[1,6,3]而b的内容是[1,2,3]

========= is=======

a=[2,3,5,6]

b=[2,3,5,6]

print a is b; 结果false

c='chen'

d='chen'

print c is d;结果true

print id(a),id(b),id(c),id(d);

结果25589960 25594736 28636096 28636096  原因比较的是地址

=========返回多个值=======

def firstvalue(a,b):

c=a+ b

return c

print firstvalue(1,2)结果:3

def secondvalue(a,b):

c=a+ b

return (a,b,c)

#    return a,b,c

x,y,z=secondvalue(1,2)

print 'x:',x,'y:',y,'z:',z

============异常=========

异常处理1

try:

f=file('1.txt','w')

f.write('fefe')

exceptException,e:

print e

finally:

f.close()

异常处理2

try:a=1/2exceptException,e:printeelse:print'success'

异常处理3

try:

a = 1/0

except Exception,e:

print e

输出的结果是: integer division or modulo by zero

===========apply=======

apply(func [, args [, kwargs ]]) 函数用于当函数参数已经存在于一个元组或字典中时,间接地调用函数。args是一个包含将要提供给函数的按位置传递的参数的元组。如果省略了args,任何参数都不会被传递,kwargs是一个包含关键字参数的字典。

apply()的返回值就是func()的返回值,apply()的元祖参数是有序的,元素的顺序必须和func()形式参数的顺序一致

例子1

def say1(a, b):

print a, b

apply(say1,("hello", "python"))

结果:say in

例子2

def say(a=1,b=2):

print a,b

return 'end'

def haha(**kw):

return apply(say,(),kw)

print haha(a='ch',b='zb')

结果:

chen zb

end

==============gui 介绍========

python gui分类,大概有下面的几个:1 Tkinter:比较适合小型项目的开发,开发速度比较快,也是python gui开发的基础。2 wxpython:面向对象的编程风格,比较适合大型项目,业内比较有名的python编辑器ulipad就是用wxpython开发的。3 PyQT:类库和函数库比较方便很丰富,开发大型项目也是很不错的。4 IronPython 如果你要想开发.net下面的应用的话,那么IronPython就是你的选择通过上面的介绍,你应该很好的了解python gui的分类,更好的选择合适你的开发库,其实用python开发的软件还是非常多的,只要你注意去观察就会发现很多,我目前搞python gui选择的库是wxpython,以后把一些实验代码放到博客里和大家一起交流分享。你可以用上面学到的东西来开发自己的编辑器,肯定挺有意思的。不过 [python 编辑器]还是挺多的。

==============关键参数=======

**args

def adder(**args):

**args ={'a':1,'b':2,'c':3}

adder({'a':1,'b':2,'c':3}):

==============字典 dirc,列表====

字典 dirc:无序的集合类型

a = {'name':'xiaoming','age':23}

例如:has_key('key名称')

a.has_key("name")返回Truea.has_key("sss")返回False

例如:a.keys()返回:['age','name']

例如:a.values()返回:[23,'xiaoming']

例如:现在又建立了一个b = {'sex':'man'}a.update(b)print a结果是:{'age': 23, 'name': 'xiaoming', 'sex': 'man'}

更多字典操作:

1 动态创建字典。{},dict()info = {'name':'lilei', 'age': 20}冒号info = dict(name='lilei',age=20)

2 添加插入内容 a['xx'] = 'xx'比如 info['phone'] = 'iphone5'3 修改更新内容 a['xx'] = 'xx' ,info['phone'] = 'htc'

修改更新多个

info.update({'city':'beijing','phone':'nokia'})

4 删除 del,clear,popdel info['phone'] 删除某个元素info.clear()删除字典的全部元素info.pop('name')

5 in 和 has_key() 成员关系操作,判断元素是否存在。 in not isprint phone in infoprint info.has_key('phone')

6 print info.items()(生成一个字典的容器:[()])

结果 [('name', 'c'), ('sex', 'boy')]

7 get:从字典中获得一个值info.get('name')info.get('age2','22');如果没有这个key就默认22岁

列表

l3 = ['a',['b','cc'],'ddd','eeee']

索引:l3[1]分片:

print l3[2:4]  结果 ['ddd', 'eeee']

print l3[2:-1] 结果 ['ddd']

print l3[1:-1] 结果 [['b', 'cc'], 'ddd']

print l3[-4:4] 结果['a', ['b', 'cc'], 'ddd', 'eeee']

2,4,-1,代表的不是key,分割的位置

['a',['b','cc'],'ddd','eeee']

$['a'$,['b','cc'],$'ddd'$,'eeee']$

$分别为 = {0,1,2,3,4}= {-4,-3,-2,-1,4}一个切割的位置

========强类型语言============

print [1,2]+[2,5,6] 结果 [1, 2, 2, 5, 6]

a = [1,2]

#print a+"11"  结果TypeError: can only concatenate list (not "str") to list

print str(a)+"11" 结果[1, 2]11

print a+list("11") 结果[1, 2, '1', '1']

==============id,dir=======

a = {"name":"haha","age":20}

print dir(a) 结果['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

print id(a) 结果地址27197632

======================单引号=====

如果在python里,需要表示一个字符串对象的话,单引号和双引号没有区别

三引号的形式用来输入多行文本

=================base64======

import base64

MESSAGE = 'i love python'

data = base64.encodestring(MESSAGE)

original_data = base64.decodestring(data)

print "original:", repr(MESSAGE)

print "encoded data:", repr(data)

print "decoded data:", repr(original_data)

结果:

original: i love python

encoded data: aSBsb3ZlIHB5dGhvbg==

decoded data: i love python

==================str ,repr 区别===

hello = 'hello, world\n'

>>> repr(hello)

"'hello, world\\n'"

>>> str(hello)

'hello, world\n'

>>> str(1.0/7.0)

'0.142857142857'

>>> repr(1.0/7.0)

'0.14285714285714285'

Python 有办法将任意值转为字符串:将它传入repr() 或str() 函数。

函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式

(如果没有等价的语法,则会发生SyntaxError 异常) 某对象没有适于人阅读的解释形式的话, str() 会返回与repr()

等同的值。很多类型,诸如数值或链表、字典这样的结构,针对各函数都有着统一的解读方式。

字符串和浮点数,有着独特的解读方式

=========== 字符串装换 int转换====

a = '123'

b = str(a)

print b的结果是123

a = 'abc'

b = str(b)

print b的结果是:abc

a = 'abc'

b = int(a)

print b的话,会报:ValueError: invalid literal for int() with base 10: 'fee'

int 容易错:

1直接捕获异常:

try:

a = 'aab'

b = int(a)

except:

b = '123'

2是先判断它是否是字符,如果是字符的话,就不调用int的方法:

a = 'abc'

if a.isdigit():

b = int(a)

else:

b = '123'

===========pickle序列化================

class Person(object):

def __init__(self,name,age):

self.name = name

self.age = age

name = 'jay'

age = 20

person = Person(name,age)

import pickle

f= open('where.txt','wb');

pickle.dump(person, f);

#  把对象序列到文件里

f = open('where.txt','r')

info = pickle.load(f)

print info  结果 <__main__.person object at>

print info.__dict__ 结果{'age': 20, 'name': 'jay'}

============编码===========

设置4个地方编码一致。1数据库编码2数据表编码3程序文件编码4读取数据之前设置好编码

我现在用python读取mysql数据库的时候就遇到:数据库错误: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)我检查了下各处的编码,数据库,数据表和文件的编码都是utf-8,都是一致的,那为什么还是会出现编码的问题呢?我想应该是读取数据之前没有设置默认的编码,接着我查了下文档,发现了解决办法。我通过sys模块的setdefaultencoding('编码类型')来进行python 编码设置。下面给出我的代码:#encoding=utf-8import sysimport MySQLdbreload(sys)sys.setdefaultencoding('utf-8')看来应该先设置好编码类型,再读取数据就不会出错了。

=====================重载(运算重载,方法重载)======

1.python 方法重载: 其他的语言一般对于方法重载的话,主要是根据参数的类型不同或者是数量不同来区分同名的方法。而python则比较特殊,它本身是动态语言,方法的参数是没有类型的,当调用传值的时候才确定参数的类型,故对参数类型不同的方法无需考虑重载(异于php

def info(x,y,z=1):

pass

例子2

class Info(object):

def __init__(self,a,b):

self.a = a

self.b = b

def __add__(self,x):

return self.a * self.b

a = Info(10,11)

b = Info(5,6)

print b + 1 结果30

print a+b 结果110

===================导入模块=========

导入模块分为3种:

1import 模块名

例如#import mytestm

import cPickle as p

也可以

2 modulename = 'haha'#模块字符串 例如modulename = 'pickle'

然后:m =__import__('mymodule')

下面方法就可以用python动态创建类

如果要取得模块中的一个属性的话:可以用getattr(),比如:

c = getattr(m, 'myclass')

myobject = c()

但是要注意:如果myclass并不在mymodule的自动导出列表中(__all__),则必须显式地导入,例如:

m = __import__('mymodule', globals(), locals(), ['myclass'])

c = getattr(m, 'myclass')

myobject = c()

3 from mytestm import version,sayhi 使用的是:

sayhi();print version

如果是m = __import__('mytestm') 使用是m.sayhi();print m.version;

================导出==========del (sys) del( 变量)

a=2;

print dir()

del(a);

print dir()

================基础知识=======

1 变量和赋值:Python是动态类型语言,不需要预先声明变量的类型。变量的类型在赋值的那一刻被初始化。Python变量名是大小写敏感的,即“cAsE”与“CaSe”是不同的变量,Python区分大小写。如果你有变量初始化的习惯也是可以的。2 数字:Python有五种基本类型的数字。int(有符号整数类型)、long(长整型)、bool(布尔类型)、float(浮点数)、complex(复数)。值得注意的是:Python的长整型比C的范围要广得多,它仅限于用户计算机的虚拟内存总数,在未来的版本中,Python极有可能不再区分整型和长整型,而将两种类型统一为长整型。复数这个类型在其它的语言中通常是不被直接支持,对复数的支持是Python的一个个性化特点3 字符串:Python中的字符串被定义为引号之间的字符集合。成对的单引号、双引号、三引号(三个连续的单引号或双引号)可以用来表示字符串。其中,三引号支持多行。字符串支持索引运算符 [] 和切片运算符 [:]。如:x='abcde',x[0]的值是'a',x[4]的值是'e'。另外,Python支持负的索引值,x[-1]的值为'e',它是字符串序列中的最后一个元素,x[-2]的值是'd',它是字符串序列中的倒数第二个元素,如果你想要了解更多的话,可以看看python 列表这块。

切片只有列表?4 注释 “#”Python的注释语句从“#”号开始,直到一行结束的所有内容都是注释,注释代码对合作开发很有帮助,所以要养成这个好习惯。5 代码块及缩进对齐Python的代码块通过缩进对齐表达代码逻辑,而不是使用大括号(从此告别神圣的大括号战争了),Python支持制表符缩进和空格缩进,但Python社区推荐使用四空格缩进。也可以使用制表符缩进,但切不可以混用两种缩进符号。6 分号:“;”分号允许将多个语句写在同一行上,语句以分号隔开,这些语句不能在这一行开始新的代码块。虽然可以这样做,但是Python不提倡使用“;”将多个语句写在一行,这样不便于代码的阅读,也不方便以后对代码进行扩展和维护。7 操作符:因为python 是强类型的语言,所以在用操作符的话,比如+号等,要先统一两个操作数的类型,而不是直接操作,比如一个操作数是字符类型,一个是数字的话,如果用+号的话,python 会报错的:TypeError: unsupported operand type(s) for +: 'int' and 'str'希望上面的python 基础知识能够让你短时间的了解python的特性。了解好了基础知识,你可以看看python mysql 安装包python查找网页关键词排名python代码格式问题python oop之私有机制浅谈python重载python ispython lambda