PS:这篇文章是以一个学习者的角度来汇总知识点以及教程,对于想学习Python的入门者也会比较友好,想学习python可以先收藏,我会慢慢持续更新。学艺不精,如有纰漏,敬请指正。
需要安装配置python和Pycharm软件可以移步这篇文章,有详细的教程。
传送门:
目录
一、python是什么
Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
二、Python基础语法
2.1标识符
标识符是编程时使用的名字,用于给变量、函数、语句块等命名,Python 中标识符由字母、数字、下划线组成,不能以数字开头,区分大小写。
以单下划线开头的标识符(如 _width),表示不能直接访问的类属性,其无法通过 from...import* 的方式导入;以双下划线开头的标识符(如__add)表示类的私有成员;以双下划线作为开头和结尾的标识符(如 __init__),是专用标识符。(不理解没关系,后续会说到,这里只需要知道就可以了)
除此之外,还有一些标识符,虽然是以字母开头,但由于有特殊含义,不能用作变量,函数,语句块等命名,称为关键字。python是严格区分大小写的,标识符Aa和aa是不一样的,关键字也是,比如False是关键字,但FALSE就不是。(关键字不用记,可以通过命令查看,并且即使不小心用到关键字作为标识符,系统会提示“invalid syntax”)
#查看关键字命令
>>> import keyword
>>> keyword.kwlist
#关键字
['False', 'None', 'True', 'and', 'as', 'assert', 'break',
'class', 'continue', 'def', 'del', 'elif', 'else', 'except',
'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',
'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return',
'try', 'while', 'with', 'yield']
2.2编码
Python2 中默认编码为 ASCII,假如内容为汉字,不指定编码便不能正确的输出及读取,比如我们想要指定编码为 UTF-8,Python 中通过在开头加入 # -*- coding: UTF-8 -*- 进行指定。
Python3 中默认编码为 UTF-8,可以用中文作为变量名,非 ASCII 标识符也是允许的了。因此在使用 Python3 时,我们通常不需指定编码。
2.3注释
任何一门编程语言注释都是很重要的,他能帮助你理解程序,即使是你自己写的程序,也会记忆模糊,python注释分为单行注释和多行注释,单行注释以 # 开头,多行注释可以用多个 # 号,还有 ''' 和 """,编译器不会把注释进行编译。注释如果作为字符串的一部分,则系统将不认为是注释(另外注释不允许嵌套)
# 第一个注释
# 第二个注释
'''
第三个注释
第四个注释
'''
"""
第五个注释
第六个注释
"""
print ("Hello, Python!")
print ("#Hello, Python!")
运行结果
Hello, Python!
#Hello, Python!
2.4缩进
python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {},一般默认是以 4 个空格作为代码的基本缩进单位。在菜单栏中选择Options -> Configure可以更改默认缩进量,
缩进量必须一致,但具体缩进量为多少,并不做硬性规定。按Tab可以快速缩进,默认情况下,按一下Tab缩进4个单位。
#正确缩进
if True:
print ("Answer")
print ("True")
else:
print ("Answer")
print ("False")
# 缩进不一致,会导致运行错误
if True:
print ("Answer")
print ("True")
else:
print ("Answer")
print ("False")
运行结果:IndentationError: unindent does not match any outer indentation level(报错)
2.5数据类型
python数据类型分为整数,浮点数,字符串,布尔值,空值,变量,常量。将数据放入变量的过程叫做赋值(Assignment)
整数可以为任意大小、包含正数,负数,0
浮点数就是小数
字符串以单引号 '
、双引号"
、三引号 '''
或 """
括起来的文本,可以为汉字或者英文,若干个字符的集合就是一个字符串(String)
布尔值,只有 True
、False
两种值
空值:用 None
表示
变量是可随时赋值改变的,常量是不可变的(比如π)。
python中,对变量赋不同的值,则会发生不同的变化。
例如:
x=1
#此时x为整形
x="python"
#此时x就是字符串
2.6运算符
运算符分为算术运算符,位运算符,赋值运算符,比较运算符,逻辑运算符。
2.6.1算术运算符
+ | 加 | 1 + 15 | 16 |
- | 减 | 4 - 3 | 1 |
* | 乘 | 5 * 3 | 15 |
/ | 除法 | 7 / 2 | 3.5 |
// | 整除(只保留商的整数部分) | 7 // 2 | 3 |
% | 取余,即返回除法的余数 | 7 % 3 | 1 |
** | 幂运算/次方运算,即返回 x 的 y 次方 | 2 ** 2 | 4, |
2.6.2位运算符
&按位与
|按位或
^按位异或:相同为0,不同为1,即1 ^ 1 = 0,0 ^ 0 = 0,1 ^ 0 = 1
~按位取反
<<按位左移4 << 2,表示整数 4 按位左移 2 位
>>按位右移4 >> 2,表示整数 4 按位右移 2 位
(位运算符初期学习了解即可,多用在底层开发,应用层开发不常用)
2.6.3赋值运算符
最基础的就是 = ,x=5,其实就是把5赋值给x使x的值等于5。在python中,==才表示判断两边是否相等,比如a==b,即判断a和b是否相等,a=b是把b的值赋给a。
=与其他算术运算符结合还有其他的工作,比如x+=y,即先计算x+y在把值赋给x,即x=x+y。同样的x-=y即x=x-y。*= ,/*,%=,//=,**=,&=,|=,^=,<<=,>>=都是同样的道理。
2.6.4比较运算符
(这一块比较简单,就是比大小,比相等不相等)
> | 大于,如果> 前面的值大于后面的值,则返回 True,否则返回 False。 |
< | 小于,如果< 前面的值小于后面的值,则返回 True,否则返回 False。 |
== | 等于,如果== 两边的值相等,则返回 True,否则返回 False。 |
>= | 大于等于(等价于数学中的 ≥),如果>= 前面的值大于或者等于后面的值,则返回 True,否则返回 False。 |
<= | 小于等于(等价于数学中的 ≤),如果<= 前面的值小于或者等于后面的值,则返回 True,否则返回 False。 |
!= | 不等于(等价于数学中的 ≠),如果!= 两边的值不相等,则返回 True,否则返回 False。 |
is | 判断两个变量所引用的对象是否相同,如果相同则返回 True,否则返回 False。 |
is not | 判断两个变量所引用的对象是否不相同,如果不相同则返回 True,否则返回 False。 |
2.6.5逻辑运算符
(就是数学中的与或非)
and | 逻辑与运算,等价于数学中的“且” | a and b | 当 a 和 b 两个表达式都为真时,a and b 的结果才为真,否则为假。 |
or | 逻辑或运算,等价于数学中的“或” | a or b | 当 a 和 b 两个表达式都为假时,a or b 的结果才是假,否则为真。 |
not | 逻辑非运算,等价于数学中的“非” | not a | 如果 a 为真,那么 not a 的结果为假;如果 a 为假,那么 not a 的结果为真。相当于对 a 取反。 |
2.6.6运算符优先级
运算符 描述(由上至下对应优先级由高到低)
(就类似于3+2*5=13,先算乘数后算加减)
运算符 | 描述(由上至下对应优先级由高到低) |
() | 括号 |
** | 幂运算 |
~ + - | 取反、正号、负号 |
* / % // | 乘、除、取模、取整除 |
+ - | 加法、减法 |
>> << | 右移、左移 |
& | 与 |
^ | | 异或、或 |
<= < > >= | 比较运算符 |
== != | 是否等于、是否不等于 |
= %= /= //= -= += *= **= | 赋值运算符 |
三、基本语句
语句分为条件语句和循环语句,是程序的基本逻辑。
3.1 条件语句
条件语句用于逻辑判断,python提供了if,elif,else三个语句。
if 判断条件1:
执行语句1
elif 判断条件2:
执行语句2
elif 判断条件3:
执行语句3
else:
执行语句4...
通俗点举栗就是
if 现在是早上8点
吃早饭
elif 现在是中午12点
吃午饭
elif现在是下午6点
吃晚饭
else
不吃饭
PS:(大家都要好好吃饭哦)
3.2 循环语句
当需要多次重复执行时,我们要用到循环语句,Python 提供了 for 循环和 while 循环。
for循环格式
for 临时变量 in 序列:
重复执行的代码1
重复执行的代码2
举个栗子:定义一个字符串"python",现在要遍历这个字符串,把每个字符单独输出。
str = 'Python'
for s in str:
print(s)
输出结果:
P
y
t
h
o
n
s就是用来暂存当前需要输出的字符串中的字符,即临时变量。
str就是字符串序列。
while循环
while 条件:
条件成立重复执行的代码1
条件成立重复执行的代码2
同样举个栗子:
本来和老婆约定晚上10点回家,但你玩过头了,12点到家还把睡梦中的老婆吵醒了,老婆怒气冲冲让你写100遍“老婆,我错了”,不然晚上就睡大街,于是你就想到了while循环,写出如下代码:
i = 0
while i < 100:
print('老婆,我错了')
i += 1
print('任务结束')
这里的i<100即条件,i相当于一个计数器,从0开始+,每写一遍老婆我错了,i就加1并重新赋值给i(i=i+1),同时和判断条件进行比较,小于100,继续进入循环,一直到任务结束为止。
这个程序输出结果也很简单,100遍老婆,我错了。以及一遍任务结束,因此被老婆发现用程序代写,所以还是没逃过睡大街的命运。
break语句
用来终止整个循环,以第一个栗子为例,我们需要对程序做出更改,要求便利python时便利到o就停止循环并输出前面遍历过的字符,即:
str = 'Python'
for s in str:
if s == 'o':
break
print(s)
输出结果:
P
y
t
h
continue语句
用来中止本次循环,还是这个栗子,我们依然要输出python,但是我看o这个字符不爽,想跳过它,于是就可以使用continue来完成:
str = 'Python'
for s in str:
if s == 'o':
continue
print(s)
输出结果:
P
y
t
h
n
该程序中当字符遍历到o时跳过了o,但是由于没遍历完,循环还在继续,于是继续遍历输出n。
(注意对比差异)
四、字符串
(由于字符串比较重要,知识点也多,我们单独拿出来说一下。)
4.1字符串基本操作
在上面已经提到,字符串是 Python 的一种数据类型,可以通过单引号 '
、双引号 "
、三引号 '''
或 """
来定义。
字符串由每一个字符组成,字符串可以进行相加,即拼接。也可以通过乘一个数字来复制这个字符串几次。也可以指定输出哪个字符。(s[]叫做列表,这个在后面会讲)例如:
s1 = 'Hello'
s2 = 'Python'
print('s1 + s2 -->', s1 + s2)
print('s1 * 2 -->', s1 * 2)
print('s1[0] -->', s1[0])
print('s1[0:2] -->',s1[0:2])
输出结果:
s1 + s2 --> HelloPython
s1 * 2 --> HelloHello
s1[0] --> H
s1[0:2] --> He
由于字符串需要用引号引出来,所以有的语句自带引号的会出现一些错误,这个时候就需要转义字符进行特殊处理。
举个栗子:'I'm a superman',由于I‘m的特殊性,我们在引号前面添加反斜杠\
就可以对引号进行转义,就是告诉 Python 把它作为普通文本对待。即: 'I\'m a superman'。
那有个问题,如果字符串结尾是反斜杠呢?实际上,这样python就会对最后的引号进行转义,这违背我们的需求,所以,python结尾是能有反斜杠的,对于这种情况,我们可以采用拼接字符串的方法。即:
我想表达C:\Program Files\Python 3.7\字符串,但’C:\Program Files\Python 3.7\‘是不对的,所以我们就需要写为:str1 = 'C:\Program Files\Python 3.7' '\\',python会自动将其进行拼接,从而可以输出正确的结果。
4.2 字符串常用方法
split() 方法可以实现将一个字符串按照指定的分隔符切分成多个子串
str1 = "abcdefg"
#分割字符串,将分割后内容保存在列表中(列表下一个部分会讲)
list1 = str.split(c)
#输出结果
['ab','defg']
find() 方法用于检索字符串中是否包含目标字符串,如果包含,则返回第一次出现该字符串的索引;反之,则返回 -1。
str = "www.csdn.com"
str.find('.')
#输出结果
3
index() 方法也可以和find()方法一样用于检索是否包含指定的字符串,不同之处在于,当指定的字符串不存在时,index() 方法会抛出异常。
title() 方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后,此方法会返回转换得到的字符串。如果字符串中没有需要被转换的字符,此方法会将字符串原封不动地返回。
str = "www.csdn.com"
str.title()
#输出结果
"Www.Csdn.Com"
lower() 方法用于将字符串中的所有大写字母转换为小写字母,转换完成后,该方法会返回新得到的字符串。如果字符串中原本就都是小写字母,则该方法会返回原字符串。
str = I LOVE XIAOWANG
str.lower()
#输出结果
i love xiaowang
前面我们已经介绍了部分常用字符串提供的方法,但这远远不是它的全部方法。其他的方法,可通过本节介绍的 dir() 查看。
dir() 函数用来列出某个类或者某个模块中的全部内容,包括变量、方法、函数和类等
dir(str)
#输出结果
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
'__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__',
'__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize',
'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find',
'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal',
'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace',
'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans',
'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit',
'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title',
'translate', 'upper', 'zfill']
五、列表和元组
Python 中没有数组,而是加入了功能更强大的列表(list),列表可以存储任何类型的数据,同一个列表中的数据类型还可以不同
5.1 列表
5.1.1列表创建访问
列表索引是从0开始,也就是l[0]代表列表的第一个值
l = [100, 1.9, 'Python']
#访问列表第一个值
print(l[0])
#从列表第二个值开始一直访问到最后一个
print(l[1:])
#输出结果
100
[1.9, 'Python']
5.1.2列表更新与删除
l = [100, 1.9, 'Python']
# 修改列表中的第二个元素
l[1] = 5
# 向列表中添加新的元素
l.append('Hello')
print(l[1])
#输出整个列表
print(l)
#输出结果
5
[100, 5, 'Python', 'Hello']
#采用del来删除列表指定值
del l[1]
print(l)
#输出结果
[100, 'Python', 'Hello']
5.1.3列表常用方法
count()
统计列表中某个元素出现的次数,使用如下所示:
l = ['d', 'b', 'a', 'f', 'd']
print(l.count('d'))
输出结果:
2
② index()
查找某个元素在列表中首次出现的位置(即索引),使用如下所示:
l = ['d', 'b', 'a', 'f', 'd']
print(l.index('d'))
输出结果:
0
③ remove()
移除列表中某个值的首次匹配项,使用如下所示:
l = ['d', 'b', 'a', 'f', 'd']
l.remove('d')
print(l)
输出结果:
['b', 'a', 'f', 'd']
④ sort()
对列表中元素进行排序,使用如下所示:
l = ['d', 'b', 'a', 'f', 'd']
l.sort()
print(l)
输出结果:
['a', 'b', 'd', 'd', 'f']
⑤ copy()
复制列表,使用如下所示:
l = ['d', 'b', 'a', 'f', 'd']
lc = l.copy()
print(lc)
输出结果:
['d', 'b', 'a', 'f', 'd']
5.2 元组
元组(tuple)与列表类似,但元组是不可变的,可简单将其看作是不可变的列表,元组常用于保存不可修改的内容。
5.2.1 元组的创建访问
t = [100, 1.9, 'Python']
#访问列表第一个值
print(t[0])
#从列表第二个值开始一直访问到最后一个
print(t[1:])
#输出结果
100
[1.9, 'Python']
5.2.2元组的修改和删除
#更新
t = (100, 1.9, 'Python')
t = (100, 1.9, 'Python', 'Hello')
print(t)
#输出结果
(100, 1.9, 'Python', 'Hello')
#删除
t = (1024, 0.5, 'Python')
del t
print(t)
#输出(把整个元组删除了,所以就会报错)
NameError: name 't' is not defined
5.2.3元组常用方法
len()
计算元组中元素个数,使用如下所示:
t = (1024, 0.5, 'Python')
print(len(t))
输出结果:
3
② max() 和 min()
返回元组中元素最大、最小值,使用如下所示:
t = ('d', 'b', 'a', 'f', 'd')
print(max(t))
print(min(t))
输出结果:
f
a
③ tuple()
将列表转换为元组,使用如下所示:
l = ['d', 'b', 'a', 'f', 'd']
t = tuple(l)
print(t)
输出结果:
('d', 'b', 'a', 'f', 'd')
六、字典与集合
6.1字典
这里的字典不是我们小时候查字用的新华字典,但是和字典神似。地点(dict)是 Python 的数据结构,它的内容是以键-值(key-value)的方式存在的。如同新华字典是拼音-汉字的形式存在。
dict 拥有良好的查询速度,dict 中的值可以是任意 Python 对象,多次对一个 key 赋 value,后面的 value 会把前面的 value 覆盖。
字典的内容在花括号 {}
内,键-值(key-value)之间用冒号 :
分隔,键值对之间用逗号 ,
分隔,比如创建字典 d。
#创建字典
d = {'name':'小帅', 'age':'18'}
# 访问字典
# 方式一
l = [('name', '小帅'), ('age', 18)]
d = dict(l)
# 方式二
d = dict(name='小帅', age='18')
# 空字典
d = dict()
d = {}
#访问字典并输出字典中所有的姓名
d = dict(name='小帅', age='18')
d['name']
#输出结果
'小帅'
#也可以使用get方法来访问
d.get('name')
#输出结果
小帅
#修改
d['name'] = '小明'
d['name']
#输出结果(此时字典:d = {'name':'小明', 'age':'18'})
小明
#删除字典,也是使用del关键字
del d
print(d)
#输出结果
NameError: name 'd' is not defined
6.2集合
Python 中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。相当于是只把字典中的值存储起来。
集合使用花括号 {} 或者 set() 函数创建,如果创建空集合只能使用 set() 函数。
#创建
s = {'a', 'b', 'c'}
# 使用 set 函数
s = set(['a', 'b', 'c'])
# 空集合
s = set()
#集合中重复的元素会被自动过滤掉
s = {'a', 'a', 'b', 'c', 'c'}
s
#输出结果
{'a', 'c', 'b'}
6.2.1添加元素
set 集合中添加元素,可以使用 set 类型提供的 add() 方法实现,使用 add() 方法添加的元素,只能是数字、字符串、元组或者布尔类型(True 和 False)值,不能添加列表、字典、集合这类可变的数据。
a = {1,2,3}
a.add((1,2))
print(a)
#输出结果
{(1, 2), 1, 2, 3}
如果添加集合中已经存在的元素,则集合不进行任何操作。
6.2.2其他集合操作
#删除元素使用 remove 方法
s = {'a', 'b', 'c'}
s.remove('c')
s
#输出结果
{'a', 'b'}
清空集合使用 clear 方法
s = {'a', 'b', 'c'}
s.clear()
s
#输出结果
set()
获取集合的长度,同样使用 len 方法
s = {'a', 'b', 'c'}
len(s)
#输出结果
3