Python中变量和数据类型的使用方法和避坑指南

 更新时间:2026年06月01日 08:15:09   作者:荣码  
这篇文章主要为大家详细介绍了Python中变量和数据类型的使用方法和避坑指南,主要包括5个基本数据类型和类型查看与转换,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

前言

上周面试,面试官问了一个问题:

a = [1, 2, 3]
b = a
b.append(4)
print(a)  # 输出什么?

我当时就愣了——a 居然也被改了,输出 [1, 2, 3, 4]

后来才知道,Python 的变量不是"盒子装数据",而是"标签贴数据"。ab 贴的是同一个列表,改一个另一个也变。这个坑不搞清楚,后面写代码全是 bug。

今天把变量和数据类型彻底讲明白,5个坑我都帮你踩过了。

一、变量:不是盒子,是标签

1.1 变量到底是什么?

很多教程说"变量是装数据的盒子",这个比喻在 Python 里不准确

Python 的变量更像是一张便利贴——贴在数据上,而不是装着数据:

name = "张三"      # 把"张三"这个便利贴贴在字符串上
age = 25           # 把"age"这个便利贴贴在整数25上
height = 1.75      # 贴在浮点数1.75上
is_student = True  # 贴在布尔值True上

关键区别:

# "盒子"思维:a和b是两个独立的盒子
a = [1, 2, 3]
b = a        # 把a的内容复制一份给b?
b.append(4)
print(a)     # [1, 2, 3, 4] ← a也被改了!
​
# "标签"思维:a和b贴在同一个列表上
a = [1, 2, 3]
b = a        # b也贴到了同一个[1,2,3]上
b.append(4)  # 改的是列表本身,a和b都能看到
print(a)     # [1, 2, 3, 4] ← 合理!

坑1:变量是引用不是拷贝,赋值 b = a 不会创建新数据,只是多贴了一个标签。想真正拷贝用 b = a.copy()b = a[:]

1.2 变量命名规则

规则正确示例错误示例原因
由字母、数字、下划线组成user_nameuser-name- 不是合法字符
不能以数字开头name22name数字开头非法
不能使用保留关键字class_classclass 是关键字
区分大小写NamenamePython 大小写敏感

Python 官方 PEP8 规范推荐 snake_case(蛇形命名法)

# ✅ 推荐
user_name = "张三"
max_value = 100
is_valid = True
​
# ❌ 不推荐(驼峰命名在Python中不常见,通常只用于类名)
userName = "张三"
MaxValue = 100

1.3 动态类型:同一个变量能装不同类型

x = 10        # int
print(type(x))  # <class 'int'>
​
x = "hello"   # 变成 str 了
print(type(x))  # <class 'str'>
​
x = [1, 2, 3] # 又变成 list
print(type(x))  # <class 'list'>

这在 Java/C++ 里不可能——变量声明了 int 就永远是 int。Python 随时能换,灵活但也容易出 bug

建议:虽然 Python 允许变量类型变化,但尽量保持变量用途一致,别一个变量一会儿是数字一会儿是字符串,自己都看不懂。

二、5个基本数据类型

2.1 整数 int

整数就是没有小数点的数字,Python 中没有长度限制(取决于内存):

a = 100          # 十进制
b = 0b1100100    # 二进制(前缀 0b)
c = 0o144        # 八进制(前缀 0o)
d = 0x64         # 十六进制(前缀 0x)
​
print(a, b, c, d)  # 全部输出:100
​
# 大数字可以用下划线分隔,便于阅读
big_num = 1_000_000_000
print(big_num)  # 1000000000
​
# 进制转换
print(bin(255))   # 0b11111111
print(oct(255))   # 0o377
print(hex(255))   # 0xff

2.2 浮点数 float

带小数点的数字,用于需要精度的场景。

坑2:0.1 + 0.2 ≠ 0.3,这是所有编程语言的通病,不只是 Python:

a = 0.1 + 0.2
print(a)  # 0.30000000000000004  ← 不是0.3!
​
# 涉及钱的计算,一定要用 decimal
from decimal import Decimal
result = Decimal('0.1') + Decimal('0.2')
print(result)  # 0.3 ✅

