什么是变量

  • 程序=数据结构+算法

  • 变量就是可以重复使用的一个量,或者一个代号,我们可以把变量理解成是计算机中的一个存储单元,用来专门 存放数据,但我们需要对这个单元进行命名,这就是变量的名称,同样,变量存储的数据的类型,也被叫做变量的类型

变量声明

变量在使用之前必须声明,即告诉系统开辟出内存来,并把相应内容放入对应内存。
变量声明一般有三种方式:

  • var_name = var_value
  • var1 = var2 = var3 = var_value
  • var1, var2, var3 = v1, v2, v3
# 定义变量gae,把18放入变量age中
age = 18
print(age)
print(18)

# 给age1, age2, age3 放入同样一个内容或值
age1 = age2 = age3 = 18
print(age1)
print(age2)
print(age3)

# 一行内给多个变量赋值
age4, age5, age6 = 12, 21, 45
print(age4)
print(age5)
print(age6)

结果如下:

18
18
18
18
18
12
21
45 > Python中交换两个变量可以使用 `a, b = b, a` 来进行交换 

变量命名的规则

  • 大小写敏感, 即同样内容,大写和小写不是一个
  • 变量命名可以包含数字,大小写字母,下划线或者更多,但是我们不推荐除了前三种内容之外的符号
  • 数字不可以打头
    • 4man, 5for 是不可以的
    • man4, for5是可以的
  • 一般在python中,以下划线开头的内容具有特殊含义,不建议使用
    • 比如 _age, _name,理论可以,但强烈不推荐,包括但不限于一个下划线开头和两个连续下划线开头
  • 大小写不一样,俗称大小写敏感
    • ForMan 跟 forMan不是一个变量名称
  • 不能使用关键字, 即系统自己使用的变量或者命令
  • 系统中定义的有特定名称的功能或者具有通用含义的单词
    • 此条没有具体规定,常用后会了解
    • 例如 print, help, len

推荐命名方式

  • 使用具有固定含义的英文单词或者缩写, srv=server skt=socket,一般以posix命名规则为主
  • 驼峰命名法
    • 名称以单词自动连接,且每个单词首字母大写
      • 大驼峰,每个单词第一个字母均大写
        • 在Python中给类命名使用此法
        • MyFirstLove, IntOne
      • 小驼峰,类似大驼峰,但第一个字母小写
        • 在Python中一般给普通变量或者函数命名
        • myFirstLove, intOne
      • linux系列常用的命名规范
        • 多个单词用下划线链接
        • 单词全部小写
        • my_first_love, int_one
  • python中,变量命名使用linux中变量习惯写法,类命名使用大驼峰

Python目前所有关键字查看方法

通过以下方法可以查看Python中所有的关键字

