Python 初学笔记


>>> print "isn't that grand"
isn't that grand #不需要转义的
#为了让文字符扩展到多行,可以在一行的末尾使用反斜线符号,意味着下面一行是上面字符串的延续。
#换行符 /n
#用一对连续的三引用符号将字符串圈起来可以,文本将按照原貌存储。“”“大三大四的”“”
#在字符前面加R或者r,表示该字符串是一个“原”字符串,即使其中包含转义字符,也将被忽略。
#在前面加U或者u,使之成为Unicode字符串
#通过索引访问单个字符 mystr[i]
#字符串的切片操作 mystr[i:j:k],第三个参数可以没有,表示步长。当步长为负数时,必须让开始索引大于结束索引
#字符串遍历操作 for c in mystr:
#拼接:mystr+'odl'
#多次重复:‘xo’*3
#用mystr.isdigit() 测试字符串的内容,如果mystr不是空的而且所有字符都是数字,将返回true。
#改成大写操作 mystr.upper()
#计算字符串出现的次数 mystr.count('needle') 计算‘needle’在mystr中出现的次数
#可以用mystr.splitlines()将字符串分隔成多个单行字符串并植入一个列表中
#用join重新生成一个庞大的字符串
--将一个字符转换为相应的ASCII或者Unicode码
ASCII;直接使用内置的函数 ord(i)
Unicode:同上 chr(97),返回对应的ASCII
把数字的Unicode码转化为长度为1的Unicode字符串,使用 unichr()

return isinstance(anobj,basestring)  #判断anobj是不是 字符串
--字符串的对齐
str.ljust(20)
str.rjust(20)
str.center(20)  也可以用str.center(20,'+')
--去除字符串两端的空格
str.lstrip()  #去除左边的空格
str.rstrip() #去除右边的空格
str.strip()   #去除两边的空格
例:x='xyxxyy hejyx yyx'
   print '|'+x.strip('xy')+'|'
   | hejyx |  #只有开头的x y 被真正移除,开头和结尾 的空格被保留下来了
--合并字符串
str.join(pieces)
str='%s%s something %s yet'%(piece,piece2,piece3)
str=piece1+piece2+piece3;  #尽量不使用这种方法,(性能问题)

pow(2,3)  #2^3运算
abs(-10)=10  #求绝对值
round(1.0/2.0)=1.0  #把浮点数四舍五入为最接近的整数值
import math
math.floor (32.9)=32.0 #取整操作

>>> from math import sqrt  #这种形式可以直接使用函数,不需要模块名
>>> sqrt(9)
3.0   #开方

nan  #not a number

temp=42
>>> print 'asdas'+'temp'
asdastemp   #字符串的拼接 temp用的是单引号

temp=42
>>>print 'as'+`temp`  #这里temp用的是反引号(反引号在tab键上面)
as42 

str,repr和反引号是把python值变为字符串的三种方法

raw_input与input的区别:input会假设用户输入的是合法的python表达式,输入字符串的时候要加引号的
而raw_input会把所有的输入当做原始数据(尽可能用这个)

>>> print r"adas\"
SyntaxError: EOL while scanning string literal
>>> print r"sads"
sads    #原始字符串的结尾不能有\,如果需要的话需要对其进行转义
>>> print r"dsa\\"
dsa\\    #虽然进行了转义但是居然出现了两个\\
>>> print r'asd' '\\'  #这样就可以出新一个\
asd\

#两种相同类型的序列才能进行操作,列表与字符串不能操作的
>>> 'world'+[1,2,3]

Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    'world'+[1,2,3]
TypeError: cannot concatenate 'str' and 'list' objects

#None表示什么都没有,N大写。以下表示初始化一个长度为10的列表
>>> s=[None]*10
>>> s
[None, None, None, None, None, None, None, None, None, None]

#判断某个值是否在序列中
>>> users=['foo','shan','lan']
>>> raw_input('Enter your name')in users
Enter your nameshan
True

#检查用户名和PIN码
datebase=[['shan','1111'],['lan','2222'],['jie','3333']]
username=raw_input('username:')
pin=raw_input('Pin code:')
if[username,pin] in datebase:print 'Access granted'

