基于Python3.X版本进行学习,笔记如下:
杨辉三角
代码语言:javascript复制def triangle(max):
L=[1]
n=1
while n<=max:
yield L
L.append(0)
L=[L[i-1] L[i] for i,x in enumerate(L)]
n=n 1
g=triangle(10)
for items in g:
print(items)
名字格式化
代码语言:javascript复制def rightname(name):
return name[0].upper() name.lower()[1:]
print(list(map(rightname,['admin','LISA','barT'])))
迭代器
两个基本的方法:iter()和next()
代码语言:javascript复制import sys
list=[1,2,3,4]
it=iter(list)
代码语言:javascript复制while True:
try:
print (next(it))
except StopIteration:
sys.exit()
生成器
py中使用了yield的函数被称为生成器generator
生成器只能用于迭代操作,简单说来,生成器就是一个迭代器
在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存
当前所有的运行信息,返回yield的值,
并在下一次执行next()方法时从当前位置继续执行。
排序
代码语言:javascript复制L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
return t[1]
L2=sorted(L,key=by_name,reverse=True)
print(L2)
模块
在Python中,一个.py文件就称为一个模块(module) 当一个模块编写完毕,就能被其他地方引用,模块还包括
Python内置模块和来自第三方的模块。
包:
按目录来组织模块的方法。例如新建一个顶层包
mypackage,abc.py模块的名字就变成了mypackage.abc
注意:每一个包目录下面都会有一个__init__.py的文件,这个文件必须存在,否则Python将把这个目录当成
普通目录,而不是一个包。init.py可是一个空文件。
在包下可有多级目录。如mypackage.web.www
命名注意:自己的模块命名时不要和Python的内置模块冲突。
第三方模块使用-PIL
代码语言:javascript复制from PIL import Image
im=Image.open('test.png')
print(im.format,im.size,im.mode)
im.thumbnail((200,100))
im.save('thumb.jpg','JPEG')
类
代码语言:javascript复制class Student(object):
"""docstring for Student"""
def __init__(self, name,score):
self.name = name
self.score=score
def print_score(self):
print('%s: %s' % (self.name,self.score))
bart=Student('Bart Simpson',59)
lisa=Student('lisa Simpson',69)
bart.print_score()
lisa.print_score()
继承与多态
继承: 可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只要新增自己特有的方法,也能够把 父类不适合的方法覆盖重写。
注意:静态语言与动态语言的继承体系。动态语言——“鸭子类型”——“file-like object”
使用@property属性
代码语言:javascript复制class Screen(object):
@property
def width(self):
return self._width
@width.setter
def width(self,value):
self._width=value
@property
def height(self):
return self._height
@height.setter
def height(self,value):
self._height=value
@property
def resolution(self):
return self.width * self.height
s=Screen()
s.width=1024
s.height=768
print(s.resolution)
print(s.width)
链式调用
代码语言:javascript复制class Student(object):
"""docstring for Student"""
def __init__(self, path=''):
self.__path = path
def __getattr__(self,path):
path1=self.__path path '/'
return Student(path1)
def __call__(self,*path):
path1=self.__path path[0] '/'
return Student(path1)
def __str__(self):
sum =len(self.__path)
self.__path=self.__path[:sum-1]
return self.__path
__repr__=__str__
print(Student().user('Bob').repos)
print(Student().status.user.timeline.list)
枚举
代码语言:javascript复制from enum import Enum,unique
@unique
class Weekday(Enum):
Sun=0
Mon=1py
Tue=2
Wed=3
Thu=4
Fri=5
Sat=6
day1=Weekday.Mon
print('day1=',day1)
print('Weekday.Tue=',Weekday.Tue)
print('Weekday['Tue']=',Weekday['Tue'])
print('Weekday.Tue.value=',Weekday.Tue.value)
print('day1==Weekday.Mon ?',day1==Weekday.Mon)
print('day1==Weekday.Mon ?',day1==Weekday.Tue)
print('day1==Weekday(1) ?',day1==Weekday(1))
for name,member in Weekday.__members__.items():
print(name,'=>',member)
Month=Enum('Month',('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'))
for name,member in Month.__members__.items():
print(name,'=>',member,',',member.value)
单元测试、文档测试
IO
(1)读取文本文件 打开f=open(‘url’,‘r’);----读f.read()将内容读到内存----关闭
f.close()文件使用完毕后必须关闭
使用try…finally来实现文件读写
另一种方法:
代码语言:javascript复制with open('url','r') as f:
printf(f.read())
注意所读取的文件大小
(2)读取二进制文件
代码语言:javascript复制f=open('url','rb')
f=read()
(3)读取GBK文件
代码语言:javascript复制f=open('url','r',encoding='gbk',errors='ignore')
f.read()
(4)写文件
代码语言:javascript复制f=open('url','w')
f.write('str')
f.close()
另一种方法:with
代码语言:javascript复制with open('url','w') as f:
f.write('str')
从内存中读取—StringIO和BytesIO
操作文件和目录-os模块 import os shutil模块,os模块的补充
序列化反序列化
代码语言:javascript复制import json
d=dict(name='bob',age=20,score=88)
print(json.dumps(d))
WSGI处理函数
代码语言:javascript复制def application(environ,start_response):
start_response('200 OK',[('Content-Type','text/html')])
body ='<h1>Hello,%s!</h1>' % (environ['PATH_INFO'][1:] or 'web')
return [body.encode('utf-8')]
Flask框架
代码语言:javascript复制!/usr/bin/env python3
-*- coding: utf-8 -*-
from flask import flask
from flask import request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def home():
return '<h1>Home</h1>'
@app.route('/signin', methods=['GET'])
def signin_form():
return '''<form action="/signin" method="post">
<p><input name="username"></p>
<p><input name="password" type="password"></p>
<p><button type="submit">Sign In</button></p>
</form>'''
@app.route('/signin', methods=['POST'])
def signin():
# 需要从request对象读取表单内容:
if request.form['username']=='admin' and request.form['password']=='password':
return '<h3>Hello, admin!</h3>'
return '<h3>Bad username or password.</h3>'
if __name__ == '__main__':
app.run()
异步IO—消息循环,主线程不断地重复“读取消息-处理消息”
代码语言:javascript复制loop=get_event_loop()
while True:
event=loop.get_event()
process_event(event)
asyncio模块-内置对异步IO的支持 改进方法——async/await(py3.5版本开始使用的新语法)
aiohttp—基于asyncio实现的HTTP框架