# 查看关键字的方法
import keyword #引入关键字模块
# 打印出系统全部关键字
print(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']

变量类型

  • 严格意义上讲,Python只有一个类型
  • 宽泛的讲,Python标准数据一共六种
    • 数字类型Number
    • 字符串类型str
    • 列表list
    • 元组tuple
    • 字典 Dictionary
    • 集合 set
  • None类型,也是一种特殊的类型
    • 表示什么都没有
    • 如果函数没有返回值,可以返回 None
    • 用来占位置
    • 用来解除变量绑定
# None 是一个独特的类型,表示什么都没有
a = None
print(a)
None

变量类型的查看

如何判断一个变量的类型,一般有两种方式:

  • type: 可以直接查看任何一个变量的类型
  • isinstance: 判断一个变量是否是某个类型,如果被判断的类型是变量的类型的子类型,同样会返回True
a = 5.0 + 1j
# 打印出变量a的类型
print(type(a))

#判断a是否是complex类型,此处如果complex有子类型,也会返回True
isinstance(a, complex)

上述代码得到的结果是:

<class 'complex'>

True

Number数字类型

  • 数字类型没有大小限制
  • 基本不像C语言或者Java语言那种考虑数字的长度
  • 数字类型包括其他语言的所有数字相关类型,比如:
    • 整数
    • 小数/浮点数
    • 复数

整数

  • 没有小数部分,表示个数的数字
  • 包括: 自然数,0,负自然数
  • 整数是分进制,常见进制有:
    • 二进制
      • 计算机常用
      • 是计算机唯一能直接理解的数字
      • 表示为0b开头的0,1代码
      • 例如 0b01101, 0b10001
    • 八进制
      • 不常用
      • 以0o开头的包含0-7的数字
    • 十六进制
      • 逢16进1
      • 其实是每四位二进制表示一位十六进制数
      • 包含0-9, a-f
      • 数字上以0x开头表示
    • 十进制
      • 18, 89, 178
age = 18
print(18)

age = 0b10010
print(age)

age = 0o102
print(age)

age = 0xff #十六进制ff表示二进制的1111 1111
print(age)

18
18
66
255

各进制数字直接的转换

Python提供了相应的转换函数,可以把数字转换成想要的进制,此类函数包括:

  • int: 转换成十进制整数
  • bin:转换成二进制数
  • oct:转换成八进制
  • hex:转换成十六进制
# 不同进制之间的转换
a = 100
b = 0b10010
c = 0o100
d = 0xff
print(a,b,c,d)

# 二八,十六进制转十进制
print("二转10:", int(b))
print("八转10:", int(c))
print("十六转10:", int(d))

# 转二进制
print("八转2:", bin(b))
print("十转2:", bin(a))
print("十六转2:", bin(d))

# 转八进制用oct()
# 转十六进制用hex()

打印结果如下:

100 18 64 255
二转10: 18
八转10: 64
十六转10: 255
八转2: 0b10010
十转2: 0b1100100
十六转2: 0b11111111

浮点数

  • 小数在计算机里称为浮点数
  • 计算机里边表示浮点数可以有条件省略,比如以下都表示小数:
    • 3.1415
    • 3.: 3.0的省略
    • 0.5
    • .5 : 0.5的省略
  • 科学计数法
    • 定义跟数学定义一致
    • 写法是用e/E后面跟整数表示10的指数
    • 176.23 == 1.7634e2
    • 0.876 == 8.76e-1
height = 156.34
print(height)

shili = .2
print(shili)

shili = 1.234E3  #使用科学计数法
print(shili) 

显示结果如下:

156.34
0.2
1234.0

复数complex

  • 定义同数学定义一致,即表示一个由实部和虚部构成的数字
  • 虚部用j/J表示, 例如:
    • 5+3j
    • 3j
    • (3j)
a = 1 + 4J
print(a)

# 复数相加
b = a + 4j
print(b)
(1+4j)
(1+8j)

布尔值

  • 表示真假的值
  • 只有两个值, True/False, 这是两个值,不需要引号,不是字符串
a = True
print(a)

b = False
print(b)
True
False
  • 布尔值可以跟数字直接操作
    • 此时True被看做数字1, False被看做数字0
#布尔值操作
age = 18 + True
print(age)

a = 18 * False
print(a)

输出结果如下:

19
0
  • 在需要逻辑值的地方,我们也可以使用数字来表示
    • 此时数字0被当做False
    • 其余的,包括负数,被当做True
if -10:
    print("负数是True")
    
if not 0:
    print("0是False")

输出结果如下:

负数是True
0是False 

数据类型转换

  • 什么是数据类型转换?
    • 把一个数据类型转换为另一个数据类型,例如字符串转为数字
  • 为什么需要数据类型转换?
    • 因为不同的数据类型之间不能运算
  • 数据类型转换的形式?
    • 自动类型转换
    • 强制类型转换

自动类型转换

# 自动类型转换
# 当两个不同的值进行运算时,结果会向更高的精度进行计算
# True ==> 整型 ==> 浮点 ==> 复数
a = 123
b = True  # 在和数字运算时 True转为数字1,False转为数字 0
# print(a+b)
# print(12.5+22)
# print(True+3.14)

强制类型转换

python中的每个数据类型都有对应的方法,可以对数据类型进行转换

  • str() 可以把所有的其它数据类型转换为字符串类型
  • int() 字符串转数字类型时,如果字符串中时纯数字,可以转换
    • 其它容器类型不能转为数字int类型
  • float() 浮点类型的转换和int类型一样,不过转换的结果是浮点类型
  • bool() 可以把其它类型转换布尔类型的True或False
    • 总结,哪些情况转bool的结果是 False
    • '',0,0.0,False,[],{},(),set()
  • list() 列表
    • 数字类型是 非容器类型,不能转换为列表
    • 字符串 转换为列表时 会把字符串中的每一个字符当做列表的元素
    • 集合 可以转换为 list列表类型
    • 元组 可以转换为 list列表类型
    • 字典 可以转换为 list列表类型,只保留了字典中的键
  • tuple() 元组
    • 数字类型非容器类型,不能转换为元组
    • 其它容器类型的数据进行转换时,和列表一样
  • set() 集合
    • 数字类型 非容器类型,不能转换为集合
    • 字符串,列表,元组可以转为 集合结果是无序的
    • 字典转换为集合时,只保留了字典的键 key
  • dict() 字典
    • 数字类型 非容器类型,不能转换为字典
    • 字符串不能直接转换为 字典
    • 列表可以转换为字典,要求是一个二级列表,并且每个二级元素只能有两个值
    • 元组可以转换为字典,要求是一个二级元组,并且每个二级元素只能有两个值

Python的二进制

python并没有二进制的类型,数字可以转换成二进制数字,但在python内被当做 byte类型或者字符串类型处理。

为了弥补二进制的处理带来的问题,python有个单独的模块struct用来单独处理二进制 相关的操作。