python3.x学习笔记2018-02-02更新

前言:python3.x部分学习笔记,有意交流学习者可加wechat:YWNlODAyMzU5MTEzMTQ=。如果笔记内容有错,请指出来。

***

对数据类型的操作

  1. 可变数据类型:列表,集合,字典

    列表:

    ```

    li=[‘a‘,‘b‘]

    增:

    li.insert(2,‘c‘) #在序号2位置上插入‘c‘

    li.append(‘d‘) #在列表末尾添加‘d‘

    li.extend(li2) #在列表li后面添加li2

删:

li.remove(‘c‘)

del li[2]

li.pop(3)

改:

li[2]=‘c‘

li[1??1]=‘ha‘

查:

li.index(‘c‘)

排序:

sort(key=lambda x:x[2],reverse=True)

集合:

去重

关系测试

s1={1,2,3,4,5},s2=set([4,5,6,7,8])

s3=s1&s2 #求交集

s4=s1|s2 #求并集

字典:

a_dict={‘name‘:‘alex‘,‘age‘:12,‘sex‘:‘male‘}

a_dict.get(‘name‘,‘wrong‘) #找键名对应的值,找不到就返回第二参数

a_dict.setdefault(‘name‘,‘lema‘) #查找该键,找不到则插入该键值对

a_dict.update(dict2) #将dict2添加到a_dict中

2. **不可变数据类型**:元组,字符串
元组:` tuple1=(1,2,3,4,5) `
字符串:

str1=‘abcdef‘,str2="a|b|c|d"

print(str1.capitalize(),str1.upper(),str1.lower()) #首字母大写,全部大写,全部小写

print(str1.find(str2,2,5)) #在str1中从序号2位置开始找str2,直到序号5的位置

print(str1.center(20,‘‘)) #在字符串两边各添加20个‘

print(str1.startswith(‘ab‘)+‘,‘+str1.endswith(‘ef‘)) #返回True或False

print(‘-‘.join([‘2018‘,‘1‘,‘1‘]))

print(str2.split("|",3)) #返回一个列表

print(str1.replace(‘a‘,‘A‘,1)) #把str1中的第1个a替换成A

print(str1.strip()) #把str1两边的空白字符去掉

***
###函数
1. 高阶函数

def func(x,y,f):

print(f)

print(type(f))

return f(x)+f(y)

result=func(-3,-2,abs)

print(result)

2. 装饰器
不修改被装饰函数的源代码
不修改被装饰函数的调用方式

def auth(func):

def wrapper(*args,**kwargs):

username=input("username:").strip()

password=input("password:").strip()

if "lema"==username and "qwert123"==password :

res=func(*args,**kwargs)

else :

print("wrong")

return res

return wrapper

@auth

def index(x,y,f):

print(f(x)+f(y))

print("welcome to myblog")

return "ok"

print(index(-3,-4,abs))

3. **参数**
关键字参数
位置参数
可变参数
4. **特殊函数**
***
###面向对象
1. **类**:

class People(object):

name="yin" #类变量

def init(self,name,age=6): #构造函数

self.name=name #实例变量self.name

def del(self): #析构函数,当实例对象被垃圾回收时执行该函数

print("end")

def sleep(self):

print("%s:hello,world"%self.name)

d1=People("d1",age=5)

del d1,People

2. **继承**:
重写父类方法
重构父类方法

class Man(People):

#第一种重构方式

def sleep(self):

People.sleep(self)

print("chonggou")

#第二种重构方式,建议使用第二种

def sleep(self):

super(Man,self).sleep()

print("chonggou")

多继承父类方法查询策略:广度优先

class A(object):

def func(self):

print("A")

class B(A):

# def func(self):

# print("B")

pass

class C(A):

def func(self):

print("C")

def f(self):

print("1000")

class D(B,C):

def func(self):

super(D,self).func()

super(D,self).f()

print("D")

d=D()

d.func()

3. **多态**:一种接口,多种实现
4. **方法**
静态方法` @staticmethod `:名义上归类管理,实际上访问不了类和实例中的任何属性
类方法` @classmethod `:只能访问类变量,不能访问实例变量
属性方法` @property `:把一个方法转换成静态属性

class Person(object):

def init(self,first_name,last_name):

self.first_name=first_name

self.last_name=last_name

@property

def full_name(self):

return "%s %s"%(self.first_name,self.last_name)

@full_name.setter

def first_namex(self,first_name):

self.first_name=first_name

p1=Person("Mike","Driscoll")

print(p1.full_name)

p1.first_namex="lema"

print(p1.full_name)

伪私有方法:

以双下划线开头的类方法名,在类实例化以后会自动被概念,在其名字前加 _类名.

因为名字被改了,所以自然无法用双下划开头的名字被访问,从而达到不可进入的目的

class Person(object):

def __func(self):

pass

p1=Person()

p1._Person__func()

` 类名.__doc__ `:返回该类的注释说明
` __module__ `
` __class__ `
` __call__ `
` def __str__(self): pass `:

class Dog(object):

def init(self):

print("执行init")

def str(self):

return "执行__str__"

d1=Dog()

print(d1)

5. **反射**:hasattr,getattr,setattr,delattr

def bulk():

print("往实例对象中添加一个函数")

class Dog(object):

def init(self,name):

self.name=name

def eat(self,food):

print(self.name+":"+food)

d1=Dog("lema")

choice=input(">>:").strip()

反射的是函数

if hasattr(d1,choice): #hasattr判断一个对象里是否有字符串对应的方法属性

func=getattr(d1,choice)

func("rice")

else:

setattr(d1,choice,bulk)

d1.talk() #假设输入的是talk

反射的是属性

print(d1.name)

if hasattr(d1,choice):

attr=getattr(d1,choice)

setattr(d1,choice,"ronghua")

else:

setattr(d1,choice,22)

print(d1.name) #假设输入的是name

print(d1.age) #假设输入的是age

***
###模块
1. **内置模块(标准库)**
sys

import sys

print("脚本名称:",sys.argv[0])

for i in sys.argv[1:]:

print("参数",i)

退出程序,正常退出则返回0

sys.exit(0)

标准输入

for line in sys.stdin:

print("abc",line)

time/datatime

import time,datatime

time.sleep(0.5)

today=datetime.date.today()

print(str(today.year)+‘-‘+str(today.month)+‘-‘+str(today.day))

now=datetime.datetime.now() #now.minute,now.day.now.second...

random

import random

随机生成四位验证码

checkcode=""

for i in range(4):

checkcode+=random.choice("1234567890")

print(checkcode)

print(random.randint(11,13)) #生成11或12或13

print(random.randrange(2,10,2)) #生成2,4,6,8

打乱元素

li=[1,2,3,4,5,6,7,8]

random.shuffle(li)

print(li)

hashlib

import hashlib

m1=hashlib.md5()

m1.update(b"admin")

m1.update(b"123")

print(m1.hexdigest())

m2=hashlib.md5()

m2.update("admin123".encode())

print(m2.hexdigest())

re

import re

re.match()从字符串初始位置开始查找,若初始位置开始匹配错误,返回None

print(re.match("chen\d+","rchen321"))

print(re.match("chen\d+","chen321").group())

re.search()从字符串全局开始查找,只匹配第一个找到的

print(re.search("chen\d+","rchen321").group())

分离字符串,返回["abc","de","f"]

print(re.split("[0-9]+","abc12de34f"))

替换匹配到的字符,返回"abc11de14f"

print(re.sub("[0-9]","1","abc52de34f",count=3))

列表形式返回所有查找到的结果

print(re.findall("chen\d+","chen321 chen14"))

os

import os,os.path

os.popen()返回一个file对象

cmd_res=os.popen("dir").read()

print(cmd_res)

判断文件或目录是否存在

print(os.path.exists("test.py"))

print(os.path.exists("D:\software\Anaconda"))

print(os.path.isfile("test.py"))

print(os.path.isdir("D:\software\Anaconda"))

路径拼接

print(os.path.join(‘/home/aa‘,‘/home/aa/‘,‘/home/aa/bb/c‘))

将路径与扩展名分离

print(os.path.splitext("/home/haha.py")) # 返回一个二元组

获取文件的大小

print(os.path.getsize("test.py"))

获取相关文件的系统状态信息,st_atime,st_mtime,st_ctime...

print(os.stat("test.py").st_size)

将相对路径转换成绝对路径

print(os.path.abspath(file))

2. **第三方库(开源模块)**
3. **自定义模块**
4. 导入模块与导入包的区别:
导入包的本质就是解释包下面的` __init__.py `文件
导入模块有以下几种方式:

import module1_name,module2_name

from module_name import * #不推荐使用

from random import randint as ri

from module_name import func1,func2

动态加载模块

mod1=import("baobao.test")

print(mod1)

mod1.test.func()

官方建议使用下面的用法

import importlib

mod2=importlib.import_module("baobao.test")

print(mod2)

mod2.func()

***
###文件处理
1. **文件读取&写入**

with open("test.txt","r+",encoding="utf-8") as f:

f.write("hello456\n")

f.writelines(["hello", "world", "\n"])

#逐行读取文本内容

for line in f:

print(line)

#一次性读取当前光标后的10个字符

print(f.read(10))

print(f.tell()) #获得当前文件的光标

f.seek(0) #将光标移动到最开始的地方

2. **文件打开的模式**
"r":只读模式
"w":创建或覆盖模式
"a":追加模式
"r+":读写模式
***
###其它特性:
1. **生成器**
把列表生成式的[]改为()

[i*2 for i in range(10000000)] #列表生成式,[func(i) for i in range(10)]

(i*2 for i in range(1000000)) #生成器

含yield的函数
2. **迭代**
可迭代对象:可以通过for循环来遍历的对象称为可迭代对象,比如str,dict,list,tuple,set,生成器
迭代器:可以被next()函数调用并返回下一个值的对象称为迭代器,把可迭代对象变成iterator可以使用iter()函数
3. **垃圾自动回收机制**
**del**:函数名,实例名,变量名,类名
4. **异常处理**

data={}

li=[1,2]

try:

open("test.txt",r)

data[‘name‘]

li[3]

except KeyError as e:

print("没有这个键",e)

except IndexError as e:

print("列表操作错误",e)

except Exception as e:

print("未知错误")

else:

print("一切正常")

finally:

print("不管有无错误,照常执行")

自定义异常

class AlexException(Exception):

def init(self,msg):

self.msg=msg

def str(self):

#print(self.msg)

return self.msg

try:

raise AlexException("我的异常")

except AlexException as e:

print(e)

断言

num=13

assert type(num) is str

print("right")

***
###软件目录结构规范

Foo

bin # 存放一些项目的可执行文件

一键启动.py

core # 存放项目的所有源代码

tests # 存放单元测试代码

init.py

test_main.py

init.py

main.py

docs # 存放一些文档

conf.py

abc.rst

setup.py # 安装,部署,打包的脚本

requirements.txt # 存放软件依赖的外部python包列表

README #项目说明文件

1.软件定位,软件的基本功能

2.运行代码的方法,安装环境,启动命令等

3.简要的使用说明

4.代码目录结构说明

5.常见问题说明

###多线程&多进程

import threading,time

def run(n):

print("task:",n)

time.sleep(2)

print(threading.current_thread()) # 返回当前线程对象

print(threading.active_count()) # 返回当前存活线程数量

print(threading.main_thread()) # 返回主线程对象

start_time=time.time()

t_total=[]

for i in range(50):

t2=threading.Thread(target=run,args=("t%s"%i,))

t2.setDaemon(True) # 把当前线程设置为守护线程

t2.start() # 主线程启动子线程

t_total.append(t2)

for t in t_total:

t.join() # 一个线程等到另一个线程执行结束后再执行下面的代码

end_time=time.time()

print(threading.current_thread())

print(end_time-start_time)

线程交互

import time,threading

event=threading.Event()

def lighter():

count=0

event.set() # 设置标志位

while True:

if count>5 and count<=10: # 变红灯

event.clear() # 把标志位清空

print("红灯停")

elif count>10:

event.set() # 变绿灯

count=0

else:

print("绿灯行")

time.sleep(1)

count+=1

light=threading.Thread(target=lighter,)

light.start()

def car(name):

while True:

if event.is_set():

print(" %s正在行驶"%name)

time.sleep(1)

else:

print(" %s正在等待"%name)

time.sleep(1)

event.wait()

car1=threading.Thread(target=car,args=("奔驰",))

car2=threading.Thread(target=car,args=("兰博基尼",))

car1.start()

car2.start()

queue队列

queue.Queue(maxsize=0) 顺序先入先出

queue.LifoQueue(maxsize=0) 顺序后入先出,last in first out

queue.PriorityQueue(maxsize=0) 存储数据时可设置优先级

import queue

try:

q=queue.Queue(maxsize=3)

q.put("d1")

q.put("d2")

q.put("d3")

q.put("d4",block=False)

print(q.qsize()) # 返回队列长度

print(q.get())

print(q.get_nowait())

print(q.get_nowait())

print(q.get(block=False))

print(q.get(timeout=3))

print(q.get_nowait())

except queue.Empty as e:

print("队列为空")

except queue.Full as e:

print("队列满了")

q2=queue.PriorityQueue()

q2.put((-2,"lema"))

q2.put((34,"asd"))

q2.put((11,"qwe"))

print(q2.get())

print(q2.get())

print(q2.get())

```

