likes
comments
collection
share

我的 Python 学习笔记:从杨辉三角开始

作者站长头像
站长
· 阅读数 28

在学习一门技能的过程中,记记笔记,日计月累,发现有一些效果!

基于Python3.X版本进行学习,笔记如下:

杨辉三角

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)

名字格式化

def rightname(name):
    return name[0].upper()+name.lower()[1:]
print(list(map(rightname,['admin','LISA','barT'])))

迭代器

两个基本的方法:iter()和next()

import sys

list=[1,2,3,4]
it=iter(list)
while True:
    try:
        print (next(it))
    except StopIteration:
        sys.exit()

生成器

py中使用了yield的函数被称为生成器generator

生成器只能用于迭代操作,简单说来,生成器就是一个迭代器

在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存

当前所有的运行信息,返回yield的值,

并在下一次执行next()方法时从当前位置继续执行。

排序

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

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')

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属性

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)

链式调用

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)            

枚举

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来实现文件读写

另一种方法:

with open('url','r') as f:
printf(f.read())

注意所读取的文件大小

(2)读取二进制文件

f=open('url','rb')
f=read()

(3)读取GBK文件

f=open('url','r',encoding='gbk',errors='ignore')
f.read()

(4)写文件

f=open('url','w')
f.write('str')
f.close()

另一种方法:with

with open('url','w') as f:
  f.write('str')

从内存中读取---StringIO和BytesIO

操作文件和目录-os模块 import os shutil模块,os模块的补充

序列化\反序列化

import json
d=dict(name='bob',age=20,score=88)
print(json.dumps(d))

WSGI处理函数

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框架

!/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---消息循环,主线程不断地重复“读取消息-处理消息”

loop=get_event_loop()
  while True:
    event=loop.get_event()
    process_event(event)

asyncio模块-内置对异步IO的支持 改进方法——async/await(py3.5版本开始使用的新语法)

aiohttp---基于asyncio实现的HTTP框架