输出:username:shan
Pin code:1111
Access granted
>>>

#根据字符串创建列表
>>> list('hello')
['h', 'e', 'l', 'l', 'o']

#列表的删除操作
>>> name=['shan','lan','jie']
>>> del name[1]
>>> name
['shan', 'jie']

#切片赋值,插入新元素
>>> numbers=[1,5]
>>> numbers[1:1]=[2,3,4]
>>> numbers
[1, 2, 3, 4, 5]

#在列表末尾追加新元素
>>> lis=[1,2]
>>> lis.append(4)
>>> lis
[1, 2, 4]

#统计某个元素在列表中出现的次数
>>> ['q','q','q','w','w'].count('q')
3

#拓展列表
>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6]
或者
>>> a=[1,2]
>>> b=[3,4]
>>> a[len(a):]=b
>>> a
[1, 2, 3, 4]

#寻找某个值的索引
>>> name=['shan','lan','jie']
>>> name.index('shan')
0

#将对象插入列表
>>> name=['shan','lan','jie']
>>> name.insert(1,"ssss")
>>> name
['shan', 'ssss', 'lan', 'jie']

#列表的移除操作之pop  (pop是有返回值的)
>>> name=['shan','lan','jie']
>>> name.pop()  #默认是移除最后一个
'jie'
>>> name
['shan', 'lan']
>>> name.pop(0)
'shan'
>>> name
['lan']
PS;pop和append正好相对
>>> x=[1,2,3]
>>> x.append(x.pop())
>>> x
[1, 2, 3]


#列表元素的移除操作之remove (remove是没有返回值的)
>>> name=['shan','lan','jie']
>>> name.remove('shan')
>>> name
['lan', 'jie']

#列表元素的反向操作
>>> x=[1,2,3]
>>> x.reverse()
>>> x
[3, 2, 1]


#列表元素的排序
>>> y=['1','2','8','4','3','9']
>>> y.sort()
>>> y
['1', '2', '3', '4', '8', '9']
PS :当用户需要一个排序好的列表副本,同时有保留原列表不变的时候
>>> x=['1','2','8','4','3','9']
>>> y=x.sort()
>>> print y
None  #是错的!说明sort()返回的是空值
#正确做法,先做一个副本给y,在让y排序
>>> x=['1','2','8','4','3','9']
>>> y=x[:]
>>> y.sort()
>>> x
['1', '2', '8', '4', '3', '9']
>>> y
['1', '2', '3', '4', '8', '9']
#简单的赋值是没有用的
>>> x=['1','2','8','4','3','9']
>>> y=x
>>> y.sort()
>>> y
['1', '2', '3', '4', '8', '9']
>>> x
['1', '2', '3', '4', '8', '9']
#另一种获取已排序的列表副本的方法是使用sorted(),它可以返回列表
>>> x=['1','2','8','4','3','9']
>>> y=sorted(x)
>>> x
['1', '2', '8', '4', '3', '9']
>>> y
['1', '2', '3', '4', '8', '9']
#按照关键字排序
>>> name=['shan','lan','ji','aaaaa']
>>> name.sort(key=len)
>>> name
['ji', 'lan', 'shan', 'aaaaa']
>>> x=['1','2','8','4','3','9']
>>> x.sort(reverse=True)
>>> x
['9', '8', '4', '3', '2', '1']

#把序列转化为元组
>>> tuple([1,2,3])
(1, 2, 3)
>>> tuple('abc')
('a', 'b', 'c')
>>> tuple((1,2,3))
(1, 2, 3)

#字符串是不能改变的
>>> name='shanlanjie'
>>> name[-3:]='sss'

Traceback (most recent call last):
  File "<pyshell#127>", line 1, in <module>
    name[-3:]='sss'
TypeError: 'str' object does not support item assignment

#字符串的查找
>>> name='i am shanlanjie'
>>> name.find('shanlanjie')
5
>>> name='i am shanlanjie am i'
>>> name.find('am',2)  #提供起始点
2
>>> name.find('shanlanjie',0,5)
-1  #提供起始点和终止点


#字符串的join方法
>>> add='+'
>>> name=['shan','lan','jie']  #这个地方必须是字符串
>>> add.join (name)
'shan+lan+jie'