原文地址:https://www.cnblogs.com/lemachin/p/8416642.html

时间: 2024-10-08 22:16:05

python3.x学习笔记2018-02-02更新的相关文章

.NET学习笔记之数据库02

1.数据冗余的问题: 1>造成了存储空间的浪费.   2>更新异常,删除异常, 所以一般情况下不允许出现表中出现数据冗余. --------------------------解决方法------------------------------------ 把原来的表中的数据拆分成多个表来存储. 当把表中信息拆分成多个表来存储的时候会出现一个问题:如何将这张表的数据关联起来? 使用主键和外键来进行关联,使用主外建就能将不同表中的数据联系起来. 什么是外键,如何通过主外键将表中的数据关联起来?

IOS学习笔记 ---- 15/09/02

1.三种方式监听方式: addTarget方法: 使用代理方法: [[NSNotificationCenter defaultCenter] addObserver]方法监听通知: 2.在storyboard删除原来的ViewController后再添加NavigationController时没有自动设置成initial View Controller,需要手动设置. 3.push方法已经不推荐使用,现在的show方法相当于以前的push. 4.如果使用按钮拖线到另一个ViewControll

python3.X学习笔记(week1)老男孩20160114

学习背景: 我在西藏拉萨出差已经连续将近2个月了,实时想到会精通一门编程语言并编写出自己想要的程序是我多年的梦想,一定找时间实现,回想高中时,自己对编程的兴趣十分浓厚,父母给自己购买了学习机插卡式的,只能敲basic代码,同时学校有计算机课,经常和老师讨论编程问题,时光一晃20多年过去了,编程放下了,但是我的梦想没有放下,正好看到老男孩在51cto网站上开设网络培训PYTHON语言学习班,我犹豫了怕在高原坚持不下来,后来想早报名早学习,不能再耽误下去了,我毅然报了名,花了5000多money,自

