Day02_变量及数据类型

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 逗号运算符
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容