#把字符串变成小写
>>> 'DSADSADSAD'.lower()
'dsadsadsad'

#标题转换
>>> 'i am shanlanjie'.title()
'I Am Shanlanjie'

#子字符串的替换
>>>'i am shanlanjie'.replace('am','am not')
'i am not shanlanjie'

#将字符串分割成序列
>>> '1+2+3+4+5'.split('+')
['1', '2', '3', '4', '5']

#dict函数创建字典
>>> items=[('name','shanlanjie'),('age',21)]
>>> d=dict(items)
>>> d
{'age': 21, 'name': 'shanlanjie'}
>>> d['name']
'shanlanjie'
>>> d=dict(name='shanlanjie',age=21) #这是通过关键字参数创建字典
>>> d
{'age': 21, 'name': 'shanlanjie'}

#字典的格式化字符串
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> "big shan's phone number is %(lan)s."% name
"big shan's phone number is 2222."

#(字典)clear清除所有项
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> f=name.clear()
>>> name
{}
>>> f
>>> print f
None

#(字典)的copy方法。(浅复制)
>>> x={'name':'admin','numbers':['1111','2222','3333']}
>>> y=x.copy()
>>> y['name']='shanlanjie'   #当在副本替换值的时候,原始字典不变
>>> y['numbers'].remove('1111')  #当在副本改变值的时候,原始字典将会改变
>>> y
{'name': 'shanlanjie', 'numbers': ['2222', '3333']}
>>> x
{'name': 'admin', 'numbers': ['2222', '3333']}

#建立空字典
>>> {}.fromkeys(['name','age'])
{'age': None, 'name': None}   #默认是None
>>> {}.fromkeys(['name','age'],'sadsd')
{'age': 'sadsd', 'name': 'sadsd'}
>>>

#用get做字典的查询
>>> d={}
>>>
>>> print d.get('name')
None  #默认是None
>>> d['name']='shan'
>>> d.get('name')
'shan'
>>> d.get('age','21')
'21'   #改变默认值
>>>

#用has_key查询字典中是否含有某个值
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> name.has_key('shan')
True

#items方法将所有子典项以列表方式返回,返回时没有特殊顺序
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> name.items()
[('lan', '2222'), ('jie', '3333'), ('shan', '1111')]

#iteritems返回的是迭代器
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> it=name.iteritems()
>>> it
<dictionary-itemiterator object at 0x020B2AE0>
>>> list(it)
[('lan', '2222'), ('jie', '3333'), ('shan', '1111')]

#字典的pop,删除某一个对象
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> name.pop('shan')
'1111'
>>> name
{'lan': '2222', 'jie': '3333'}

#字典的popitem  (随机弹出一个删除,字典是没有顺序的)
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> name.popitem()
('lan', '2222')
>>> name
{'jie': '3333', 'shan': '1111'}

#字典的setdefault用法
>>> d={}
>>> d.setdefault('name','shanlanjie')
'shanlanjie'   #当键不存在时,返回默认值
>>> d
{'name': 'shanlanjie'}
>>> d.setdefault('name','NN')
'shanlanjie'  #当键存在时,返回键值
>>> d
{'name': 'shanlanjie'}
>>> d={}
>>> print d.setdefault('name') 
None  #默认值是None

#字典的update
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> x={'shan':'4444'}
>>> name.update(x)  #用x更新name
>>> name
{'lan': '2222', 'jie': '3333', 'shan': '4444'}

#用values以列表的形式返回字典中的值(可重复)
>>> name={'shan':'1111','lan':'2222','jie':'3333','big':'1111'}
>>> name.values()
['1111', '2222', '3333', '1111']

#is运算符 判定的是同一性而不是相等性 x,y,z虽然值相等,但是不是同一个对象
>>> x=y=[1,2,3]
>>> z=[1,2,3]
>>> x==y
True
>>> x is y
True
>>> x is z  #用==判断是否相等,用is判断是不是同一个对象
False

#range()
>>> range(0,10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]  #包含上线,不包含下线

#循环遍历字典元素
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> for key in name:
 print key,'sdsad',name[key]

 
