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
- Python基础
- Python基础
- Python基础
- Python基础
- python基础
- Python基础
- python基础
- Python基础
- python 基础
- Python 基础
- python基础
- Python基础
- Python基础
- python基础
- Python基础
- python基础
- python基础
- Python基础
- 2015年12月工作总结
- java配置
- windows 运行命令大全
- IP学习
- 静态分配和动态分配内存的区别
- python基础
- HDU 1177."Accepted today?"【结构体排序(水)】【1月6】
- [看书日记20160106]Activity的Flags , IntentFilter ,Android的消息机制
- 将无序数列升序排列,并输出排列结果和排列后的下标
- Mingw GCC pack Struct.
- Convert int/long to hex string.
- 秒杀多线程第二篇 多线程第一次亲密接触 CreateThread与_beginthreadex本质区别
- 每日一句
- LeetCode: 011 - Roman to Integer