python基础

来源:互联网 发布:关于淘宝兼职外宣说说 编辑:程序博客网 时间:2024/06/05 10:20
python基本语法:
递归:1、调用自身,2、收敛条件(最小可能性问题:有基本返回值)
eg:   阶乘
def factorial(n):
     if n==1:
return 1
     else:
return n*factorial(n-1)
eg:  幂
def power(x,n):
if n==0:
return 1
else:
return x*power(x,n-1)
整数:1、长整型数,2、十六进制和八进制
**求幂
变量:就是一个能存储数据的容器
yy=input(“获取用户输入的值”)
模块就是py文件
单引号和双引号都可以用在字符串,交错使用可替代转义符
原始字符串: eg:  path=r’c:\nowhere’
序列:
eg:  dominator=[[‘winber’,18],[‘beauty’,16]]
索引下标从0开始,负数表示倒数第几个
分片:numbers[-3:]  从倒数第3个数到最后
numbers[0:10:2]  从第0个开始到第10个,不长为2,步长为负,则从右往左
乘法:增加个数
包含:  eg:  ’somebody’  in  famous
获取长度: len(numbers)
列表(有序的集合):
python内置数据结构list
元素赋值,删除元素,分片赋值
numbers[1:1] =[2,3,4]    对第一个元素进行插入操作
一些方法:numbers.append(5)         numbers.count(5) 
numbers.extend([8,9,10]) 在原列表追加   numbers+[8,9,10]则产生新列表
a(len(a):]=b     在a的最后追加b
week.index(’monday’)   获取元素monday的下标
week.index(3,'lastday’)   在指定位置插入元素
numbers.reverse()倒序sorted(numbers)产生新的排序的列表
week.sort(key=len)   按字符串长度进行排序
元组(不可变的序列):
tuple[1][3]    第1个元素中的第3个元素
元组相加产生新的元组
字符串(不可变序列的一种):
分片读取   website[2:5]
格式化: %占位符     可以用元组赋值
  format = “pi with three decimals:%.3f"
  print format % pi
‘%s plus %s equals %s’ % (1,1,2)
‘%.5s’ % ‘Guido van Rossum’    用字符串的前5位赋值
常用方法:
find:
str.find(‘DataMan’)     区分大小写
str.find(‘winbox’,6,18)     指定区间内查询
join:
dirs=‘’,’usr’,’bin’,’env’
‘/‘.join(dirs)             在元素之间连接
lower:
str.lower()
replace:
‘this is a ship’.replace(‘is’,’eea’)
split:
‘using the default’.split()     默认按空格拆分字符串,返回列表
trip:
‘*** SPAM * for * everyone !!! ***’.trip(‘ *!’)    删除字符串两边指定符号
转换函数maketrans:
table=maketrans(‘is’,’uk’)     i替换成u,s替换成k
str.translate(table,’ ‘)    按table替换,并删除空格
字典(内置数据结构,无序集合):
类似java中的hashtable,表示方法类似js的json
键不能是列表
将列表转化为字典:items=[(’name’,’Gumby’),(‘age’,42)]      d=dict(items)
常用方法:
d.clear()   清空原字典变成{},不会创建新对象
copy(浅复制): 只复制第一层元素值,其他层的值用原引用
深复制: from copy import deepcopy  
  dc=deepcopy(d)     完全复制出一个新的对象
fromkeys:   {}.fromkeys([’name’,’age’],’(unknown)’)
d[’name’]  没有该键会报错,d.get(’name’) 没有name返回None
d.has_key(’name’)  字典中是否包含指定的键
d.items()  将字典转化为列表,元素为元组
it=iteritems()  获得迭代器
d.pop(‘x’)   弹出并删除指定元素
d.setdefault(’name’,’N/A’)   如果没获取到name的值,就设置name值为N/A
update:用另外一个字典更改原字典
Python赋值语句和print、import:
print ‘hello’,3,’world’    打印多个字符串,空格隔开
print (1,2,3)     打印元组
import  math:  math.sqrt(121)     math.pow(10,3)
from math import sort:   sort(9)
a,b,c,d=’spam’   字符序列赋值
x=y=z=66    链式赋值
x+=1 , x*=2 , x/=2 , x /=2   增量赋值
条件与条件语句:
布尔类型:True , False      非零(None,[],{},'')即真
执行流程:顺序结构,选择结构,循环结构
if语句:
score=input(‘成绩:’)
if score>450:print ‘清华’
elif score>430:print ‘北大'
else:print '上海交大’
判断值相等用==,判断是否为同一个对象用is
if score>480 and age<18 or isGenius:print ‘天才’     and,or   短路运算符
断言:assert 14<age<18    False会报错
while循环:
while name:
name=raw_input(‘please enter your name:’)
print ‘Hello,%s!’ % name
for循环:
wonders=[‘winber’,’dominate’,’the’,’world’]
for wonder in wonders:
print wonder
range(100,0,-10)产生序列函数,左闭右开,步长为反方向的10
遍历字典:for key,value in d.items():print key,’ corresponds to ‘,value
一些迭代工具:
zip(names,ages)     合并压缩两个列表
for index,string in enumerate(strings):
     if ‘xxx’ in string:strings[index]=‘[JLU]’
跳出循环:  break 跳出整个循环      continue 跳出本次循环
列表解析表达式:
[(x,y) for x in range(4) for y in range(10,14)]    类似笛卡尔乘积
[x for x in range(10) if x%2==0]    取出序列中偶数
pass:占位,什么也不做
del:从内存中彻底删除变量
exec:执行字符串中的语句
eval:求值语句
scope={}
scope[‘x’]=22
scope[‘y’]=33
eval(‘(x+y)*2’,scope)
函数:
def fibs(num):
‘斐波拉契函数说明'
result=[0,1]
for i in range(num-2):
result.append(result[-2]+result[-1])
return result
任何函数默认返回None
参数值传递传的是变量的副本
根据关键字赋值,可打乱顺序:lookup(label=‘middle’,data=storage,name=‘lie’)
函数定义给默认值:def hello(greeting=‘hello’,name=‘world’):
print ‘%s, $s’ % (greeting,name)
调用时如果不传参则使用默认值,例如hello()
可变参数:  
def desplay_params(*params):print params     传元组进去  desplay_params(1,2,3)
def show_params(**par):print par传字典进去   show_params(x=1,y=2,z=3,abc=“xxx”)
def print_params(x,y,z=3,*t,**d)   混合传参
作用域(LEGB原则):函数内局部,函数外全局
global:在函数内部改变全局变量
内嵌函数: 返回一个函数
面向对象:
类:用户创建的对象模型
类型:python内建的对象,基于类型
class subFilter(Filter):           subFilter继承于Filter
异常:Exception是所有异常的基类
raise customException(“抛出一个自定义异常”)
try:
     print 10/0
except ZeroDivisionError,e:#捕获异常
     print “OMG”,e
捕获所有异常:except :print “出错"
元组方式捕获异常:except (ZeroDivisionError,NameError,TypeError):
         print “可能发生三种异常情况”,e
else:try块正常执行则执行else块语句
finally:最终必执行代码
魔法方法和属性:
__方法名称__               方法名前后两个下划线
构造方法:  class FooBar:
def __init__(self,value=42):
self.somevar=value
self是指向对象实例的引用
__del__:析构方法
属性(property):通过访问器定义的属性
__metaclass__=type
class Rectangle:
def __init__(self):
     self.width=0
     self.height=0
def setSize(self,size):
     self.width,self.height=size
def getSize(self):
     return self.width,self.height
size=property(getSize,setSize)
另一种实现方式(拦截):
class Rectangle2:
def __init__(self):
self.width=0
self.height=0
def __setattr__(self,name,value):
if name==‘size’:
self.width,self.height=value
else:
self.__dict__[name]=value
def __getattr__(self,name):
if name==’size’:
return self.width,self.height
else:
raise AttributeError
静态方法:用staticmethod(方法名)包装
生成器(2.2以后版本才出来):
包含yield语句,生成一个序列,生成器就是用函数定义的迭代器
定义中包括next()和iter
list(生成器)返回一个列表
迭代器:重复做一些事情很多次的对象
python模块:
sys.path.append(“要导入模块的存储路径”)
 一般通过配环境变量导入所需模块
标准库:sys模块,os模块,fileinput模块
sys.argv   exit([arg])   modules   path   platform   stdin   stdout   stderr
os.environ   system(command)   startfile()   sep   pathsep   linesep   urandom(n)
集合、堆和双端队列
set由序列构建,自动去重
|  并集,&  交集,a.issubset(b)   a是不是b的子集,也可用 a<=b 表示
把列表堆化:heapify()
from collections import deque   双端队列
time模块
time.asctime() 把时间元组转化为字符串    time.strftime(‘%Y-%m-%d’)     time.mktime()      localtime() 本地时间转秒数
random模块:
random():0<=n<1      getrandbits(n)      uniform(a,b)      randrange([start],stop,[step])
choice(seq)      shuffle(seq,[random])      sample(seq,n)
shelve模块:字典式存储一个对象
s=shelve.open(’test.dat')
re模块:支持正则表达式
eg:字符串分割
some_text =‘alpha,beta,,,,gama delta’
re.split(‘[,]+’,some_text)
eg:找出字符串中所有单词
pat=‘[a-zA-Z]+’
text=‘“Hm….Err - - are you sure?” he said, sounding insecure.’
re.findall(pat,text)
search()      match()      findall():列出字串中模式所有的匹配项
sub():利用表达式的匹配项替换指定的字符串
escape():转义正则表达式中所用的特殊字符
Python文件:
readline()   readlines() 读出来的是一个列表,可迭代,每个元素是一行   seek()         默认读权限 r
Python数据库支持:遵循DB-API规范
eg:   #food_query.py
import sqlite3,sys
conn = sqlite3.connect(‘food.db’)
curs=conn.cursor()
query=’select * from food where %s’ % sys.argv[1]
print query
curs.execute(query)
names=[f[0] for f in curs.description]
for row in curs.fetchall():
     for pair in zip(names,row):
          print ‘%s:%s’  %  pair
  print
网络编程:socket套接字,监听端口,网络协议,连接
Python屏幕抓取:
HTMLParser  回调方法   事件驱动          
handle_starttag(tag,attrs)    找到开始标签时调用
handle_endtag(tag)   找到结束标签时调用
handle_data(data)   使用文本数据时调用
from url lib import urlopen
from HTMLParser import HTMLParser
class Scraper(HTMLParser):
in_link = False
def handle_starttag(self,tag,attrs):
attrs=dic(attrs)
if tag==‘a’ and ‘href’ in attrs:
    self.in_link=True
    self.chuks=[]
    self.url=attrs[‘href']
def handle_endtag(self,tag):
if tag==‘a’ and self.in_link:
   print ‘%s (%s) ‘ % (‘’.join(self.chunks),self.url)
   self.in_link=False
def handle_data(self,data):
   if self.in_link:
        self.chunks.append(data)
text=urlopen(‘http://www.winbox.com/’).read()
parser=Scraper()
parser.feed(text)
parser.close()
Python测试:
Python扩展:Jython    java扩展
Python 配置文件和日志记录:
from config import PI 
使用标准库模块         ConfigParser         config.txt
日志记录级别      20     loggin.INFO          10   logging.DEBUG        0   logging.NOTEST
Python项目实例:处理xml
XML      可扩展标记语言
from xml.sax.handler import ContentHandler
from xml.sax import parse
class HeadlineHandler(ContentHandler):
in_Headline=False
def _init_(self,headlines):
    ContentHandler._init_(self)
    self.headlines=headlines
    self.data=[]
def startElement(self,name,attrs):
    if name==“h1”:
self.in_Headline=True
def endElement(self,name):
    if name==“h1”:
text=‘’.join(self.data)
self.data=[]
self.headlines.append(text)
self.in_Headline=False
def characters(self,string):
    if self.in_Headline:
self.data.append(string)
headines=[]
parse(“website.xml”,HeadlineHandler(headlines))
print ’the following <h1> elements were found:’
for h in headlines:
print h
Python 项目实例:虚拟茶话会
初次实现:简单的聊天服务器所需类:ChatServer,ChatSession
再次实现:带有支持身份和命令解释的稍复杂的聊天服务器
所需类:CommandHandler,Room,LoginRoom,ChatRoom,LogoutRoom,ChatSession,ChatServer
Python 项目实例:XML_RPC文件共享
from xmlrpclib import ServerProxy,Fault
from os.path import join,abspath,isfile
from SimpleXMLRPCServer import SimpleXMLRPCServer
from urlparse import urlparse
import sys

0 0
原创粉丝点击