【Python】Python3.X笔记

2023-10-07 16:57:30 浏览数 (1)

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

0 人点赞