python基础学习笔记
变量
id(a)查看内存空间地址
多重赋值:a,b=1,2
查看类型:type
对象
python中一切皆对象
数字,列表,元组,字典,集合,字符串,函数,类等都是对象
数字
虚数:1 +2j
bool:True,False
整除// 乘方** 不等于!= 等于==
布尔运算符 and or not
内建函数
数值计算函数
绝对值:abs(-1)=1
指数运算pow(2,5)=32
四舍五入:round(3.67)=4
除余:divmod(10,3)=(3,1)
类型转换
int(3.7)=3
float(3)=3.0
进制转换函数
10转16:hex(255)=0xff
10转8:oct(255)=0377
10转2:bin(3)=0b10
ASCII转换
转ascii:ord('a')=97
转字符:chr(97)='a'
内建模块
math:import math
有math.sqrt(),math.sin(),math.cos()等
random:import random
2,100之间的随机整数:random.randrange(2,100)
2,100之间的随机浮点数:random.uniform(2,100)
列表中的随机数:random.choice([1,2,3,4,5])
序列:字符串,列表,元组
字符串
表达方式‘’ “” """ """
不支持修改如a[2]='r'不行
操作符
a='hello'
b=',world'
索引:支持反向索引如:a[-1]='o',a[-3]=
切片:如a[1:3]='el',a[-3:]='llo'
连接:a+b='hello,world'
重复操作符:a*3='hellohellohello'
成员操作符:in ,not in如‘o’in'hello'=True
内置函数
py内置函数
o在hello中的个数a.count(o)=1
字符串内置函数
字符串大写upper,但不改变本身如:a.upper()=HELLO
转义字符
\' \\ \"
续行符:\
tab:\t 换行符:\n
格式化字符
%s:顶替字符串
%d:顶替数字
print('我今年%d岁,我是你%s'%(18,'爸爸'))
列表
a=['h','e','l','l',['q','w']]
列表中的元素:字符串,数字,列表
支持修改如a[2]='r'
操作符
索引:可以嵌套索引如a[4][0]='q',反向索引
切片:[:]
连接:+
重复操作符:*
成员操作符:in not in
内置函数
py内置函数:都可以用
获取元素个数:len()
获取最大值:max()
获取最小值min()
元素相加:sum()
列表内置函数
增:末尾加a.append(),指定位置加如a.insert(1,20)
删:从后面一个一个删除a.pop()删除指定下标的元素,a.remove()
改:a[2]="h"
查:统计某个元素在列表出现的次数o a.count('o'),,找出列表某个元素第一个出现的索引位置a.index()
排序:a.reverse(),a.sort():组合一下可以做逆序
列表解析
[x+1 for x in(1,2,3)}]=[2,3,4]
[x*x for x in (1,2,3)]=[1,4,9]
[x**x for x in(1,2,3)]=[1,4,27]
a=['h','e','l','l','s']
[x.upper() for x in a]=HELLO
与range的组合:[x*x for x in range (1:4)]=[1,4,9]
与if的结合:[x*x for x in [1,2,3] if x>2]=9
元组
tuple
操作符
索引:[]
切片:[:]
连接:+
重复:*
成员操作符:in not in
内置函数
t.count()
t.index
映射-字典:
特点
没有序列,没有所谓的第一个元素,只有key,因为是通过哈希计算key得到的hash,运用了哈希碰撞,所以很快
无序,可变
创建方式
a={'xiaoming'=10,'xaioli'=20}
索引
a[key]
内置函数
查看
d.values() 以列表返回字典中的所有值 dict_values([1, 2, 3])
d.keys() 返回列表中所有的键 dict_keys(['z', 'b', 'c'])
d.items() 以列表的形式返回可遍历的元组数组 dict_items([('z', 1), ('b', 2), ('c', 3)])
返回值:d.get(),里面填key
创建
d.fromkeys(seq,val) 创建一个新字典 以序列seq中的元素做键 val做字典所有键对应的初始值
a=[1,2,3]
b=[5,6,7]
dddd={}
dddd.fromkeys(a,b) #{1: [5, 6, 7], 2: [5, 6, 7], 3: [5, 6, 7]}
复制字典:b = a.copy()
删除
del d['a']
d.clear() 清空这个字典
del d 删除字典
从前往后一个一个删除元素:d.popitem()
合并
合并与冲突更新如:
d1 = {'A':1,'B':2,'C':3}
d2 = {'A':4,'E':5,'F':6}
d1.update(d2)
print(d1)
={'A': 4, 'B': 2, 'C': 3, 'E': 5, 'F': 6}
返回其值如果没有key将(key, v)添加到字典d中:d.setdefault(key, v)
如果值不同则返回本来的值,不做改变
操作符
索引:[],里面是key
成员操作符:in not in
没有+ *
集合
用到再看,用的少
if条件语句
else if=elif
缩进=4个空格=tab:效果上是一样的
类型
单条件if else
多条件if elif elif else pass
判断两个:and or如if a>20 and a<30:
嵌套:if if else else
条件表达式:
A = Y if X else Z
等价于
if X:
A=Y
else:
A=Z
循环语句
while语句
while :
与else结合:while else
for语句
for x in y:x是变量,y是可迭代对象,可以是列表,元组,字典函数等可迭代对象
例子
遍历字符串
遍历列表
计算和
计算乘积
高级用法
结合else: for else
结合range:for x in range(1,100,2)
range完整参数是三个,第三个是加几取数
结合zip(),结合map():zip( )函数获取多个列表的元素,生成内置元祖的列表
l1 = ['a','b','c','d']
l2 = [1,2,3,4]
zip(l1,l2)或者 map(None,l1,l2)
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
for (x,y) in map(None,l1,l2):或者for (x,y) in zip(l1,l2):
print x , y
结合enumerat():加序号,如:
l1 = ['a','b','c']
for (x,y) in enumerate(l1):
print x,y x->x+1加大序号
循环控制
break:跳出循环
continue:跳出本次循环
pass:占空,保持语句完整
可复用:函数,模块
函数
函数文档:
写法: def fun(x):
"这是一个函数"
print(x)
查看:fun.doc
参数
默认参数:
def fun(x=0):
"这是一个函数"
print(x)
关键字参数:
def fun(x,y):
"这是一个函数"
print(x)
fun(y=2,x=3)
可变长参数:不限制参数个数
元组型:
def fun(x):
"这是一个函数"
for i in x: #x是一个元组
print(i)
fun(2,3,4,5,6)
字典型:
def fun(**x):
"这是一个函数"
for i in x: #x是一个字典
print(i,x[i])
fun(x=2,y=3,z=4)
混合参数:
def fun(z=1,y,**x):
"这是一个函数"
print(x)
print(y)
print(z)
fun(2,20,30,x=2)
高阶函数:用到再看
模块
程序 包含模块
模块包含类
类包含函数
函数包含if while等
一个.py文件就是一个模块
导入模块调用:
import model1
model1.fun(3)
导入部分模块
from model1 import fun
fun(3)
#注意要是本地变量和模块变量重复了,本地覆盖模块,但是也有有好处,调用变简单,且减少内存
#from model1 import *:全部调用
包=py+_init_.py#初始化文件
面向对象
类文档 :
class person :
"这是一个人类"
类函数的定义:一定要有self self相当于class
def init(self=None,name=None, weight=None): #默认值写上
self.name=name
self.weight=weight
类函数的调用:要先实例化
类属性的调用:不用实例化person.weight
类的实例化:p1 = person('daxiong',11)
类变量初始化(构造函数):
def init(self,name, weight):
self.name=name
self.weight=weight
方法定制:外部修改属性
person.sed=11
print(person.sed)
dir():查看可调用的参数
特殊类属性
doc:查看文档
dict:查看属性
name:查看类名
继承
超类,子类(继承多个类,或者是继承父类的子类都可以)
class person :
"这是一个人类"
def init(self,name,weight):
self.name = name
self.weight = weight
def print_weight(self):
"这是一个函数"
print("name:%d"%self.weight)
def print_gender(self):
pass
def print_name(self):
print("name:%s"%self.name)
class male(person):
def print_gender(self):
print('male')
class female(person):
def print_gender(self):
print('female')
class fatmale(male):
def print_weight(self):
print('我是男胖子,体重是%d斤'%self.weight)
class fatfemale(female):
def print_weight(self):
print('我是女胖子,体重是%d斤'%self.weight)
jx=fatmale('jingxiang',220)
jx.print_weight()
jx.dict
多态:
不同参数
不同类
文件
三步:打开文件,编辑文件,关闭文件
打开文件
f=open('路径','方式')
打开方式:
带wa没有的话就新建
基本符号:
r读
w写 #重写
a追加
b以二进制方式打开文件:rb,wb,ab
r+:读写,文件指针在开头,覆盖
w+:读写,覆盖
a+:读写,文件指针在末尾
编辑文件
f.read(8),不写数字全读,能传出来的,如content=f.read(),print(content)
f.write('这是一个测试文本')
读取文件的另外两种方式
f.readline()读一行,加数字一个一个一个读
f.readlines()全读,加数字一行一行读
关闭文件
f.close()
文件备份
# coding: utf-8
# 获取要复制的文件名
f1_name=input('请输入文件路径')
#打开文件
f1=open(f1_name,'r',encoding='utf-8')
# 打开并创建要复制到的文件
#新文件的名字
position=f1_name.rfind('.')
f2_name=f1_name[0:position]+'【附件】.txt'
f2=open(f2_name,'w')
# 避免文件太大造成bug
while(True):
#读取内容
content=f1.read(1024)
#如果为0退出循环
if(len(content)==0):
break
#写入内容
f2.write(content)
#关闭文件
f1.close()
# 关闭文件
f2.close())
文件定位
f.seek(偏移量,位置)
位置:
0:开头
1:当前位置
2:末尾
查询指针位置
f.tell()
对文件的操作:import os
重命名:
os.rename("原文件名","新文件名")
创建文件夹
os.mkdir("文件夹名")
删除文件
os.remove("文件名")
删除文件夹
os.rmdir("文件夹名")
获取当前目录
os.getcwd()
获取目录列表
os.listdir("./") #./当前目录
改变默认目录
os.chdir("路径")
绝对路径和相对路径:
./:代表目前所在的目录。
. ./代表上一层目录。
/:代表根目录。
批量修改文件名
#01创建文件夹
import os
file_name=input("请输入要创建的文件名")
os.mkdir("Desktop\\"+file_name)
os.chdir("Desktop\\"+file_name)
#创建文件
i=0
while(i<6):
f=open("0%d+蜡笔小新.txt"%i,'w')
f.close()
i=i+1
os.chdir("../")
#修改创建的文件夹
#导入os
import os
#输入要重命名的文件夹
files_name=input("请输入文件夹名称")
#切换默认目录
os.chdir("Desktop\\"+files_name)
#获取文件夹列表
file_list=os.listdir("./")
#循环重命名
for i in file_list:
os.rename(i,"[代哥出品]%s"%i)
异常
格式:
try:
代码
except Exception as 变量名:
代码
print(变量名)
异常处理可以嵌套
else finally
else:不发生异常会运行的
finally:最后一定会运行的
示例
try:
except Exception as a:
print(a)
else:
finally:
异常抛出
#自定义异常类
#自定义异常类
class myerror(Exception):
def __init__(self,length,atleast):
self.length=length
self.atleast=atleast
try:
str=input("请输入字符串")
if len(str)<3:
raise myerror(len(str),3)
except myerror as result:#相当于创建了一个对象result
print("你输入的字符串长度是%d,请至少输入字符串大小为%d"%(result.length,result.atleast))
else:
print('没有发生异常')
finally:
print("程序运行结束")
补充:
可以在except中加上开关:if else语句
if:正常的异常处理
else:raise扔回给python解释器
有意思的sleep函数
import time
time.sleep(2):程序暂停两秒再运行