python第一次学习笔记(可能会有更新)

0:Python是什么类型的语言? Python是脚本语言 引用:脚本语言(Scripting language)是电脑编程语言,因此也能让开发者籍以编写出让电脑听命令行事的程序.以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言比C语言或者Java之类的系统编程语言要简单容易. 也让脚本语言另有一些属于脚本语言的特性: 语法和结构通常比较简单 学习和使用通常比较简单 通常以容易修改程序的"解释"作为运行方式,而不是需要"编译"

MongoDB学习笔记~大叔框架实体更新支持N层嵌套~递归递归我爱你!

回到目录 递归递归我爱你!保要你想做,就一定能成功! 从一到二,从二到三,它是容易的,也是没什么搞高的,或者说,它是一种流水线的方式,而从三到十,它注定要有一个质的突破,否则,它会把你累死,代码写的让你自己都觉得想吐!有时,我们是被逼出来的,对于一种功能的实现,我们有时需要有从三到十的态度…… 回归回实例,在mongodb中实体可以嵌套,这在C#里叫做复杂属性,即类中也有类级的属性,这在面向对象里叫做“组合”,它经常在日常开发环境中见到,大家都耳熟能详了,呵呵,而在mongodb里,如果希望对N

iOS学习笔记10-改用一些更新的API

