01.Python-变量、数据类型、运算符

风格指南

注释

注释解释器不会去执行,直接跳过

注释的写法

  • 行注释:以井号(#)开头 可以单独行,也可以在代码后面
  • 块注释:以三个单引号或者双引号开头并结束,中间可以包裹多行内容
# 这里是行注释,机器不会运行
print("hello word")
"""
这里是块注释
可以写很多行
...
"""

注释原则

  • 复杂代码注释
  • 注释不是越多越好
  • 建立有效的沟通

变量

变量就是一个可以重复使用的量

变量的命名

  • 变量名只能包含字母、数字和下划线,变量名字可以使用字母或者下划线开头,但不可以使用数字开头。如 1_message
  • 变量名不能包含空格
  • 变量名不能使用Python关键字、保留字、函数,如print
# 查看关键字方法
import  keyword  #引入关键子模块
# 打印关键字
print(keyword.kwlist)
  • 变量名应该简短且具有描述性
  • 不建议以下划线开头命名变量,因为以下划线开头的变量具有特殊含义
  • 大小写敏感,age 和 Age不一样
  • 可以使用中文,但强烈不建议使用
  • 推荐使用posix命名规则

posix命名规则

  • 多个单词使用下划线链接
  • 单词全部小写

变量的赋值

常用赋值方法

# 将10 赋值给size
size = 10
print(size)
>>>10

给多个变量赋同一个值

size1 = size2 = size3 = 10
print(size1)
>>>10
print(size2)
>>>10
print(size3)
>>>10

一行代码给多个变量赋值

size1, size2, size3 = 10, 12, 16
print(size1)
>>>10
print(size2)
>>>12
print(size3)
>>>16

变量交换

  • 普通方式
a = 10
b = 20
c = a  # 讲a变量赋值给c, 此时c的值为10
a = b  # 讲b变量复制给a, 此时a的值为20
b = c  # 讲c变量复制给b, 此时b的值为10

通过中间变量c进行变量的交换

  • 利用python定义变量的语法实现
a, b = b, a

数据类型

  • 六种标准数据类型
    • 数字 Number
    • 字符串 Str
    • 列表 List
    • 元祖 tuper
    • 字典 dict
    • 集合 set
    • 布尔值 bool
    • None

使用字符串时注意引号匹配

数字类型Number

整数 int

没有小数部分
包含正数、复数、0

浮点数 float

带小数点的数字称为浮点数

科学计数法

科学计数法在python中的表示

a = 10e2
print(a)
>>>1000.0

复数

复数在python中的表示

python中,用j/J表示复数的虚部
a = 4+3j
b = 3j
c = (3j)

字符串 str

字符串是一系列的字符,在Python中,用引号括起来的是字符串,可以使单引号,也可以是双引号。三引号可以表示多行

字符串的表示

name =  'zhangsan'
name = "zhangsan"
name = """
zhang
san
"""

列表 list

通常用来记录一些列数据

列表的创建

  • 使用一对方括号来表示空列表: [] 或者是list()
  • 使用方括号,其中的项以逗号分隔: [a], [a, b, c]
  • 其中的项成为元素
  • 元素可以是其他的任意类型
>>> l1 = []
>>> print(l1, type(l1))
[] <class 'list'>
>>> l2 = list()
>>> print(l2, type(l2))
[] <class 'list'>
>>> l3 = [1, 2, 3]
>>> print(l3, type(l3))
[1, 2, 3] <class 'list'>

元组 tuple

元组是不可变序列,与列表相似,区别是其中的元素不可改变

元祖的创建

  • 使用一对圆括号来表示空元组: ()
  • 使用一个后缀的逗号来表示单元组: a, 或 (a,)
  • 使用以逗号分隔的多个项: a, b, c or (a, b, c)
  • 使用内置的 tuple(): tuple() 或 tuple(iterable)

元祖只有一个元素时,最后要加一个逗号。

>>> t1 = ()
>>> t2 = 1,
>>> t3 = (1,)
>>> t4 = 1, 2, 3
>>> t5 = tuple()
>>> 
>>> print(type(t1))
<class 'tuple'> <class 'tuple'> <class 'tuple'> <class 'tuple'> <class 'tuple'>

字典 dict

  • 字典是用于储存一组或多组的数据
  • 字典是键值对形式
  • 键的名字不能重复,否则会覆盖
  • 键必须是字符串或者数字,值可以是任何类型

字典的创建

>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True

布尔值

  • 布尔值用来表示真假
  • 只有两个值 Ture/False
  • 在Python中,布尔值可以当做数字使用:Ture = 1, False = 0

None

  • 表示没有,返回一个空

数据类型的检测

使用type()函数进行检测

>>> a = 10
>>> b = True
>>> c = 'hello world'
>>> d = 1.01
>>> print(a, type(a))
10 <class 'int'>
>>> print(b, type(b))
True <class 'bool'>
>>> print(c, type(c))
hello world <class 'str'>
>>> print(d, type(d))
1.01 <class 'float'>

数据类型分类

是否可变

是否可变指内容创建后,内容是否可变

  • 可变数据类型
    • 列表
    • 字典
    • 集合
  • 不可变数据类型
    • 字符串
    • 数字
    • 元组

是否容器类

容器类型数据指此类型数据可以容纳其他数据

  • 容器类型数据
    • 字符串
    • 列表
    • 元组
    • 集合
    • 字典
  • 非容器类型数据
    • 数字
    • 布尔值

数据类型的转换

数据类型转换指的是讲一种数据类型转换为另一种数据类型,目的是解决不同数据类型之间的运算问题。

自动类型转换

  • 数字与布尔值运算会将布尔值自动转为数字
>>> n = 1
>>> b = True
>>> print(n+b)
2
  • 逻辑判断时数字会自动转为布尔值
  • 整数与浮点数运算时,整数会转为浮点数

手动类型转换

通过特定的函数,可以将一种数据类型转为另一种数据类型

函数 转换后类型 可转换类型
str() 字符串 所有类型都可以
int() 整数 纯数字字符串、布尔值、浮点数,其他容器类类型不能转
float() 浮点数 纯数字字符串、布尔值、整数
bool() 布尔值 所有类型都可以
list() 列表 字符串、数组、字典(只保留键)集合
tuple() 元组 数字类型和非容器类型不能转换、容器类型可以
dict() 字典 只有特定的列表和元组可以转,要求列表中的每个元素都是一个只包含俩个元素的列表,其中第一个元素转为字典的键,第二个为值 [[1, a], [2, b], [3, c]],元组要求类似。
set() 集合 非容器类不可以转换,容器类转换后无序、去重、字典只保留键。

使用函数转换类型

  • a 为数字类型
  • b经过str()函数将a转为字符串类型
  • c经过int()函数将b转回数字类型
>>> a = 1
>>> b = str(a)
>>> c = int(b)
>>> print(b, type(b))
1 <class 'str'>
>>> print(c, type(c))
1 <class 'int'>

运算符

运算符的分类

  • 算术运算符
  • 比较(关系)运算符
  • 赋值运算符
  • 逻辑运算符
  • 位运算符
  • 身份运算符

算术运算符

假设变量a = 1, b = 2

运算符 描述 实例
+ 两个对象相加 a + b >>>3
- 两个对象相减 a - b >>>-1
* 两个对象相乘或者是返回若干次的字符串 a*b >>>2
/ 除法运算 b/a >>>2
// 地板除,取整 9//2 >>>4
% 取模(取余) 9%2 >>>1
** 幂运算 a**b >>>1

注意:Python2.x 里,整数除整数,只能得出整数。如果要得到小数部分,把其中一个数改成浮点数即可。

>>> 1/2
0
>>> 1.0/2
0.5
>>> 1/float(2)
0.5

比较运算符

假设变量a = 1, b = 2

运算符 描述 实例
== 比较连个对象是否相等 a == b >>>False
!= 比较两个对象是否不相等 a != b >>>True
> 比较x是否大于y a > b >>>False
< 比较x是否小于y a < b >>> True
>= 返回x是否大于等于y a >= b >>>Flase
<= 返回x是否小于等于y a <= b >>>True

赋值运算符

假设变量a = 1, b = 2

运算符 描述 实例
= 简单的赋值运算 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

逻辑运算符

运算符 描述 实例
and "与"运算,x、y全部为True返回True,否则返回Flase True and False >>>False
or "或"运算,x、y全部为Flase返回False,否则返回True True or False >>>True
not "非"运算,取反 not False >>>True

逻辑运算存在短路问题,程序一旦确定逻辑运算结果不在进行后面的代码

# 短路案例,由于提前确定了c的值为True,程序不在往下运行,不在打印"b"
def a():
    print("a")
    return True

def b():
    print("b")
    return True

c = a() or b()
print(c)
>>> a
>>> True

成员运算符

检测一个成员是否在某个实例里面

运算符 描述 实例
in 如果在序列中找到指定的值返回True,否则返回False 1 in [1, 2, 3] >>>True
not in 如果在序列中没有找到制定的值返回True,否则返回False 1 not in [1, 2, 3] >>>False

身份运算符

运算符 描述 实例
is 判断两个变量是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 False
is not 判断两个变量是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。

可以简单理解为他们指向的内存地址是否相同
is 与 == 区别:
is 用于判断两个变量引用对象是否为同一个(同一块内存空间), == 用于判断引用变量的值是否相等。

位运算符

按位运算符是把数字看作二进制来进行计算的

二进制转换

使用bin()函数可以讲一个数字转换为二进制数字

>>> print(bin(1), '-', bin(2), '-', bin(3))
0b1 - 0b10 - 0b11

使用int()函数可以讲一个二进制转为十进制

>>> print(int(0b1), '-', int(0b10), '-', int(0b11))
1 - 2 - 3

二进制位运算

下表中变量 a 为 60,b 为 13,二进制格式如下:

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

推荐阅读更多精彩内容