20140421

1. 三大利器:

dir----列出所有内部方法

a=1

dir(a) 可以列出所有内部方法,就是带两个下划线的;带一个下划线的是普通方法

help---查看帮助

help(a.bit_length)

type---查看数据类型

type(a)

2. str类型的神奇用法


结果

解释说明

"hello"+"world"

"helloworld"

连接

’hello‘*3

"hellohellohello"

重复

“hello”[0]

"h"       

第一个位置

"hello"[-1]

"o"

最后一个位置

"hello"[::-1]

"olleh"

反转

"hello"[1:4]

"ell"

取片段,右边界不包含

len("hello")

5

求长度

"hello"<"jello"

1

字符串比较

"e" in "hello"

1

 

"escapes:\n etc,\033 etc, \if etc"

 

 

'single quotes' '''triple quotes''' r''raw strings''

 

r''表示不会转义,正则表达式中多用

"The %s is %d" %('abc',12)

 

 

3. 容器

  • list ,包括:元素可变---[],元素异构---a=[33,"hiboy",["i', 'am"]]

常用list操作方法

 

操作

结果

解释说明

a = range(5)

5

#[0,1,2,3,4]

a.pop()

None

#[0,1,2,3,4]

a.reverse()

None

#[4,3,2,1,0]

a.sort()

None

#[0,1,2,3,4]

a.insert(0,42)

None

#[42,0,1,2,3,4]在第一个位置插入42

a.append(['another','list'])

None

#[0,1,2,3,4,['another','list']]

a.extend(['another','list'])

None

#[0,1,2,3,4,'another','list']

a=[0]*3

 

#[0,0,0]

  • tuple,元组 包括:元素不可变;元素异构:记住c(0,)逗号必须有,不然就认成别的了
  • dict---key不可变,value可变 a={key:value};元素异构;

 

描述

解释说明

a={}

空字典

b={'x':3,'y':4}

 

c={' uid':105,'login':' beazley',' name':' David Beazley'}

 

 

 

u=c[' uid']

获取一个元素值

c[' shell']="/bin/sh"

赋值

c['login']=23

 

b.get('Perl','unknown')

结果是:unknown

b.keys()

结果是:[x,y]

b.values()

[3,4]

b.items()

[('y',4),('x',3)]

d=b.copy():del b['x']

b:{'y':4},d:{'x':3,'y':4}

b[2]=3:b.update(d)

b:{'y':4,2:3},d:{'x':3,'y':4,'2':3}

dict常用于:遍历

items() keys() values()
iteritems() iterkeys() itervalues() --- 元素超过1w时建议使用,效率高;除此之外下面3个和上面的功能没有区别

 

4. 控制

  • if 不多说了
  • for有个神奇的地方:
mylist = "for statement"
for word in mylist:
  print word

else:#最终执行

  print "End list"

  • while不多说

break --终止当前循环

continue--终止本次循环

pass:什么事都不做

  • 由于python不支持switch,故可以使用dict模拟switch:
 def f1(a):
  print 1,a
def f2(b):
  print 2,b
def default(d):
  print 'default',4
sw={
  'f1':f1,
  'f2':f2,
  'default':default,
}
sw['f1'](4) #1 4
sw['f2'](5) #2 5
sw['default'](8) #default 4

5. 变量,无须声明,初始化等,id(变量名)能够识别是哪个变量的引用 a=1;b=1

6. 灵活无比的函数

deffuncname(arg1,arg2=0,*arg3,**arg4): #分别声明普通参数,元组参数,dict字典参数。一个函数中只可以有一个元组和一个字典

"""doc文档描述放这里"""
  statments
  return xx

例如:

def gcd(a,b):
  "this is self definition"
  while a!=0:
    a,b=b%a,a
  return b
>>>gcd.__doc__
"this is self definition"
>>>gcd(12,20)
4

又如:

def h(*t):print t
>>>h(1)
(1,)
>>>h(1,2,3,5,6,7)
(1,2,3,5,6,7)
def k(**d):print d
>>>k(m=1,n=2)
{'m':1,'n':2}
  • 函数作用域规则:Local(局部) -> Global(全局) ->Built-in(内置)->NameError异常
  • Python没有函数重载,因为函数是没类型的
  • python函数可以返回多个值么?可以的 tuple
  • 下面函数有什么问题?
  • def func(in,out):print in.out out=2;有问题,关键字不可以用,会覆盖原有意义

 

核心库:

os sys string getopt StringIO struct pickle...

正则库

re module

网络库

socket httplib htmllib ftplib smtplib lxml...

在线参考

标准库:http://docs.python.org/library/index.html

 ppt中的作业,实现如下:遇到的问题是,&&要用and代替;range(m,n)是指从m开始到n-1;raw_input()返回的类型默认是string的,用在这里还需要用isdigit()转换一下,因此改用input();print(),打印后不换行,但有一个空格,还没找到好的去除方法

import sys
n = input("Pls input your number:") 
for i in range(1,n+1):
 for j in range(1,i+1):
 # if (j%2==0) and (i%2==0):
 #sys.stdout.write("*")
 # print "*",
 if (j==(i/2+1)) and (i%2==1):
 print "!",
 else:
 print "*",
 print "\n"

下面程序的输出是a,c. for each in alist:each相当于有一个指针。each指向第一个元素的时候,打印a;同时remove掉a;这时alist长度变化了,原先第一个元素变成了b;each指针向下走,变成了a;a被打印出来了。因此,这个程序的教训是:不要随意改变列表长度。

alist = ['a','b','c','d']
for each in alist:
  print each  
  alist.remove(each)

模块查找路径依次是:sys.path -- PYTHONPATH -- site-packages

接下来的程序是很常见的用于自测自定义程序是否work的:

#!/usr/bin/python
if __name__=='__main__':
  print 'This program is being run by itself'
else:
  print 'I am bneing imported from another module'

包:包是一个目录树,每个目录下都有一个__init__.py文件

包工具:目前主要是pip;安装包:pip install/uninstall simplejson

类定义中的:

类方法classmethod:整个类只有这么一个方法,

statcitmethod

例子:实现一个堆栈

class Stack(object):
"A well-known data structure..."
def __init__(self): #构造函数
  self.items = []
def push(self,x):
  self.items.append(x) 
def pop(self):
  x=self.items[-1]
  del self.items[-1]
  return x
def empty(self):
  return len(self.items)==0
x=Stack()
x.empty()  # True
x.push(1)  # [1]
x.empty()  # False
x.push("hello")  # [1,"hello"]
x.pop()  #hello
x.items  #[1]

类 - 继承

class SchoolMember(object):
'''Rmpresents any school member.'''
def __init__(self,name,age):
   = name
  self.age - age
  print '(Initialized SchoolMember:%s)' % 
def tell(self):
'''Tell my details.'''
  print 'Name:"%s" Age:"%s"' %(,self.age),
class Teacher(SchoolMember):
'''Represents a teacher.'''
def __init__(self,name,age,salary):
  SchoolMember.__init__(self,name,age)
  self.salary = salary
  print '(Initialized Teacher:%s)' % 
def tell(self):
  SchoolMember.tell(self)
  print 'Salary:"%d"' % self.salary
class Student(SchoolMember):
def __init__(self,name,age,score):
SchoolMember.__init__(self,name,age)
self.score = score
 
t=Teacher('Mrs.Shrividya',40,30000) #实例化
s = Student('Swaroop',22,75)
t.tell()
s.tell()