杂
Python中用#
进行注释。 三单引号既是多行字符串,又可以作为注释。
以0b
或0B
开头表示二进制,0o
或0O
表示八进制,0x
或0X
表示十六进制。
浮点数的取值范围约为(-10^{308})至(10^{308}),精度数量级为(10^{-16})。浮点数间的运算存在不确定尾数。
复数的定义:直接把j
接在虚部的数字的后面,如:
z = 1e0 + 2e0j
用z.real和z.imag调用实部和虚部。
round(f, i)
表示对浮点数(f)四舍五入截取小数点后(i)位。(i
可以省略,默认为0)
如果(a^b)的结果很大以至于程序不能运算,但是我们只需要对一个数取余的结果的话,可以用pow(a, b, c)
计算(a^b mod c)。
max(x1, x2, ..., xn)
求最大值,min
同理。
int()
和float()
可以强制转换字符串。
complex()
可以强制转换为复数。
print
会自动打印一个
,如果无需换行,可以用end
来指定结尾:
**
表示乘方,//
表示整除。
Python中没有自加自减操作。
常用逻辑语句:and
、or
、not
、Ture
、Flase
if
用法:
if Co1:
Ex1
Ex2
elif Co2:
Ex3
else:
Ex4
while
用法:
while Co:
Ex1
else:
Ex2
(如果循环没有因break
退出,则执行else
后的语句)
for
用法:
for i in range(1, 5):
Ex1
else:
Ex2(若从循环内部break则不会执行)
此处range(1, 5)
生成的是一个1到 4 的数字列表,而上面for
中的range
可以用其他列表代替。
另外,遍历字符串s
中的每个字符可以用for c in s
。
定义二/多维数组:
dp = [[0 for i in range(n)] for j in range(m)]
os.sep
:该系统下分隔符是\
还是/
还是':'。
异常处理:
try:
<Block 1>
except:
<Block 2>
else:
<Block 3>
finally:
<Block 4>
如果<Block 1>发生错误,则会执行<Block 2>,否则执行<Block 3>;无论如何都会执行<Block 4>。
函数
函数定义方式:
def F(a, b, c):
Ex..;
F(a, b, c)
在函数中调用全局变量需用global
声明,如:
x = 50
def F():
global x
print(x)
F()
在函数中,如果没有对某个组合数据类型的变量进行了初始化(比如C=[]
),那么认为它是全局变量。
函数的参数可以像C++一样地赋予一个默认值,如:
def func(a, b=5, c=10):
print('a is', a, 'and b is', b, 'and c is', c)
func(3, 7)
func(25, c=24)
func(c=50, a=100)
输出结果为:
a is 3 and b is 7 and c is 10
a is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50
注意:可选参数必须放在非可选参数后面。
函数参数前加一个星号表示元组,加两个星号表示字典。
如:
def fact(n, *b):
s = 1
for i in range(1, n + 1):
s *= i
for item in b:
s *= item
return s
print(fact(10, 3, 5, 8))
同一个函数内的return
值的类型可以不一样。
函数的return值可以有多个、用逗号隔开,此时返回类型为元组。
lambda函数
格式:
<函数名> = lambda <参数> : <表达式>
例如:
f = lambda x, y : x + y
print(f(10, 15))
输出为25
。
列表(List)
用法:
a.clear() #删除所有元素
a = [1, 2, 3] #初始化
a.append(4) #在后方插入
n = len(a) #求长度
a.sort() #排序
b = a.copy() #复制
a.insert(1,2) #在位置1插入2
a.pop(1) #将位置1处元素取出并删除
a.remove(1) #将第一个为1的元素删除
a.reverse() #反转
mx = max(a) #最值
cnt = a.count(2) #统计出现次数
for i in a:
print(i)
print(a[0]) #调用
del a[0] #删除
此外,List还支持in
,not in
判断,用加号连接,用乘号复制。
s.index(x)
或s.index(x,i,j)
返回s
中i
到j
中第一次出现x
的位置。
map(<函数名>,一个或多个序列)
表示对序列中的每一个元素执行函数,python2返回新列表,python3返回新列表的迭代器。
python3例子:
map(lambda x: x ** 2, [1, 2, 3, 4, 5])
map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
#结果为[3, 7, 11, 15, 19]
元组(Tuple)
定义时用()
括起来,中间用逗号隔开。(()
可省略但不推荐)
元组和字符串一样不能被修改。
例:
a = (1, 2, 3);
b = (a, 4, 5, 6);
c = (a, b, 7, 8, 9)
print(a[0], a[1], a[2])
print(b[0], b[0][0], b[1], b[2], b[3])
print(c[0], c[0][0], c[1], c[2], c[3], c[4])
输出结果为:
1 2 3
(1, 2, 3) 1 4 5 6
(1, 2, 3) 1 ((1, 2, 3), 4, 5, 6) 7 8 9
(列表也可以类似地嵌套使用)
元组也可以通过len
来获取长度,[]
来获取下标。
字典(Dictionary)
相当于std::map
,但是不会进行排序。用d = {key : value1 , key2 : value2}
的形式定义。
例:
no.clear();
no = {
"Alice" : 1,
"Bob" : 2
}
print(no["Bob"])
del no["Bob"]
print(len(no))
for name, num in no.items():
print(name, num)
no["Cindy"] = 3
if "Cindy" in no:
print(no["Cindy"])
no.keys() #所有键信息
no.values() #所有值信息(它们不是list类型,但是可以用for遍历)
no.items() #所有键值对信息
d.get(k,<default>)
:如果键k
存在,则返回对应值,否则返回<default>
。
d.pop(k,<default>)
:如果键k
存在,则取出对应值,否则返回<default>
。
d.popitem()
:随机取出一个键值对,以元组形式返回。
(对于p = {}
,我们调用其类型type(p)
,返回的是dist而不是set)
对于以上的数据类型(包括字符串),都可以用[]
进行下标调用。
下标0表示第1个元素,下标1表示第二个元素,以此类推。
负下标表示倒数第几个元素。
[a:b]
表示元素a
到元素b
的前一个元素间的所有元素(切片(Slicing)操作)。
字符串进行切片操作得到的还是字符串。
若a
省略,则表示从第一个元素开始,若b
省略,则表示一直到最后一个元素。
例:
shoplist = ['apple', 'mango', 'carrot', 'banana']
print('Item 1 to 3 is', shoplist[1:3])
print('Item 2 to end is', shoplist[2:])
print('Item 1 to -1 is', shoplist[1:-1])
print('Item start to end is', shoplist[:])
另外可以在后面再加一个:
和数字表示间隔,比如:
List = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
print(List[3 : 20 : 2])
输出:
[4, 6, 8, 10, 12, 14, 16, 18, 20]
如果间隔是负数,则表示倒过来排,比如"abcd"[::-1]
相当于"dcba"
集合(Set)
和STL不同,Python的Set是无序的。
集合用{}
表示,用{}
或set()
建立,用set()
建立空集合。
(定义时集合中元素可以重复,会自动去重)
若定义为B = set("pypy123")
,那么相当于B = {'1', 'p', '2', '3', 'y'}
运算符|
取并,&
取交,^
取两集合中的非相同元素,S-T
表示在S
中但不在T
中的元素。
用>
,<
,>=
,<=
判断子集和包含关系。
S.add(x)
:增加元素
S.discard(x)
:如果x
在S
中则删除
S.remove(x)
:如果x
在S
中则删除,如果不在则报错
S.clear(x)
:移除所有元素
S.pop()
:随机取出一个元素,若为空则报错
S.copy()
:返回一个副本
len(S)
:元素个数
x in S
:是否包含
x not in S
:是否不包含
set(p)
:将其它类型变量转成set
set
可作为for
循环的列表。
例:
try:
while True:
print(A.pop(), end = "")
except:
pass
注意:直接用=
将一个对象赋给另一个对象时,只是引用,如果对一个进行修改,那么另一个也会随之修改。如果要使该对象可以独立修改,则需要用切片操作进行赋值。
文件操作
打开文件:<变量名>=open(<文件名>,<打开模式>)
其中,文件名为路径(既可以是绝对路径也可以是相对路径)和名称,Windows下路径用隔开,但是
需要转义即写成
\
,为了方便一般写成/
。
打开模式:
'r'
:只读,若不存在则返回FileNotFoundError(默认)
'w'
:文件不存在则创建,存在则覆盖
'x'
:文件不存在则创建,存在则返回FileNotFoundError
'a'
:文件不存在则创建,存在则在最后追加内容
'b'
:二进制文件模式
't'
:文本文件模式(默认)
'u+'
(u
替换为r
,w
,x
,a
中的一个):在原功能基础上增加读写功能例:
a = open('a.in','rt')
(即默认)
文件关闭:<变量名>.close()
读取方式:
<f>.read(size=-1)
:读入全部内容,如果给出参数size
,则读入前size
长度。
<f>.readline(size=-1)
:读入一行内容,如果给出参数size
,则读入该行前size
长度。
<f>.readlines(hint=-1)
:读入所有行,以每行内容(包括换行符)为元素形成列表,如果给出参数hint
,则读入前hint
行。
遍历行:
fo = open("a.txt", "r");
for line in fo:
print(line);
写入方式:
<f>.write(s)
:写入一个字符串或字节流
<f>.writelines(s)
:将s
中的元素无分隔符拼接后输出
<f>.seek(offset)
:改变指针位置,offset
含义:0——文件开头;1——当前位置;2——文件结尾。
字符串
Python中字符串是不可修改的。
如果字符串中只有单引号,那么外面用双引号;如果只有双引号,那么外面用单引号;如果都有,那么就用三个单引号来表示。
用str()
将数字、列表等类型转化为字符串,用len()
求字符串长度。
hex(x)
将数字转化为十六进制的字符串('0x'开头),oct
转化为八进制。
chr(u)
将Unicode码转化为对应字符;ord(x)
将字符转化为Unicode编码。
用eval()
将表达式的字符串转化为计算结果。
s.input('Enter Something: ')
输入的是整行。
字符串用加号连接;字符串乘以一个数即将其重复并接在一起。
可以用
来指定多行字符,如:
'This is the first line
This is the second line'
另外,在一个字符串中,一个放置在末尾的反斜杠表示字符串将在下一行继续,但不会添加新的一行。
表示回退,
表示换行(光标移动到下一行行首),
表示回车(光标移动到本行行首)。
字符串常用函数:
str.lower()
将字母全部变成小写;str.upper()
将字母全部变成大写。
str.split(str1)
:将str1
看作分隔符,将str
分成几个字符串,返回列表。
str.count(str1)
:返回str1
在str
中的出现次数。
str.replace(old, new)
:返回将str
中的old
替换成new
的结果。
str.center(width[,fillchar])
:将str
用fillchar
扩充至width
并使str
居中。
str.strip(chars)
:在str
的首尾去掉chars
中列出的字符。
str.startswith(str1)
:返回str
是否以str1
开头。
str1 in str
:返回str
是否包含str1
。
str.find(str1)
:返回str1
在str
中的位置,如果没有返回-1。
str1.join(str)
:将分隔符str1
插入str
的每一个空隙。
我们可以在引号之前加一个r
或者R
来指定一个原始字符串(引号里的就是字符串的内容,无需转义),如:
r"Newlines are indicated by
"
format格式化:
可以用编号或者命名来指定格式化的位置,例:age = 20 name = 'Swaroop' print('{0} was {1} years old when he wrote this book'.format(name, age))
或者:
print('{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python'))
关于对格式化的内容进行填充,保留小数等操作:
输出1/3保留四位小数,用_
填充至11位使小数居中,且用,
作为千位分隔符:print("{0:_^14,.4f}".format(100000. / 3))
输出:
_33,333.3333__
(
^
表示居中,<
表示居左,>
表示居右)
(加上逗号表示千位分割,没有需要可直接去掉)
(可以看作跟C的区别就是前面可以选择用什么来填充和填充的格式)
(.
之后的数字既可以表示保留小数也可以表示字符串最大输出长度)
关于类型:
(f表示浮点数,d表示整数,c表示字符)
b表示二进制,o表示八进制,x表示小写的十六进制,X表示大写的十六进制;
e表示使用e的科学计数法,E表示使用E的科学计数法,%表示以百分数的形式表示浮点数。
random库
import random
seed(a = None)
:使用a
作为随机数种子,默认为当前系统时间
random()
:得到一个([0.0,1.0))之间的随机小数
randint(a, b)
:生成([a,b])之间的随机整数
randrange(a, b, c)
:范围为([a, b)),步长为(c)
getrandbits(k)
:随机一个k比特长的随机整数
uniform(a, b)
:生成([a, b])之间的随机小数
choice(seq)
:在列表中随机选取
shuffle(seq)
:将列表随机打乱
time库
首先
import time
函数:
time()
:获取当前时间戳(从1970年1月1日0:00开始过了多少秒)(浮点数)
ctime()
:返回当前时间的易读方式的字符串,如'Fri Jan 26 12:11:16 2018'
gmtime()
:返回一个特殊的时间格式:time.gmtime() = time.struct_time(tm_year = 2018, tm_mon = 1, tm_mday = 26, tm_hour = 4, tm_min = 11, tm_sec = 16, tm_wday = 4, tm_yday = 26, tm_isdst = 0)
strftime(tpl, ts)
:用于格式化输出结果,其中tpl为模板,ts为struct_time
类型,用法示例:
t = time.gmtime()
time.strftime("%Y-%m-%d %H:%M:%S", t)
得到字符串:'2018-01-26 12:55:20'
time.strptime(str, tpl)
是time.strftime(tpl, ts)
的反操作,即反格式化形成内部时间,示例:
str = '2018-01-26 12:55:20'
time.strptime(str, "%Y-%m-%d %H:%M:%S")
perf_counter()
返回的是一个非常精准的时间计数值,但是计时起点不确定,只有差值才有意义。
sleep(x)
:休眠x秒。
附格式化对应表:
格式化字符串 | 说明 | 示例 |
---|---|---|
%Y | 年份 | 1999 |
%m | 月份 | 01 |
%B | 月份名称 | April |
%b | 月份缩写 | Apr |
%d | 日期 | 01 |
%A | 星期 | Monday |
%a | 星期缩写 | Mon |
%H | 24小时制小时 | 17 |
%I | 12小时制小时 | 5 |
%p | 上/下午 | AM |
%M | 分钟 | 00 |
%S | 秒 | 00 |
turtle库
我们可以用turtle
库进行简单绘图。
import turtle
初始化窗口(不是必须的):
turtle.setup(width, height, startx, starty)
(分别表示窗口的宽度,高度,以及左上角的坐标(前一个是横坐标,后一个是纵坐标))
绝对坐标指以中心为原点的平面直角坐标。
我们可以通过turtle.goto(x, y)
来使画笔从原来的位置走到指定坐标并留下轨迹。
相对位置指以画笔当前正对方向为前方的相对位置。
我们用turtle.circle(r, angle)
绘制一个圆心在当前方向的左边的、半径为r
的、角度为angle
的圆弧(angle
可省略,默认为一周)(如果需要向右侧画圆,将半径改为负数即可);用turtle.bk(d)
表示后退d
;用turtle.fd(d)
表示前进d
。
goto
、fd
、bk
都不会改变画笔的正对方向,circle
可以。
另外,我们可以用turtle.seth(angle)
或turtle.setheading(angle)
直接指定当前正对方向的绝对角度;也可以用turtle.left(angle)
和turtle.right(angle)
来改变一个相对角度。
turtle.speed(v)
用于调节画笔的移动速度,范围为0到10的整数。
turtle.penup()
表示抬起画笔,之后的轨迹不在显现。
turtle.pendown()
则表示画笔落下,之后的轨迹将会显现。
turtle.pensize(w)
或turtle.width(w)
可调整画笔宽度。
turtle.pencolor(color)
可修改画笔颜色,其中·color
有三种形式:
- 颜色字符串,比如turtle.pencolor("purple")
- RGB值(小数),如turtle.pencolor(0.1, 0.2, 0.3)
- RGB值(元组),如turtle.pencolor((0.1, 0.2, 0.3))
turtle
默认用RGB的小数形式来表示颜色,但是可以调整表示方式:
turtle.colormode(1.0)
turtle.colormode(255)
turtle.dot(d)
用于绘制直径为d
的实心圆。
turtle.home()
用于返回原点且将方向设为向右。
如果不希望绘图之后自动退出,则写一句turtle.done()
即可。
turtle.write('汉字', font = ("Arial", 18, normal))
可绘制汉字。
PyInstaller
PyInstaller用于将.py文件转化为可执行文件。
安装:在cmd命令行中输入pip install pyinstaller
使用:在cmd命令行中输入pyinstaller -F <文件名.py>
,会生成__pycache
,build
,dist
三个文件夹,生成文件为dist
中的可执行文件,前两个文件夹可以将其删除。
其它参数:
-h
:帮助
--clean
:清理临时文件
-i <图标文件名.ico>
:指定使用图标文件
其它第三方库
第三方库的安装方法
安装:pip install <库名>
下载但不安装:pip download <库名>
卸载:pip uninstall <库名>
更新:pip install -U <库名>
查看详细信息:pip show <库名>
搜索:pip search <关键词>
已安装列表:pip list
文件安装:如在https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud上下载编译后的文件,然后pip install <文件名>
即可。
jieba库
jieba库是中文分词第三方库(利用词库将文本进行分词以得到一个个词语)。
安装:在cmd命令行中输入pip install jieba
使用:
jieba.lcut(s)
:精确模式,返回分词结果(列表)jieba.lcut(s,cut_all=True)
:全模式,返回所有可能的词语,存在冗余jieba.lcut_for_search(s)
:搜索引擎模式,在精确模的结果上进一步分词,存在冗余
wordcloud库
用于生成词云,需要安装Microsoft Visual C++ 14.0(也可以在https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloudshang 下载编译后的版本)。
w = wordcloud.WordCloud()
w.generate(txt) #加载文本txt
w.to_file(filename) #输出图像文件
设置大小:
w = wordcloud.WordCloud(width=600)
w = wordcloud.WordCloud(height=400)
w = wordcloud.WordCloud(min_font_size=10)
w = wordcloud.WordCloud(max_font_size=20)
w = wordcloud.WordCloud(font_step=2) #步进间隔
w = wordcloud.WordCloud(font_path="msyh.ttc") #字体
w = wordcloud.WordCloud(max_words=200) #最大单词数
w = wordcloud.WordCloud(stop_words={"ban_word"}) #禁词
w = wordcloud.WordCloud(background_color="white") #背景颜色(默认黑色)
其他库
Numpy:数据分析
Pandas:数据分析高层次应用库
SciPy:数学、科学和工程计算库
Matplotlib:二维数据可视化功能库
Seaborn:统计类数据可视化功能库
Mayavi:三维科学数据可视化功能库
PyPDF2:用于处理PDF文件的工具集
NLTK:自然语言文本处理
Python-docx:创建或更新.doc或.docx文件
Scikit-learn:机器学习方法工具库
TensorFlow:机器学习框架
MXNet:基于神经网络的深度学习计算框架
Requests:最友好的网络爬虫功能库
Scrapy:优秀的网络爬虫构架
pyspider:Web页面爬取系统
Beautiful Soup(beautifulsoup4或bs4):HTML和XML的解析库,需预先了解HTML和XML的设计原理,与网络爬虫库配合使用
Re:正则表达式解析和处理功能库(Re是标准库,无需安装)
Python-Goose:提取文章类型的Web页面的功能库
Django:略微复杂的Web应用框架
Pyramid:规模适中的Web应用框架
Flask:Web应用开发微框架
WeRoBot:解析、反馈微信消息
aip:百度AI开放平台接口
MyQR:生成二维码
PyQt5:Qt开发框架的Python接口
wxPython:跨平台GUI开发框架
PyGObject:使用GTK+(一种跨平台的用户图形界面GUI框架)开发GUI的功能库
PyGame:基于SDL的简单游戏开发功能库
Panda3D:开源、跨平台的3D渲染和游戏开发库(有C++和Python两种接口)
cocos2d:构建2D游戏和图形界面交互式应用的框架
Quads:迭代艺术图形
ascii_art:ASCII艺术库