血泪教训:做金融类项目时,我因为用了 float 算金额,对账差了0.01元,排查了一整天。涉及钱,一律用 Decimal。

2.3 布尔值 bool

只有 TrueFalse(首字母大写,别写 true)。

坑3:哪些值是 False?很多人答不全

# 这些都是 False("假"值/空值)
bool(0)      # False
bool(0.0)    # False
bool("")     # False(空字符串)
bool([])     # False(空列表)
bool({})     # False(空字典)
bool(None)   # False
​
# 其余都是 True
bool(1)      # True
bool("abc")  # True
bool([0])    # True(列表不为空,哪怕里面是0)
bool(-1)     # True(负数也是True)

面试常考: "Python中哪些值是假值?" 记住口诀——零、空、None 就是假

2.4 字符串 str

用单引号或双引号包裹的文本:

name = "张三"
address = '北京市朝阳区'
​
# 三引号:多行字符串
poem = """
床前明月光,
疑是地上霜。
举头望明月,
低头思故乡。
"""
​
# 原始字符串(转义字符不生效,Windows路径必备)
path = r"C:\new folder\file.txt"
# 不加r的话,\n会被当成换行符!
​
# 字符串拼接
print("Hello" + " " + "World")  # Hello World
print("Ha" * 3)                  # HaHaHa

2.5 None

None 表示"什么都没有",不是0,不是空字符串,不是False。

result = None
print(result is None)  # True
​
# 区分 None 和空值
empty_list = []
print(empty_list is None)  # False!空列表不是None
print(len(empty_list) == 0)  # True,这才是判断空列表的正确方式

坑4:判断空值用 is None,不要用 == None,虽然结果一样但 is 才是 Python 规范。判断空列表/空字符串用 len(x) == 0 或直接 if not x:

三、类型查看与转换

3.1 type() 和 isinstance()

x = 42
print(type(x))  # <class 'int'>
​
# isinstance 判断类型(推荐,考虑继承关系)
print(isinstance(x, int))         # True
print(isinstance(x, (int, float)))  # True(int或float都行)

type() vs isinstance() 的区别:

class Animal:
    pass
​
class Dog(Animal):
    pass
​
d = Dog()
print(type(d) == Animal)     # False(type不认继承)
print(isinstance(d, Animal)) # True(isinstance认继承)

实际开发中 优先用 isinstance() ,更安全。

3.2 类型转换

# 转整数
int(3.14)      # 3(截断,不四舍五入)
int("42")      # 42
​
# 转浮点数
float(3)       # 3.0
float("3.14")  # 3.14
​
# 转字符串
str(42)        # "42"
str(3.14)      # "3.14"
​
# 转布尔值
bool(0)        # False
bool("")       # False
bool("abc")    # True

坑5:字符串转数字会报错

int("abc")  # ValueError! 程序直接崩了
​
# 安全转换方法
def safe_int(s, default=0):
    try:
        return int(s)
    except ValueError:
        return default
​
print(safe_int("100"))  # 100
print(safe_int("abc"))  # 0(不会崩)

实际开发中,凡是接收用户输入转数字的,都要做异常处理。

四、== 和 is 的区别(面试必考)

这个问题面试被问到的概率极高:

a = [1, 2, 3]
b = [1, 2, 3]
​
print(a == b)  # True,值相等
print(a is b)  # False,不是同一个对象(内存地址不同)
​
c = a
print(a is c)  # True,是同一个对象

一句话记住:== 比较值,is 比较身份(是不是同一个对象)。

还有个小整数池的坑:

x = 256
y = 256
print(x is y)  # True(-5到256会被缓存,同一对象)
​
x = 257
y = 257
print(x is y)  # False(超出缓存范围,不同对象)

面试官最爱问这个,记住 -5到256是小整数池的范围就行。

五、实战:登录验证系统

把上面学的布尔值、字符串、类型转换串起来:

"""用户登录验证 - 演示变量与数据类型的综合使用"""
​
def validate_login(username, password):
    """验证登录信息"""
    valid_users = {
        "admin": "123456",
        "user1": "password",
        "test": "test123"
    }
