您的位置:首页 > 编程语言 > Python开发

学习 python 连接字符串,替换,截取,引用,拷贝,is,def返回值,异常

2014-02-20 11:12 676 查看
先进方法1:
用字符串的join方法:
a = ['a','b','c','d']
content = ''
content = 'K'.join(a)
print content
content的结果:'akbkckd'

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

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

=============替换=======
a = 'hello word'
我把a字符串里的word替换为python
1用字符串本身的replace方法
a.replace('word','python')
输出的结果是hello python
2用正则表达式来完成替换:
import re
strinfo = 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开始的,最大范围是字符串长度少1
s = 'ilovepython'
s[0]的结果是i

2是从右到左索引默认-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的内容给b
a[1]=6
print a
输出a的内容是[1,6,3]
而b的内容是[1,2,3]

继续学http://www.cnpythoner.com/post/20.html

========= 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/2
exceptException,e:
print e
else:
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")返回True
a.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,pop
del info['phone'] 删除某个元素
info.clear()删除字典的全部元素
info.pop('name')
5 in 和 has_key() 成员关系操作,判断元素是否存在。 in not is
print phone in info
print 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里,需要表示一个字符串对象的话,单引号和双引号没有区别
[b]三引号的形式用来输入多行文本[/b]

=================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 0x01AD6070>
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-8
import sys
import MySQLdb
reload(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种:
1 import 模块名
例如#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  替换 截取 is