尝试记录自己平时的学习笔记
1.关于注释符号:
#在python中单行注释使用#符号 下面这句表示在输出“Hello World” 这串字符
print("Hello World");
2.键盘录入:
nub=raw_input('请输入一个数字');#raw_input()读取到的实际上是一个字符串类型的
3.python中的常见类型:
常见类型有以下几种:
数字:整形(int),长整形(long),浮点型(float),复数型(complex)
type(value) 可以查看目标的类型
id(value);可以查看目标的内在地址
help();可以查看目标的使用帮助比如:help(List.remove)
字符串(‘str’):
#如何定义: 这三种方法都支持根据自己习惯来。
str1='hello';
str1="hello";
str1="""hello""";
列表:
strs="abcdef";
#取指定角标的字符
strs[1];
#切片取出bcde
strs[1:5];
#从指定索引取到结束
strs[3:];
#从头取到尾步进为1
strs[::1];
#从头取到尾步进为3
strs[::3];
#倒取 (少用)a[-1:-4:-1]
strs[-2];
#序列长度
len(strs);
#判断是否包含
isIn = "cba" in strs;
max(list);
min(list);
#比较两个序列是否相同 注意返回值是1或0并不是true或flase
str1="nba",str2="cba";
iqu = cmp(str1,str2);
元组(tuple):值不可改变
name ="jack";
age = 20;
income =18600.28;
#可以存储不同类型的值
array=(name,age,income);
#取值 也可切片 同字符和序列
array[1];
列表(List)
lt=["jack",30,2885.8,false];#定义一个list 同元组 区别其他强类型语言的是这里可以存储多种不同的类型
#lt[1];
lt[2]=98.5;#区别于元组的是可以修改值
#add
lt.append("这句默认会增加到最后");
#删除
del(lt[3]);
#另外一种删除
lt.remove(30);
#查找 var in list
字典(dict):键值对类型
#用两个列表模拟字典
keys =["name","age","gender"];
values =["张三",30,"男"];
#可以遍历两个列表生成一个新的元组
print(zip(keys,values));
#字典
# keys() or values()返回键值列表 items()返回键值元组
dic={"name":"张三","age":35,"gender":"男"};
print(dic["age"]);
#遍历 注意的是for语句写完后要按回车 目的是保证下行的语句开头前必需有最少一个空格否则有可能输出异常
for k in dic:#取keys
print(k);
for k in dic:#通过取到的keys取value
print(dic[k]);
dic["tel"] = 18000000000;#增加
dic.get("name");#取指定的值
dic.get("name","null");#表示如果没有找到指定key的值则返回当前我们指定的值
name = dic.pop("name");#删除并返回指定键的元素
#删除指定key
del(dic["age"]);
#清空字典
dic.clear();
#删除整个字典
del(dic);
#工厂方法 dic();
#更多方法可以使用help(dict)查看;
4.类型转换:
#可以把数字转换为字符串类型.
str(12)
#可以把字符串转成int类型.
int(string str)
nub=raw_input();
sun = int(nub)+10;
print(str(sun));
5.有点不一样的分支语句格式及逻辑语句:
#注意if条件部分并不使用传统的()来括起来
#还有if后也没有传统的{}来包围多行语句,多行语句块是根据每行的缩进对齐来区别的(所以要保持统一的编程风格)
#感觉这个设计好2啊,当时是咋想的啊......
age=int(raw_input("请输入您的年龄"));
if age>=18:
print("少年带你看点好东西吧,此处省略五万字......");
elif age>=15:
print("少年再等等吧,没几年了!");
else:
print("少年再等等吧!");
# and==&& , or==|| ,not==!
# 要注意的时写书True,和False 大写开头,其他没啥好说的。
#python中没有switch语句 基本上是通过字典集合的特殊处理来完成
#定义一个add方法
def add(a,b):
return a+b;
#定义一个sub方法
def sub(a,b):
return a-b;
#通过字典关联标记与方法
dic ={"+":add,"-":sub};
#演化
dic["+"](2,1);
#为了解决空值的问题可以使用get
dic.get("&")(1,2);
#包装成类似switch
def msiw(a,b,flag):
dic.get(flag)(a,b);
#我只能说真TMD有病
msiw(1,2,add);
6.循环语句:
#可以生成一个序列
#rng = range(10);
#指定起始值 更多用法查看帮助 range(1,11,2);
rng = range(1,11);
#xrange(); 升级版
#遍历
for var in rng:
print(var);
#根据索引遍历序列等
aray = "hello";
for index in range(len(aray)):
#字典的遍历 一次取出k和v的值
dic={"name":"张三","age":35,"gender":"男"};
for k,v in dic.items():
print(k);
print(v);
#一种特殊的for循环的形式
for var in aray:
print(var);
else:
print("这里只有在for循环正常结束是才会出现");
for var in range(1,10):
print(var);
if var==6:
break;
else:
pass; #pass只做为点位用不产生实际任何作用
else:
print("这里只有在for循环正常结束是才会出现,在当前这个循环中这句话并不会出现");
#while循环
index= 10
while index:
print("不让它无限循环");
index-=1;#python中不能好像是不能使用++;--;
8.定义函数:
#定义方法时 前面加上def 等同js中的function
#注意格式问题,这么蛋疼的事情也真是没谁了....
#其他的好像都差不多了
def add(a,b):
return a+b;
#多参数对应元组
def test(a,b,c):
return "%s--->%s--->%s" %(a,b,c);
t=("name","age","gender");
#在无组前加上“*”表示这里传递的是一个元组并与函数中的行参个数相同(注意个数一定要相同)
print(test(*t));
#多参数对应字典
def test(a,b):
return "%s--->%s" %(a,b);
dic={"name":张三,"age"=16};
#在字典前加上“**”表示这里传递的是一个字典并key与函数中的行数名称对应及个数相同(key与函数中的行参名称对应及个数相同)
test(**dic);
#函数参数冗余的处理
#以元组 后面的*args就是当着一个元组来处理的 这里相当与其他语言中的可变参数
def test2(a,*args):
return a+str(args);
#以字典方式存储冗余的参数
def test3(a,**args):
return a+str(args);
print(test2("names","16",20));
9.Lambda表达式
#正常定义
def add(a,b):
return a+b;
#lambda方式定义 前面要写个 “lambda” 其他差不多 唉真是无语...
#也可以直接选择匿名的方式根据使用场景来
add = lambda a,b:a+b;
#调用
add(1,1);
#实际应用场景演示
num = range(1,11);
#reduce函数可以把一个序列中的值放在前面的函数中进行调用并直到最后一次为止
reduce(add,num);
#reduce中的add方法只是进行一些非常简单的运算 完全没有必要去单独定义一个函数 可以直接使用lambda来完成
reduce((lambda x,y:x+y),num);
10.内置函数
#最大值
abs(-100);
ins = range(1,11);
#最大值
max(ins);
#最小值
min(ins);
#长度
len(ins);
#取商和模
divmov(10,3);
#求N次方
pow(2,3);
#返回浮点数
round(10);
#查看函数是否被定义
callable(function);
#判断对像是否是某种类型
isinstance(ins,List);
#条件过滤
filter(function,list);
#合并显示多个序列
zip(list1,list2,listN);
#对两个序列通过函数进行特殊操作
map(function,list1.list2);
#reduce函数可以把一个序列中的值放在前面的函数中进行调用并直到最后一次为止
reduce(function,list);
11.包及模块
引入模块:
#引入私有模块 导入模块时会默认先从当前目录下寻找,如果本地定义的文件名和系统内置的有冲突会使用本地的
import modelName
#如何定义包: 首先建立一个名字为包名的文件夹,在该文件夹下建立 __init__.py文件
import 包名.文件名
#给导入的模块起别名
import 模块名 as 别名
#直接在使用时省去包名
form 模块名 import 函数名
12.正则表达达
#正则演示
#python中的正则元字符 . ^ $ * + - ? {} [] \ | ()
#要使用正则要先导入 re模块
import re
#定义一个匹配条件 为了区别与一般的字符串 通常会在前面加一个r
res = r"abc";
#从一个字符串中查找匹配条件的字符
re.findall(res,"cbasjdkdabcewqkdehdbvacabcdw");
#介绍[] 注意元字符在[]中无意义
str1 ="nba nda naa nca nea";
#找指字符集中的内容
res = r"n[bc]a";
mx = re.findall(res,str1);
#介绍"^" 用来匹配行首
res =r"^nb"
#介绍"$" 表示行尾
res =r"ea$"
#其他常见的如:[0-9a-zA-z]
#\d 匹配任何十进制数字 相当于[0-9].
#\D匹配任何非数字字符 相当于[^0-9].
#\s匹配任何空白字符 相当于[\t\n\r\f\v]
#\S匹配任何非空白字符 相当于[^\t\n\r\f\v]
#\w匹配任何字母数字 相当于[a-zA-z0-9_]
#\W匹配任何非字母数字 相当于[^a-zA-z0-9_]
#介绍 "*" 用来重复前面的条件出现0次或者多次
res =r"nba*";
#例:匹配手机号
res = r"^139\d{8}$";
#介绍"+" 表示条件出现一次或者多次
res =r"nba+";
#介绍"?"匹配0次或者1次
#{m,n} 表示最小m次最大n次
###日刚才写了一堆 没来的及保浏览器崩溃了 以后还是尽量不要使用在线编辑模式了...
####################使用正则####################
#正则表达式的编译(非必需,如果大量使用时可以提高效率)
import re
res = r"^139\d{8}$";
#将表达式转换成对象
p_phone = re.compile(res);
#re.compile(res,re.I); 表示在匹配字符中时忽略大小写,还可以在后面跟参数提供更多功能
#re.compile(res,re.X); 表示忽略换行
#################常用方法##################
#re的开始位置 没有结果返回None
p_phone.match();
#re的结束位置
p_phone.search();
#找到所有结果 作为列表返回
p_phone.findall();
#找到所有结果 作为一个迭代器返回
rst =p_phone.finditer();
#向后移动一次
ma = rst.next();
#MatchObject实例方法
#返回匹配的字符串
str2 = ma.group();
#start()开始位置,end();结束位置,span();返回一个元组包含匹配开始和结束的位置
#其他方法 re.sub(); re.split(); 使用可以查看help();
13.数据拷贝及http请求
###############一个Http请求示例 要用到urllib模块################
import urllib
#urllib.urlretrieve(url,name); 可以下载文件到本地
def getHtml(url):
httpResult = urllib.urlopen(url);
return httpResult.read();
html = getHtml("http://www.baidu.com");
#########数据的拷贝
#导包
import copy
str1 ="hello";
#浅拷贝
str2 = st1;
str3 = copy.copy(st1);
#深拷贝
str4 = copy.deepcopy(str1);
14.文件和目录
#打开指定的路径文件 open返回的是一个可遍历的迭代对象
fo = open("/test.txt");
#读取内容
str = fo.read();
#关闭并释放资源
fo.close();
#使用file()操作文件
fl = file("/test.txt");
#读取内容
str1 = fl.read();
#关闭并释放资源
fl.close();
#写入内容 open()重载函数有多种模式可以使用
# r=只读,r+=读写,w=写入但会先删除原文件,如果没有文件侧会创建一个,W+读写
# a=追加写入如果没有会创建,a+=类推...,b=打开二进制文件,U=支持所有换行符
fw = open("/testWrite.txt","r+");
#读取内容
str = fw.write("测试是否写入了内容!!");
#关闭时刷新写入流并释放资源
fw.close();
#注意 readline() 可以按行读取 writeline() 可以写一行
#还有 readlines() 把每一行的数据放在一个列表返回 writelines() 同理
#fo.next(); 向后移动一行
#控制流的指针
#移动指针到最开始的地方
fo.seek(0,0);
#移动指针到结尾的地方
fo.seek(0,2);
#刷新流中的数据
fo.flush();
#目录操作
import os
#创建一个目录
os.mkdir("/studyThon");
#创建多级目录
os.mkdirs("/AA/aa/a");
#删除目录
os.rmdir("/studyThon");
#删除多级目录
os.removedirs('/AA/aa/as');
#查看当前目录
#查看所有格式 也可以指定自己想年的如".txt"
os.listdir('.')
#查看根目录
os.listdir('/');
#获取当前路径
os.getcwd();
#切换目录
os.chdir('/');
###########遍历目录
#递归
#自己写递归
def dirs(path):
fileList = os.listdir(path);
files =[];
for fileName in fileList:
fp = os.path.join(path,fileName);
if os.path.isdir(fp):
dirs(fp);
files.append(fp);
return files;
#os的递归目录函数
ps = os.walk(path);
#返回的是一个包含目录信息的元组
ps.next();
15.异常的处理
#异常的捕获
try:
#防止用户输入的异常数据
num =int(raw_input("请输入一个数字"));
except Exception,e:
#当异常发生时 这在里处理异常的情况
print("请输入数字!!");
finally:
#不管异常是否发生都会执行当前区域
pass;
#抛出异常 raise "系统中的异常类型"("发生致使错误请检查!!");
raise osError("发生致使错误请检查!!");
#with 语句会自己关注有可能发生异常的语句
try:
with open("abc.txt","w") as fs;
for str in fs:
print(str);
except osError as reason:
pass;
16.mysql操作
#首先电脑中有安装一个 MySQL-python
#导包
import MySQLdb
#然后就是三步曲了
#连接数据库
conn = MySQLdb.connect(user='root',passwd='***',host='127.0.0.1',db='mydb');
#创建游标
cur = conn.cursor();
#指定要操作的库
conn.select_db('mysqls');
#正常的sql语句
sql ="insert into userinfo(name,age,gender) value (%s,%d,%s)";
#发送数据 返回受影响的行数
cur.execute(sql,("张三丰",180,"男"));
#一次插入多条数据 返回受影响的行数
sqls ="insert into userinfo(name,age,gender) values (%s,%d,%s)";
#可以一次插入多条数据 每条以一个元组为单位组合成一个列表发送
cur.executemany(sqls,[("赵四",180,"男"),("王五",180,"男")]);
#删除数据 返回受影响的行数
sql ="delete from userinfo where name = %s ";
#发送数据
cur.execute(sql,"张三丰");
#更新 返回受影响的行数
sql ="update from userinfo set name = %s where id=1";
#发送数据
cur.execute(sql,"张三丰");
#查询 返回受影响的行数
sql= "select * form userinfo";
count = cur.execute(sql);
#获取一行数据
cur.fetchone();
# 移动指针的方法 0表示移动几次,absolute表示移动的位置
cur.scroll(0,"absolute");
#获取所有结果返回一个元组
cur.fetchmany(count);
#重点
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行 否则数据库哪边可能不更新内容
conn.commit()
except:
# 回滚,以防有任何错误
conn.rollback()
#关闭并释放资源 先关游标 再关连接 正常是放在finally语句中
cur.close();
conn.close();