iOS平台在快速的发展,各种接口正在不断的更新.随着iOS9的发布,又有一批老方法不推荐使用了,你若调用这些方法,运行的结果是没有问题的,但是会出现警告“***is deprecated :first deprecated in iOS 9.0 - Use *******”.就像如图所示: 在实际项目开发中,我们要秉承一个信念就是:要把每一个警告当做错误来处理,并解决每一个警告.你想想,你运行一个项目,就算运行成功了,但是出现几十个.甚至几百个黄黄的警告,心情是不是很糟糕呢?我将在这篇博客结合我

Python3.5学习笔记-列表、元组、字典

Python中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建.在Python中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型.内置的type()函数可以用来查询变量所指的对象类型.Python 3中有六个标准的数据类型: Number(数字) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) 一.列表 一组有序项目的集合.可变的数据类型[可进行增删改查] 列表是以方括号&

python3.5学习笔记:linux6.4 安装python3 pip setuptools

前言: python3应该是python的趋势所在,当然目前争议也比较大,这篇随笔的主要目的是记录在linux6.4下搭建python3环境的过程 以及碰到的问题和解决过程. 另外,如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环境! 不要动现有的python2环境! 不要动现有的python2环境! 重要的使用说三遍! 一.安装python3.5 下载pyth

RHCE7学习笔记12-安装和更新软件

1.RPM包的名称定义 vsftpd.3.0.2- 9.  el7.     x86_64.rpm 包名      版本    发行版本    架构 使用 rpm -qa 可以列出当前系统所有安装的包,使用rpm -ivh安装包 2.安装RPM安装包的实质 安装RPM包的实质是将包里面的相对应的文件拷贝复制到响应的根目录下面: 这里以Vsftpd这个RPM包为例子,使用以下命令解压出安装包的内容: 可以看到vsftpd的rpm包里面生成了etc,usr,var三个目录,安装vsftpd的时候,将