lan sdsad 2222
jie sdsad 3333
shan sdsad 1111
或者
>>> name={'shan':'1111','lan':'2222','jie':'3333'}
>>> for key,value in name.items():
 print key,'dassad',value

 
lan adssa value
jie adssa value
shan adssa value

#并行迭代
>>> name=['shan','lan','jie']
>>> ages=[12,15,34]
>>> for i in range(len(name)):
 print name[i],'is',ages[i],'years old'

 
shan is 12 years old
lan is 15 years old
jie is 34 years old
或者
>>> name=['shan','lan','jie']
>>> ages=[12,15,34]
>>> zip(name,ages)   #用zip函数把两个序列压缩到一起
[('shan', 12), ('lan', 15), ('jie', 34)]
>>> for nam,age in zip(name,ages):
 print nam,'is',age,'years old'

 
shan is 12 years old
lan is 15 years old
jie is 34 years old

#翻转和排序迭代
>>> sorted([4,3,5,2])
[2, 3, 4, 5]
>>> sorted('hello world')
[' ', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
>>> list(reversed('hello world'))
['d', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'h']
>>> ''.join(reversed('hello world'))
'dlrow olleh'

#列表推倒式
>>> [x*x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [x*x for x in range(10) if x%3==0]
[0, 9, 36, 81]
>>> [(x,y)for x in range(3)for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

#pass 什么都不发生

#关于del
>>> name=['shan','lan','jie']
>>> name2=name
>>> name2
['shan', 'lan', 'jie']
>>> name=None   #把name赋空值,但是并不是删除
>>> name
>>> name2  #name2与name指向同一个字典
['shan', 'lan', 'jie']
>>> name=['shan','lan','jie']
>>> name2=name
>>> del name  #删除了,只是删除了名字,不会删除值的。
>>> name

Traceback (most recent call last):
  File "<pyshell#275>", line 1, in <module>
    name
NameError: name 'name' is not defined
>>> name2   #python是没有办法删除值的
['shan', 'lan', 'jie']

#exec执行一个字符串的语句,不返回任何对象
>>> exec "print 'hello world'"
hello world

>>> from math import sqrt
>>> exec "sqrt=1"  #干扰了命名空间
>>> sqrt(4)

Traceback (most recent call last):
  File "<pyshell#286>", line 1, in <module>
    sqrt(4)
TypeError: 'int' object is not callable

>>> from math import sqrt
>>> scope={}  #scope是作用域的意思
>>> exec 'sqrt=1' in scope  #把要执行的东西放到作用域,就不怕收到其他干扰了
>>> sqrt(4)
2.0
>>> scope['sqrt']
1

#eval('用于求值')
>>> eval(raw_input("计算:"))
计算:12+12+10*12
144

-----抽象
#内建函数callable判读函数是否可用
>>> import math
>>> x=1
>>> callable(x)
False
>>> y=math.sqrt
>>> callable(y)
True

#给函数写文档
def hello(name):
    '''shanlanjie'''
    return 'hello'+name
 
#给函数提供任意多的参数
def print_params(*params):
    print params
>>> print_params(1,2,3)
(1, 2, 3)   #返回的是元组

def print_params(**params):
    print params
>>> print_params(x=1,y=2,z=3)
{'y': 2, 'x': 1, 'z': 3}  #返回的是字典

#继承
class Filter:
    def init(self):
        self.blocked=[]
class Spamfiter(Filter):  #Spamfilter继承了Filter
    def init(self):  #重写了超类中的init()
        self.blocked=['spam']
  
>>> issubclass(Spamfiter,Filter)  #判断Spamfiter是不是Filter的子类
True

---正则表达式
.(点号)  --通配符
\  --转义字符
[a-z] --匹配a-z之间的字母
[^abc]  --匹配除了abc之间的字符
| --选择符
(www\.)?    --在后面加问号就变成了可选项,可以出现在匹配字符串中,但是不是必须的
w* --允许重复匹配0次或者多次
w+ --允许重复一次或者多次
w{m,n}  --允许匹配m-n次。

posted @ 2012-03-11 13:59  简道云  阅读(3856)  评论(0编辑  收藏  举报