python3学习笔记
1.变量类型:
数字类型:int、long、float、complex
布尔类型:true、false
字符串(string)
列表(list)
元组(tuple)
字典(dictionary)
1.字符串
str
通过下标存储
len(name) #测字符串长度
name[0]、name[1]...
.操作:
切片:name[start:end-1:(+/-)step]
find,index(str) r(从右往左) #查找str是否出现
count(str) #共出现str多少次
replace(str1,str2) #将str1替换为str2
split(str) #用str分割,(删除str)
capitalize() #字符串第一个单词大写
title() #每个单词首字母大写
startwith(str),endwith(str) #判断是否以str开头/结尾返回Ture与False
lower(),upper() #全部转换为小写/大写字母
rjust,ljust,center(width) #靠左/右/中间对齐,并用空格填充至长度width
(l/s)strip #删除(左/右)两边的空白字符
(r)partition(str) #(从右)以str分割为str前、str、str后
splitlines #按行分隔,返回一个包含各行的列表
is[alpha/digit/num/space] #判断是否全部为字母/数字/(数字或字母)/空格返回T/F
join(str) #str每个元素插入当前操作的字符串
.字符串可以相加:
n = "name"
a = "address"
number = 18
print(n+a+str(number))
print("%s%d"%(n,number))
print("",end="\n")
2.列表
[] list
1.增加元素
append #添加元素或列表
insert #添加元素至指定位置
extend #将列表中的元素添加进去
list1 + list2 = list1.extend(list2)
2.修改元素
list[num] = changename
3.查找元素
name(not)in list#判断name是否位于list中返回Ture/False
index,count #name在list中是否出现/出现几次
4.删除元素
del list[num] #删除指定下标的元素
.pop() #删除最后一个元素
.remove() #删除元素
5.排序元素
.sort() #从小到大排序
.reverse #改为逆序
3.元组
() tuple
#元组与列表相似,但其中的元素不能修改
#只有一个值时需要加,号
4.字典
[] dict #字典的key值必须不可变
1.查找键值
dict["key"]
dict.get("key",value)
2.添加键对
dict["new_key"]=value
3.删除键对
del dict.["key"]
dict.clear #清空字典
4.修改键对
dict.["key"]=new_value
5.常见操作
len() #返回键值对个数
keys(),values() #返回key,values的列表
items() #返回包含键对值元组的列表
has_key(key) #判断是否含有指定key返回Ture/False
6.字典的遍历
for temp in dict.items():
print(temp[0])
print(temp[1])
for a,b in dict.items():
print(a)
print(b)
2.函数
pass #为待写的程序代码占位置
def function():
"帮助文档"
return #函数在return处结束
#return返回多个值可利用列表,元组,字典
如果全局变量与局部变量名字相同,函数使用局部变量
如果在函数中对全局变量进行修改,必须在前面加上global声明(不可变类型)
.参数
1.缺省参数
def function(a,b=num)
#为函数指定一个默认参数,当参数未输入时函数读取默认参数
#缺省参数必须位于最后
#缺省参数为可变类型时只初始化一次
2.不定长参数
def function(a,b,*args,**kwargs)
args #类型为元组,存放多余所有未命名的变量参数
#若实参为列表,前加*将其解包
[a,b,c]---->a,b,c
kwargs #类型为字典,存放多余命名参数
#若实参为字典,前加**将其解包
{"a":"1","b":"2"}---->a=1,b=2
.引用
函数参数是引用传递(地址)
.类型
1.可变类型
list,dict #如果变量a等于一个可变类型变量list,当list的值发生改变时,a的值同时发生改变
2.不可变类型
int,long,bool,float,str,tuple
对可变类型来说,函数体的运算会更改传入的参数变量
传递列表时
a=a+a #生成新列表
a+=a #在原来的基础上直接修改
匿名函数
sum = lambda arg1,arg2:arg1+arg2
#可做参数传递
b.sort(key=lambda x:x['age']) 字典b中元素按age排序
3.文件
操作
open(文件名,访问模式) "r" #只读 (默认)
"w" #写入(存在则删除) + 用于读写
"a" #追加
read(n) #如果使用读了多次,下次读取的数据从上次结束开始(一次读取n字节)
readline #每次读取一行
readlines #读取内容按行显示
write() #写入内容
tell() #返回当前文件读写位置
seek(offset,from) #设置当前文件读写位置
offset #偏移量
from #0,开头;1,当前;2,末尾
import os
os.rename oldfile newfile #重命名
os.getcwd #显示当前目录(pwd)
os.chdir #修改当前路径
os.listdir #将当前
os.remove,os.mkdir,os.rmdir
a = str(list)
list = eval(a) # 将变量list转换为应该的类型
4.面向对象
1.简介
class Name:
def function(self):
pass
a = Name()
x = a.function()
类与对象 #列表中元素可以是对象
类是创建对象的模型,是对象的抽象
属性 变量
方法 函数
类添加新对象后,访问可以通过方法中self.属性获得
修改对象属性时最好用方法修改而不是直接修改
属性名前加上_为私有属性,不能随意修改(实际是在名字前加类名)
2.概念
继承 #私有的属性、方法,不会被子类继承
重写 #子类中的方法会覆盖掉父类中同名的方法
调用 #在调用的父类方法前面加super().
多继承 #当前类.__mro__ 元组中决定调用方法前后(方法名相同时)
多态
类属性,实例属性 #用对象名访问实例属性,用类名访问类属性
#重名时实例属性会覆盖类属性
类方法 #实例方法上一行加上@classmethod,用于修改类属型
#第一个参数一般用clz
静态方法 #实例方法上一行加@staticmethod
#普通函数无参数
3.方法
self
把对象自身当作第一个参数传递给self
__init__()方法
当创建完一个对象后会立马执行,不需调用
创建对象后实参会传给__init__()方法
__str__()方法
print(对象名)打印的是对象中__str__()方法的值
__del__()方法
删除一个对象时会默认调用__del__()方法
__new__方法
完成对象的创建,返回实例化的对象,一般重写时加上return object.__new__(cls)
4.模式
1.工厂模式
目的是使类功能单一,减少耦合性
#通过工厂方法实行对象创建
工厂方法 #定义了一个创建对象的接口(可以理解为函数),但由子类决定要实例化的类是哪一个
2.单例模式
一个类只有一个实例存在
__instance = None
def __new__(cls, *args, **kw):
if not cls.__instance:
cls._instance = super().__new__(cls, *args, **kw)
return cls._instance
5.异常
#程序运行过程中发生错误无法执行,出现错误的提示
#函数产生异常就会结束
1.捕获异常
try...except 异常名(as result)
#把可能出现问题的代码放在try中,把处理异常的代码放在except中
#result储存系统捕获到的错误提示
捕获所有异常 except:
except Exception as result #存储异常的基本信息
else #如果没有出现一场就执行下面的代码
finally... #无论异常产生最后一定会执行
2.抛出异常
自定义异常 #定义一个Exception的子类
raise 异常名 #抛出异常
#捕获异常时变量存储的是自定义异常的对象
raise #将捕获的异常抛给系统,触发默认的异常处理
6.模块
导入模块的过程相当于执行的过程
1.常用操作
"__name__" #可用于判断是直接执行的python脚本还是被引入执行的
if __name__ = "__main__" #在导入模块时不会执行
import sys
sys.path.append() #修改绝对路径,使不在当前目录下也能导入模块
__all__ #用*导入时只导入列表变量中包含的函数
2.模块的使用
import 文件夹.模块
from 文件夹 import 模块
文件夹中的__init__.py控制着包的导入行为,在其中定义的__all__变量控制着 from 包名 import * 时导入的模块
若只 import 包名,则不会导入包中的模块
3.模块的发布与安装
1.编写setup.py文件
from distutils.core import setup
setup(name='test',version='1.6',description='???',author='???',py_modules=["???"])
py_modules需指明所需包含的py文件(不需加.py)
2.构建模块
python setup.py build
3.生成发布压缩包
python setup.py sdist #打包后,生成最终发布压缩包name-version.tar.gz,目录结构
4.安装方式
找到压缩包后解压,然后进入文件夹执行命令
sudo python(3) setup.py install
若执行目录安装则在后面加 –prefix=安装路径
7.其他
1.给程序传参数
import sys
python3 test.py test
sys.agrv 为一个列表,其值为['test.py','test']
2.查看关键字
import keyword
keyword.kwlist
3.常用操作
dir 函数名 #函数具有哪些功能及用法
input("text") #函数的值为字符串型,若数字相加则进行转义
4.运算符
// #取整除
% #取余
** #幂运算
5.分隔符
多行语句写在一行用;隔开
一行语句写在多行用\隔开
6.直接执行脚本
在脚本最前面加上这个即可
#!/usr/bin/python3