​
    if not username:                    # 空字符串是假值
        return False, "用户名不能为空"
    if username not in valid_users:
        return False, "用户不存在"
    if valid_users[username] != password:
        return False, "密码错误"
​
    return True, "登录成功"
​
# 测试
test_cases = [
    ("admin", "123456"),   # 正确
    ("admin", "wrong"),    # 密码错误
    ("unknown", "123"),    # 用户不存在
    ("", "123"),           # 空用户名
]
​
for username, password in test_cases:
    success, message = validate_login(username, password)
    status = "✅" if success else "❌"
    print(f"{status} {username or '(空)'}: {message}")

运行结果:

✅ admin: 登录成功
❌ admin: 密码错误
❌ unknown: 用户不存在
❌ (空): 用户名不能为空

注意 not username 这里用了布尔值的特性——空字符串是假值,直接 if not username 就能判断空,不用写 if username == ""。这就是理解数据类型带来的简洁。

总结:5个坑一句话回顾

一句话避坑方法
坑1:变量是引用b = a 不会拷贝数据.copy()[:]
坑2:浮点数精度0.1+0.2≠0.3涉及钱用 Decimal
坑3:哪些是假值零、空、None 就是假记住口诀就行
坑4:判断空值== None 不规范is Noneif not x:
坑5:字符串转数字int("abc") 直接崩try/except 包一下

到此这篇关于Python中变量和数据类型的使用方法和避坑指南的文章就介绍到这了,更多相关Python变量和数据类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • linux中使用Python对图片进行批量命名

    linux中使用Python对图片进行批量命名

    大家好,本篇文章主要讲的是linux中使用Python对图片进行批量命名,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 在Linux下使用命令行安装Python

    在Linux下使用命令行安装Python

    这篇文章主要介绍了在Linux下使用命令行安装Python,通过详细的图文介绍Linux安装Python的全部过程,希望对你有所帮助
    2021-06-06
  • Python中Parser的用法小结

    Python中Parser的用法小结

    argparse 模块还会自动生成帮助和使用手册,并在用户给程序传入无效参数时报出错误信息,本文给大家介绍Python中Parser的用法小结, 感兴趣的朋友一起看看吧
    2023-12-12
  • Python设计模式中的策略模式详解

    Python设计模式中的策略模式详解

    策略模式属于Python-设计模式中行为模式之一,该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换。本文将通过示例详细讲解这一模式,需要的可以参考一下
    2023-02-02
  • Python中三种命令行参数利用方式详解

    Python中三种命令行参数利用方式详解

    Python的命令行参数,提供了很多有用的功能,可以方便调试和运行,这篇文章主要给大家介绍了关于Python中三种命令行参数利用方式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • Python结合OpenCV实现打开海康机器人黑白相机

    Python结合OpenCV实现打开海康机器人黑白相机

    这篇文章主要介绍了Python如何结合OpenCV实现打开海康机器人黑白相机,该代码主要实现了海康威视相机的图像采集与OpenCV处理功能,感兴趣的小伙伴可以了解下
    2026-04-04
  • Python开发工具Pycharm的安装以及使用步骤总结

    Python开发工具Pycharm的安装以及使用步骤总结

    今天给大家带来的是关于Python开发工具的安装以及使用的相关知识,文章围绕着如何使用和安装Pycharm展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • Python使用re模块正则提取字符串中括号内的内容示例

    Python使用re模块正则提取字符串中括号内的内容示例

    这篇文章主要介绍了Python使用re模块正则提取字符串中括号内的内容,结合实例形式分析了Python使用re模块进行针对括号内容的正则匹配操作,并简单解释了相关修正符与正则语句的用法,需要的朋友可以参考下
    2018-06-06
  • Matplotlib绘制混淆矩阵的实现

    Matplotlib绘制混淆矩阵的实现

    对于机器学习多分类模型来说,其评价指标除了精度之外,常用的还有混淆矩阵和分类报告,下面来展示一下如何绘制混淆矩阵,这在论文中经常会用到。感兴趣的可以了解一下
    2021-05-05
  • 使用Python构造hive insert语句说明

    使用Python构造hive insert语句说明

    这篇文章主要介绍了使用Python构造hive insert语句说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06

最新评论