1、标识符
标识符是程序中某一元素(变量、关键字、函数、类、模块、对象)名字集合,包含保留字。说通俗点,标识符就是以后给我们写的每个代码所起的名字,就好比我们每个人生下来都要起名字。除了Python保留字的名字是固定的,其它元素都可以根据标识符的命名规则进行命名。
合法的 Python 标识符,需要遵守如下规定:
-第一个字符必须是字母或下划线(_)
-剩下的字符可以是字母和数字或下划线
-大小写敏感
-不能是 Python 的保留字,例如 def、class 就不能作为标识符
Hello
hello
_max
_Min
Apple10
apple_10
V_3_V
CON2_5
_Test_3
以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 foo 代表 Python 里特殊方法专用的标识,如 init() 代表类的构造函数。
在 Python 中的保留字。这些保留字不能用作常数或变数,或任何其他标识符名称。
查看保留字可以通过以下代码查看。
import keyword
print("keyword:",keyword.kwlist)
运行代码:
keyword: ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', '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、变量
变量是标识符的一种,是一个用于保存值的占位符。可以通过变量名获得对值的引用,可以是任意的数据类型。变量命名时尽量体现出值的数据类型。如命名 count、length 和 size 表明数据类型是数字,命名 name、title 和 message 表明数据类型是字符串,单个字符命名的变量诸如 i、j、k 通常在循环中使用。
Python 中的变量不需要声明,每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型(如整型,字符串,数组等)。
等号 = 是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
变量赋值
a = 123 # a 是整数
a = 'abc' # a 是字符串
多个变量赋值
a = b = c = 1
以上实例,创建一个整型对象,值为 1,从后向前赋值,三个变量被赋予相同的数值。
a, b, c = 1, 2, "neo"
以上实例,两个整型对象 1 和 2 的分配给变量 a 和 b,字符串对象 "neo" 分配给变量 c。
常量
所谓常量就是不能变的变量,比如常用的数学常数 π 就是一个常量。在 Python 中,通常用全部大写的变量名表示常量:
PI=3.14
事实上 PI 仍然是个变量,Python 根本无法保证 PI 不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改,语法也不会报错。
3、数据类型
Python3 中有六个标准的数据类型:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)。
Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
Number(数字)
Python 支持三种不同的数值类型:
整型(Int) - 通常被称为是整型或整数,是正或负整数,不带小数点。Python3 整型是没有限制大小的,可以当作 Long 类型使用,所以 Python3 没有 Python2 的 Long 类型。
布尔(bool)- bool 类型来表示真(对)或假(错),并分别用 Ture(真或对)或 False(假或错)来表示。 bool 值可以当作整数来代替,即 True 代表整数1,False 代表整数 0,并可以参与运算,但在项目开发中不能这样用。
浮点型(float) - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 100 = 250)
复数( (complex)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
counter = 100 # 整型变量
miles = 1000.0 # 浮点型变量
name = "test" # 字符串
print (counter)
print (miles)
print (name)
如果改变了数字数据类型的值,将重新分配内存空间。
数字类型转换
--int(x) 将x转换为一个整数。
--.float(x) 将x转换到一个浮点数。
--complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
--complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。额外说明
print (5 + 4) # 加法 输出 9
print (4.3 - 2) # 减法 输出 2.3
print (3 * 7) # 乘法 输出 21
print (2 / 4) # 除法,得到一个浮点数 输出 0.5
print (2 // 4) # 除法,得到一个整数 输出 0
print (17 % 3) # 取余 输出 2
print (2 ** 5) # 乘方 输出 32
String(字符串)
创建字符串可以使用单引号、双引号、三单引号和三双引号,其中三引号可以多行定义字符串,Python 不支持单字符类型,单字符也在Python也是作为一个字符串使用。
s = '学习Python'
# 切片
s[0], s[-1], s[3:], s[::-1] # '优', 'n', 'ython', 'nohtyP的习学'
# 替换,还可以使用正则表达式替换
s.replace('Python', 'Java') # '学习Java'
# 查找,find()、index()、rfind()、rindex()
s.find('P') # 3, 返回第一次出现的子串的下标
s.find('h', 2) # 6, 设定下标2开始查找
s.find('23333') # -1, 查找不到返回-1
s.index('y') # 4, 返回第一次出现的子串的下标
s.index('P') # 不同与find(), 查找不到会抛出异常
# 转大小写, upper()、lower()、swapcase()、capitalize()、istitle()、isupper()、islower()
s.upper() # '学习PYTHON'
s.swapcase() # '学习pYTHON', 大小写互换
s.istitle() # True
s.islower() # False
# 去空格,strip()、lstrip()、rstrip()
# 格式化
s1 = '%s %s' % ('Windrivder', 21) # 'Windrivder 21'
s2 = '{}, {}'.format(21, 'Windridver') # 推荐使用format格式化字符串
s3 = '{0}, {1}, {0}'.format('Windrivder', 21)
s4 = '{name}: {age}'.format(age=21, name='Windrivder')
# 连接与分割,使用 + 连接字符串,每次操作会重新计算、开辟、释放内存,效率很低,所以推荐使用join
l = ['2017', '03', '29', '22:00']
s5 = '-'.join(l) # '2017-03-29-22:00'
s6 = s5.split('-') # ['2017', '03', '29', '22:00']
需要注意的是字符串编码,所有的 Python 字符串都是 Unicode 字符串,当需要将文件保存到外设或进行网络传输时,就要进行编码转换,将字符转换为字节,以提高效率。
# encode 将字符转换为字节
str = '学习Python'
print (str.encode()) # 默认编码是 UTF-8 输出:b'\xe5\xad\xa6\xe4\xb9\xa0Python'
print (str.encode('gbk')) # 输出 b'\xd1\xa7\xcf\xb0Python'
# decode 将字节转换为字符
print (str.encode().decode('utf8')) # 输出 '学习Python'
print (str.encode('gbk').decode('gbk')) # 输出 '学习Python'
List(列表)
列表是写在方括号 [] 之间、用逗号分隔开的元素列表,列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套),列表中的元素是可以改变。
列表用 [ ] 标识,是 python 最通用的复合数据类型。
列表中值的切割也可以用到变量 [头下标:尾下标] ,就可以截取相应的列表,从左到右索引默认 0 开始,从右到左索引默认 -1 开始,下标可以为空表示取到头或尾。
列表
Weekday = ['Monday','Tuesday','Wednesday','Thursday','Friday']
print(Weekday[0]) # 输出 Monday
#list 搜索
print(Weekday.index("Wednesday"))
#list 增加元素
Weekday.append("new")
print(Weekday)
# list 删除
Weekday.remove("Thursday")
print(Weekday)
Tuple(元组)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开,组中的元素类型也可以不相同。
letters = ('a','b','c','d','e','f','g')
print(letters[0]) # 输出 'a'
print(letters[0:3]) # 输出一组 ('a', 'b', 'c')
Sets(集合)
集合(set)是一个无序不重复元素的序列,使用大括号 {} 或者 set() 函数创建集合,集合不能被切片也不能被索引,除了做集合运算之外,集合元素可以被添加还有删除。
注意:创建一个空集合必须用 set() 而不是 {} ,因为 {} 是用来创建一个空字典。
a_set = {1,2,3,4}
# 添加
a_set.add(5)
print(a_set) # 输出{1, 2, 3, 4, 5}
# 删除
a_set.discard(5)
print(a_set) # 输出{1, 2, 3, 4}
Dictionary(字典)
字典是一种映射类型,它的元素是键值对,字典的关键字必须为不可变类型,且不能重复。创建空字典使用 {} 。
Logo_code = {
'BIDU':'Baidu',
'SINA':'Sina',
'YOKU':'Youku'
}
print(Logo_code)
# 输出{'BIDU': 'Baidu', 'YOKU': 'Youku', 'SINA': 'Sina'}
print (Logo_code['SINA']) # 输出键为 'one' 的值
print (Logo_code.keys()) # 输出所有键
print (Logo_code.values()) # 输出所有值
print (len(Logo_code)) # 输出字段长度
4、运算符
运算符主要包括算术运算符、比较运算符、赋值运算符、位运算符、逻辑运算符、成员运算符和身份运算符。
算术运算符
运算符 | 含义 | 描述 | 实例 |
---|---|---|---|
+ | 加 | 两个对象相加 | a + b 输出结果 31 |
- | 减 | 得到负数或是一个数减去另一个数 | a - b 输出结果 -11 |
* | 乘 | 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 210 |
/ | 除 | x 除以 y | b / a 输出结果 2.1 |
% | 取模 | 返回除法的余数 | b % a 输出结果 1 |
** | 幂 | 返回 x 的 y 次幂 | a ** b 为10的21次方 |
// | 取整除 | 往小的方向取整数 | b // a 输出结果 2 |
比较运算符
运算符 | 含义 | 描述 | 实例 |
---|---|---|---|
== | 等于 | 比较对象是否相等 | a == b 返回 False |
!= | 不等于 | 比较两个对象是否不相等 | a != b 返回 True |
> | 大于 | 返回 x 是否大于 y | a > b 返回 False |
< | 小于 | 返回 x 是否小于 y | a < b 返回 True |
>= | 大于等于 | 返回 x 是否大于等于 y | a >= b 返回 False |
<= | 小于等于 | 返回 x 是否小于等于 y | a <= b 返回 False |
赋值运算符
运算符 | 含义 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c% a |
**= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
位运算符
位运算就是直接对整数在内存中对应的二进制位进行操作
#a 为 60,b 为 13
#内存二进制值为
#a = 0011 1100
#b = 0000 1101
运算符 | 含义 | 描述 | 实例 |
---|---|---|---|
& | 按位与运算符 | 参与运算的两个值,如果两个相应位都为 1,则该位的结果为 1,否则为 0 | (a & b) 输出结果 12 ,二进制解释:0000 1100 |
| | 按位或运算符 | 只要对应的二个二进位有一个为 1 时,结果位就为 1 | (a |b) 输出结果 61 ,二进制解释: 0011 1101 |
^ | 按位异或运算符 | 当两对应的二进位相异时,结果为 1 | (a ^ b) 输出结果 49 ,二进制解释:0011 0001 |
~ | 按位取反运算符 | 对数据的每个二进制位取反,即把 1 变为 0,把 0 变为 1。~x 类似于 -x-1 | (~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。 |
<< | 左移动运算符 | 运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0 | a << 2 输出结果 240 ,二进制解释: 1111 0000 |
>> | 右移动运算符 | 把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数 | a >> 2 输出结果 15 ,二进制解释: 0000 1111 |
逻辑运算符
运算符 | 含义 | 逻辑表达式 | 描述 |
---|---|---|---|
and | 布尔“与” | x and y | 同真为真,一假则假 |
or | 布尔“或” | x or y | 同假才假,一真即真 |
not | 布尔“非” | x not y | 非真即假,非假即真 |
Python 也把任意的空数据结构视为假,把任何非空数据结构视为真。真和假的概念是 Python 中每个对象的固有属性,一般来说:① 数字如果非零,则为真;② 其他对象如果非空,则为真。Python 还有一个特殊对象:None,它总被认为是假。
成员运算符
运算符 | 描述 |
---|---|
in | 如果在指定的序列中找到值返回 True,否则返回 False |
not in | 如果在指定的序列中没有找到值返回 True,否则返回 False |
a = 1
b = 2
list = [2, 3, 4, 5]
if a in list:
print("a在列表中")
else:
print("a不在列表中") #输出:a不在列表中
if b not in list:
print("b不在列表中")
else:
print("b在列表中") #输出:b在列表中
身份运算符
份运算符是 Python 用来判断的两个对象的存储单元是否相同的一种运算符号,身份运算符只有 is 和 is not 两个运算符,返回的结果都是 True 或者 False
运算符 | 描述 | 实例 |
---|---|---|
is | 判断两个标识符是不是引用自一个对象 | x is y, 如果引用的是同一个对象则返回 True,否则返回 False |
is not | 是判断两个标识符是不是引用自不同对象 | x is not y,如果引用的不是同一个对象则返回结果 True,否则返回 False |
···
a = [0, 1, 2] #变量 a 当中的元素都是数字
b = [1-1, 2-1, 3-1] #变量 b 当中的每个元素都是表达式
c = a
print(a) #结果:[0, 1, 2]
print(b) #结果:[0, 1, 2]
print(a is b) #结果:False
print(a is c) #结果:True
···
is 用于判断两个变量引用对象是否为同一个,== 用于判断引用变量的值是否相等。
运算符优先级
优先级 | 运算符 | 描述 | 结合性 |
---|---|---|---|
19 | () | 小括号 | 无 |
18 | x[i] | 索引运算符 | 左 |
17 | x.attribute | 属性访问 | 左 |
16 | ** | 乘方(指数) | 右(注意) |
15 | ~ | 按位取反 | 右(注意) |
14 | +, - | 正号,负号 | 右(注意) |
13 | *, /, %, // | 乘,除,取模,取整除 | 左 |
12 | +, - | 加号,减号 | 左 |
11 | >>, << | 右移动运算符,左移动运算符 | 左 |
10 | & | 按位与运算符 | 右(注意) |
9 | ^ | 按位异或运算符 | 左 |
8 | | | 按位或运算符 | 左 |
7 | ==, !=, <=, <, >, >= | 等于,不等于,小于等于,小于,大于等于,大于 | 左 |
6 | is, is not | 身份运算符 | 左 |
5 | in, not in | 成员运算符 | 左 |
4 | not | 逻辑运算符非 | 右(注意) |
3 | and | 逻辑运算符与 | 左 |
2 | or | 逻辑运算符或 | 左 |
1 | exp1, exp2 | 逗号运算符 | 左 |