可以简便的方法:
(1)lambda x,y:x*y
(2)list1 = list(filter(lambda x:x%3 == 0,range(100)))
filter 第一个参数是过滤条件,第二个是要过滤的内容
返回值是个Object,得转换为其他类型
(3)map: list1 = map(lambda x:x**2,[1,2,3,4,5])
第一个是处理条件,第二个是序列
返回值是Object
(4)[i for i in range(10) if i%2 ==0] 直接生成列表
1.缩进是python的灵魂
2.获取变量类型,type(),isinstance(,)
3.s为字符串
4.怎么才能让int四舍五入?
int(x+0.5)
5.python3支持中文变量名,但源码是utf-8
6.python对象3个特性:身份,类型,值
7.python数字类型:int,long,float,boolean,complex(复数),
字符类型:string
序列类型:字典,元组,列表
8.典型python文件结构:
(1)起始行 #/usr/bin/env/python
(2) 模块文档 "this is a test module"
(3) 模块导入 import os
(4) (全局)变量定义 debug = True
(5) 类定义(若有) class FooClass(Object):
pass
(6) 函数定义: def test():
(7) 主程序 if name = "main"
9.元组不可变,列表可变,字典可变
10.set函数,去除集合中重复元素,li = set(list2)
11.两个集合求交集:list1 & list2,求并集:list1 | list2
parent
--_init.py
--child
-- _init.py
--a.py
目录结构如上,如果要引用a文件,可这样
import sys,os
sys.path.append(os.getcwd()+"\parent\child")
from a import func
13.os.walk(path)
14.p,f = os.path.split(spath) 分隔目录和文件名
drv,left = os.path.splitdrive(spath) 分隔盘符和文件名
f,ext = os.path.splitext(spath) 分隔文件和扩展名
15.时间处理
16.三目运算符:sm = x if x>y else y
17.None表示空类型
18.a=[1,2,3] b=[1,2,4] id(a[1]) == id(b[1]) True
19.python是基于值的内存管理方式,不同变量的值 如果相等,则他们的内存地址id(变量名)也相等
20.dict.get(key,error) 有则返回值,无则返回提示
21.列表:
append(),intsert(1,'two'),extend(),sort(),reverse(),list[:],pop(),del li[0],copy(),clear()
[i for i in range(10) if i>10]
23.元组:x = 1, x = 1,2,3
24.x = (1,2,3,4)
2,3之间插入5
x[:2] + ('5',) + x[2:]
25.python内置方法:
divmod(10,2) 返回10对2的除法和余数
pow(x,y,z) x的y次方,如果z存在,则%z
float,int,long,list,tuple,str,dict 转换为其类型
round四舍五入 sum求和
isinstance(1,int) 前者是否属于后者类型
'I am {0} ,I like {1}'.format('xy','d')
enumerate,返回一个可枚举的对象(tuple)
set
sorted 排序
all(集合) 集合中所有的元素都为真才为真
any(集合) 集合中有一个元素都为真才为真
cmp(x,y) xy返回正数
next() 返回迭代对象中的下一个元素
reversed(range(10)) 逆置对象
sorted() 对对象进行排序,返回一个新的列表
zip 返回元组型
x = [1,2,3]
y = [4,5,6,7]
print(list(zip(x,y))) [(1, 4), (2, 5), (3, 6)]
map: list1 = map(lambda x:x**2,[1,2,3,4,5])
第一个是处理条件,第二个是序列
返回值是Object
filter: list1 = list(filter(lambda x:x%3 == 0,range(100)))
filter 第一个参数是过滤条件,第二个是要过滤的内容
返回值是个Object,得转换为其他类型
help() 返回对象的帮助信息
input 读取用户输入的信息
open 打开文件
exec 执行动态语句块 exec('a=1+2')
26.使用函数名doc可以查看函数文档
27.闭包函数:
def fun1(x):
def fun2(y):
return xy
return fun2
28.字符串处理:
capitalize() 首字母大写
title 首字母小写
replace('1','2') 替换
upper 全部大写
lower 全部小写
swapcase 大小写互换
lstrip 去掉左空格 strip 左右 rstrip右空格
split
startswith 以。。开头 endswith以。。结尾
s.isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False。
s.isalpha() 所有字符都是字母,为真返回 Ture,否则返回 False。
s.isdigit() 所有字符都是数字,为真返回 Ture,否则返回 False。
s.islower() 所有字符都是小写,为真返回 Ture,否则返回 False。
s.isupper() 所有字符都是大写,为真返回 Ture,否则返回 False。
s.istitle() 所有单词都是首字母大写,为真返回 Ture,否则返回 False。
s.isspace() 所有字符都是空白字符,为真返回 Ture,否则返回 False。
replace
find('t') 有则返回位置,无则返回-1
count('t') 字符串中数量
29.关键字:global 修改函数外的全局变量,nonlocal内部函数修改外部函数的局部变量
30.lambda函数:
g = lambda x,y:xy
g(2,3) ---------6
31.字典:d = {k:v,k1:v1}
访问:d[k],d.get(k)
修改:d[k] = 'v2'
删除:del d[k] 删除一个
d.clear() 清空所有
del dict 删除字典
d.items() 返回(键,值)元组
d.key()
d.values()
d.pop(k) 删除并返回值
x = {}
x = x.fromkeys((1,2,3),'a')
set
特点:无序,不能通过索引或执行切片操作
frozenset() 不可修改的集合
创建:
a = {1,2,3}
a = set('boy')
a = set(['a','b','c','d'])
比较:s = {1,2,3} b = {2,5}
s.difference(b) //找到s中存在,b中不存在的集合,返回新值
添加:s.add()
删除:discard s.discard(3) //删除不存在的元素不会报错
remove s.remove(3) //删除不存在的元素会报错
pop s.pop() //删除最后一个元素并返回新值
取交集: s = {1,2,3} b = {2,5}
s.intersection(b) //取交集,赋给新值
判断: s = {1,2,3} b = {2,5}
s.isdisjoint(b) //判断是否不存在交集(有交集False,无交集True)
s.issubset(b) //判断s是否是b的子集合
s.issuperset(b) //判断s是否是b的父集合
取并集:s = {1,2,3} b = {2,5}
s.union(b) //取并集,并赋新值
更新:s = {1,2,3} b = {2,5}
s.update(b)
print(s) {1,2,3,5}
33.文件处理:
r 只读 r+读写 w可写,存在则覆盖 w+读写,存在则覆盖 a追加,不存在则创建
f.read() 读取文件全部内容为一个str
f.readline() 读取一行
f.readlines() 读取所有行,放到一个list中
f.write() 只可写字符串
f.writelines() 可写序列
当出现提示乱码时:添加encoding='UTF-8'
open('', 'w+', encoding='UTF-8')
xlrd处理表格
读
#打开文件
workbook = xlrd.open_workbook(r'F:\')
#获取所有sheet
workbook.sheet_names() 返回一个列表
#根据sheet索引或者名称获取sheet内容
sheet2 = workbook.sheet_by_index(1)
sheet2 = workbook.sheet_by_name('sheet2')
#获取sheet2的名称,行数,列数
sheet2.name,sheet2.nrows,sheet2.ncols
#获取整行和整列的值(数组)
rows = sheet2.row_values(3) #第四行内容
cols = sheet2.col_values(2) #第三列内容
#获取单元格内容
sheet2.cell_value(1,0).encode('utf-8')
#获取单元格内容的数据类型
sheet2.cell(1,0).ctype
xlwt 写文件
#创建工作簿
f = xlwt.Workbook(encoding='utf-8')
#创建第一个sheet
sheet1 = f.add_sheet('sheet1')
#写数据,对应 行 列 值
sheet1.write(0,1,label = 'this is the test')
#保存
f.save('xx.xlsx')
os模块
示例目录:path = C:\Users\hwx518534\Desktop
os.name nt/posix
os.getcwd() 得到当前工作目录
os.curdir 当前目录
os.listdir(path) 返回指定目录下的所有文件和目录名 列表
os.remove() 删除一个文件
os.rename() 重命名
os.system() 执行系统命令
os.mkdir()
os.rmdir() 删除文件夹,文件夹须为空
os.unlink(path) 删除path下所有文件
os.exit() 终止当前进程
os.chdir() 改变当前目录
os.walk() 返回三元组 第一个是文件夹地址 第二个是list,当前文件夹下所有目录名字(不包括子目录)
第三个返回的是list,返回的是该文件夹下的所有文件(不包括子目录)
os.path模块
示例目录:path = C:\Users\hwx518534\Desktop\temp.py
os.path.abspath(file) 当前文件的绝对路径
os.path.dirname() 获取当前文件目录 C:\Users\hwx518534\Desktop
os.path.split() 返回一个路径的目录名和文件名 ('C:\Users\hwx518534\Desktop', 'temp.py')
os.path.isfile() os.path.isdir 检测是否是文件或目录
os.path.exists() 检测路径是否存在
os.path.getsize() 获得文件大小(字节),如果是目录返回0L,
os.path.splitext() 分离文件名与扩展名
os.path.join() 连接目录与文件名 返回值为路径
os.path.basename() 返回文件名
_开头变量含义
_xx表示受保护变量,不能通过from x import x 导入,可在对象和子类中访问
x表示系统定义的特殊变量
__xx 私有成员,只有类对象自己可以访问
time模块
time.time() 纪元开始的秒数
time.ctime() Wed Jan 31 17:50:57 2018
time.localtime() time.struct_time(tm_year=2018, tm_mon=1, tm_mday=31, tm_hour=9, tm_min=51, tm_sec=54, tm_wday=2, tm_yday=31, tm_isdst=0)
s = time.gmtime() s.tm_year ---2018
time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())
2018-01-31 18:06:25
38.shutil模块 --- 高级的文件,文件夹,压缩包处理模块
shutil.copyfileobj(open('xx.py','r'),open('x.txt','w')) -- 拷贝文件内容到另一个文件
shutil.copyfile('xx.py','x1.py') --拷贝文件到另一个文件
shutil.copystat(src,dst) --仅拷贝状态信息
shutil.copy(src,dst) --拷贝文件和状态
shutil.copytree('folder1','folder2') --递归拷贝文件夹
shutil.rmtree('f1') --递归删除文件(夹)
shutil.move(src,dst) --重命名
39.常见异常
AssertionError 断言语句失败
AttributeError 未知的对象属性
IndexError 索引序列超出范围
KeyError 字典中查找一个不存在的关键字
NameError 尝试访问一个不存在的变量
OSError 操作系统产生的异常
FileNotFoundError 文件未找到
SyntaxError 语法异常
TypeError 不同类型间的操作异常
ZeroDivisionError 除数为0异常
40.面像对象
init方法,预处理
__name ,私有变量,只能通过内部去访问,但是是伪装的还可以这样访问
p = Fish()
p._Fish__name
41.正则表达式
字符:
.:匹配任意字符 a.c ---abc
\:转义字符 a.c --- a.c
[...]:匹配括号中的任意一个 a[bx]c --abc,axc
预定义字符集:
\d:匹配数字[0-9] a\dc --a0c,a1c
\D:匹配非数字[^\d] a\Dc --amc,abc
\s:匹配空白字符[\t\r\n\f\v] a\sc -- a c
\S:匹配非空白字符[^\s] a\Sc -- abc
\w:匹配单词字符[A-Za-z0-9_] a\wc -- abc
\W:匹配非单词字符[^\w] a\Wc --a c
数量词:
:匹配前一个字符0或多次 abc ----ab,abc,abcccc
+:匹配前一个字符1或多次 abc+ -----abc,abccc
?:匹配前一个字符0或1次 abc? ----ab,abc
{m}:匹配前一个字符m次 a{2}c -- aac
{m,n}:匹配前一个字符m次-n次 a{1,2}c -- ac aac
边界匹配:
^:匹配以。。开头的 ^a ----abc
$:匹配以。。结尾的 c$ ----abc
贪心模式:.非贪心模式: .?
匹配或:
(a|b|c) 不能使用[a|b|c]
flag:
re.I:IGNORECASE,忽略大小写
re.M:re.MULTILINE,多行模式,改变^和$的行为
re.S:re.DOTALL,点任意匹配模式,改变.的行为
pattern = re.compile(r'one')
str = 'one1two2three3four4five5'
(1)re.match() 只从开头匹配,有则返回,无则None
x = re.match(pattern,str) x.group() === one
pattern = re.compile(r'ne')
x = re.match(pattern,str) x.group() === None
(2)re.search() 扫描整个str,有则匹配,匹配完成就返回,无则None
pattern = re.compile(r'ne')
x = re.search(pattern,str) x.group() === ne
(3)re.split() 返回列表 根据可匹配的子串将字符串分隔
pattern = re.compile(r'\d+')
x = re.split(pattern,str) x === ['one','two','three','four','five']
(4)re.findall() 以列表形式返回所有匹配的子串
pattern = re.compile(r'\d+')
x = re.findall(pattern,str) x === ['1','2','3','4','5']
(5)re.finditer() 返回一个顺序访问第一个匹配结果的迭代器
pattern = re.compile(r'\d+')
x = re.finditer(pattern,str)
for m in x:
print(m) 1 2 3 4 5
(6)re.sub(pattern,匹配到的处理,待处理的字符串) 返回值为处理后的字符串
去掉前后空格
s = " hello world "
pattern = re.compile(r'(^\s+)(\w.*)(\s+$)')
print(re.sub(pattern, r'\2', s))
t = threading.Thread(targets=func,args=(1,2,...))
t.setDeamon(True) //设置为守护进程,随着主进程一起退出,写在t.start()前面
t.start() //启动线程
t.join(x) //x代表秒数,可为空,为空时表示子线程执行时父线程阻塞,不为空时表示子线程执行x秒后,父线程执行
datetime.datetime.fromtimestamp(time.time())
datetime.datetime(2015, 2, 27, 11, 13, 0, 604980)
44.python导包顺序:
当前目录---当前项目---pythonpath---python中lib文件夹---python中lib文件夹下的site-pakage
45.sys模块
sys.path 返回模块的搜索路径
sys.exit() 退出当前程序
sys.argv[0] 返回参数 0返回当前文件名称 1,2,3。。返回参数
sys.modules.keys() 返回所有已经导入的模块列表
sys.platform 返回操作系统平台名称
sys.getdefaultencoding() 获取编码
sys.setdefaultencoding('utf-8') 设置脚本编码
46.chr(64) -- 根据ascii码转换为字符
ord('a') -- 根据字符转换为ascii码
47.openpyxl
新建: wb = openpyxl.Workbook()
删除工作表 wb.remove(sheet)
读取一个表格 wb = openpyxl.load_workbook('')
获取所有工作表名 sheets = wb.get_sheet_names()
获取某一个特定的工作表 sheet = wb.get_sheet_by_name('Sheet2')
获取工作表的表名 sheet_name = sheet.title
获取激活的工作表 sheet = wb.active
获取单元格内容 a = sheet['A2'] a = sheet.cell(1,2) a.value
获取行 sheet.rows
获取列 sheet.columns
获取最大行 sheet.max_row
获取最大列 sheet.max_column
给单元格赋值 sheet['A2'].value = 3
保存单元格 wb.save('')
48.下载图片,得到图片url
i = requests.get(url)
open('xx.png','wb').write(i.content)
习题总结:
1.range(100):0-99,range(1,101):1-100,range(1,101,2):1开始,101结束不包含101,每次增加2,range(10,0,-1):10开始,0结束但不包含0,每次增加-1
2.注释:单行:# 多行:'''内容'''
3.3//2 = 1 地板除(先对被除数进行四舍五入),得到的结果无条件截断
4.print方法 print(1,2,seq='&&' end='\t') 输出多个对象,用,隔开,对象间的分隔符
5.for index, data in enumerate(x) 遍历索引和数据
6.\起到换行的作用
x = 'ddddd\
sdfdsfsf'
7.多元赋值:(a,b,c) = (1,2,'string')
8.while-else
x = 13
while x > 10:
print(x)
else:
print('xx')
x += 1
迭代器和生成器
迭代器:
it = iter([1,2,3])
for i in it:print(i)
collections模块下的deque 双向队列 ---左右两端操作列表
import collections
d = collections.deque()
d.appendleft('1')
d.appendleft("2")
print(d)
返回值 :deque(['2', '1'])
12.copy与deepcopy区别
见总结文档
13.%r与%s区别
1.%r调用的是repr方法,%s调用的是str方法
2.%r打印时能显示出它所属的对象。
实例:
打印数字类型,二者一样
打印字符类型,%r打印出来的会带着单引号
打印日期类型:
d = datetime.date.today()
print('%r,%s' %(d,d)) ---- datetime.date(2018,6,8) 2018-06-08
14.python如何读取大文件
使用read()方法是一次性将文件内容读取并存在到内存中,一旦文件大小大于内存大小时,就会出现内存溢出
解决方法:
(1) 使用read(参数),指定读取大小 ,也可readline()一行一行读取,不能使用readlines()
(2)使用with open(filename,'r') as file: for i in file:...
(3)使用模块fileinput for line in fileinput.input('filename')
15.bin()转换为二进制
oct()转换为八进制
hex()转换为十六进制
16.装饰器
def hello(o):
print("hello,%s" % o, t)
对其扩展加入一些步骤
(1)固定参数
def deco(hello):
def x(name):
print("before myfunc()...")
hello(name)
print("after func()....")
return xbr/>@deco
def hello(o):
print("hello,%s" % o, t)
(2)不固定参数
def deco(hello):
def x(*args, **kargs):
print("before myfunc()...")
hello(*args, **kargs)
print("after func()....")
return x
@deco
def hello(o, t):
print("hello,%s,%s" % (o, t))
(3)一个函数可以有多个装饰器
17.方法名或类名获取
(1)方法名:方法名.name
(2)类名:self.class.name
(3)sys._getframe().f_code.co_name
and or
or:从左到右,返回每一个为真的值,若都为假,则返回最后一个值
and:从左到右,返回第一个为假的值,若都为真,则返回一个值
19.连接两个字符串:({} {}!).format('hello','world')
20.is比较的是内存值是否相同,==比较的是值是否相同
(1)a = [1,2,3]
b = a
a is b ---True
a ==b -----True
(2)a = [1,2,3]
b = a[:]
a is b ---False
a ==b ----True``