【Python】Python3.X笔记

简介: 【Python】Python3.X笔记

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

详细请参考:Python教程



相关文章
|
1月前
|
搜索推荐 Python
Leecode 101刷题笔记之第五章:和你一起你轻松刷题(Python)
这篇文章是关于LeetCode第101章的刷题笔记,涵盖了多种排序算法的Python实现和两个中等难度的编程练习题的解法。
21 3
|
1月前
|
存储 开发工具 Python
【Python项目】外星人入侵项目笔记
【Python项目】外星人入侵项目笔记
38 3
|
1月前
|
存储 Python
【免费分享编程笔记】Python学习笔记(二)
【免费分享编程笔记】Python学习笔记(二)
42 0
【免费分享编程笔记】Python学习笔记(二)
|
2月前
|
开发者 Python
Python 的主流版本:Python 3.x
Python 的主流版本:Python 3.x
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第四章:和你一起你轻松刷题(Python)
这篇博客是关于LeetCode上使用Python语言解决二分查找问题的刷题笔记,涵盖了从基础到进阶难度的多个题目及其解法。
15 0
|
1月前
|
算法 C++ Python
Leecode 101刷题笔记之第三章:和你一起你轻松刷题(Python)
本文是关于LeetCode算法题的刷题笔记,主要介绍了使用双指针技术解决的一系列算法问题,包括Two Sum II、Merge Sorted Array、Linked List Cycle II等,并提供了详细的题解和Python代码实现。
13 0
|
1月前
|
算法 C++ 索引
Leecode 101刷题笔记之第二章:和你一起你轻松刷题(Python)
本文是关于LeetCode 101刷题笔记的第二章,主要介绍了使用Python解决贪心算法题目的方法和实例。
11 0
|
1月前
|
并行计算 Python
Python错误笔记(一):CUDA initialization: CUDA unknown error - this may be due to an incorrectly set up env
这篇文章讨论了CUDA初始化时出现的未知错误及其解决方案,包括重启系统和安装nvidia-modprobe。
135 0
|
2月前
|
Linux 编译器 开发工具
快速在linux上配置python3.x的环境以及可能报错的解决方案(python其它版本可同样方式安装)
这篇文章介绍了在Linux系统上配置Python 3.x环境的步骤,包括安装系统依赖、下载和解压Python源码、编译安装、修改环境变量,以及常见安装错误的解决方案。
154 1
|
1月前
|
索引 Python
【免费分享编程笔记】Python学习笔记(一)
【免费分享编程笔记】Python学习笔记(一)
38 0
下一篇
无影云桌面