当前位置: 首页 > news >正文

[Python 基础课程]变量

什么是变量

简单来说,变量是用来存储数据的容器。你可以把变量想象成一个贴着标签的盒子,你可以在这个盒子里放入各种各样的东西,比如数字、文字等等。通过盒子上的标签(也就是变量名),你可以随时找到并使用盒子里面的东西。

在 Python 中,当我们第一次给一个变量赋值时,Python 会在计算机的内存中开辟一块空间来存储这个值,并将这个变量名“指向”这块内存空间。

与一些编程语言不同,Python 没有声明变量的命令,首次为其赋值时,才会创建变量。

在 Python 中,创建变量非常简单,你只需要使用赋值运算符 =。它的基本语法是:

变量名 =

比如:

age = 30
name = "小明"
height = 1.75
is_student = False

变量名一般要根据语境选择合适的变量名,且要遵循以下的规范:

  • 清晰描述: 用有意义的英文单词,准确表达变量用途
  • snake_case: 小写字母,单词间用下划线分隔 (Python 推荐)
  • 长度适中: 不要过短或过长
  • 避开关键字: 不能使用 Python 预留的单词
  • 避免混淆: 区分相似字符
  • 布尔清晰: is_, has_, should_ 开头
  • 保持一致: 项目内风格统一

:::warning
Python 是 强类型(strongly typed) 但 动态类型(dynamically typed) 的语言

:::

强类型是指语言会严格检查类型,不允许隐式的、可能不安全的类型转换:

"hello" + 42  # 报错!不能直接拼接字符串和整数(TypeError)

和强类型对应的是弱类型,最典型的是 JavaScript:

"hello" + 42  // 合法!结果为 "hello42"(数字被隐式转为字符串)

JavaScript 的弱类型也是 JavaScript 饱受诟病的原因之一,这也是 typescript (在 js 的基础上增加了类型)影响力增强的原因。

动态类型是指变量类型在运行时确定,且可以随时改变:

x = 42      # x 是整数
x = "hello" # x 变成字符串(合法)

静态类型最典型的语言是 Java:

int x = 42;
x = "hello"; // 编译报错!

上面的例子中,变量是有类型的,Python 自动根据你赋的值的类型,为变量指定了类型,你也可以更显示的指定变量的类型:

from typing import List, Dict, Tuple, Setage: int = 30
name: str = "Bob"numbers: List[int] = [1, 2, 3]
person: Dict[str, int] = {"age": 30}
point: Tuple[int, int] = (10, 20)
unique_ids: Set[str] = {"a1", "b2", "c3"}

如果想知道 Python 的变量的类型,可以使用 type 函数:

x = 42
print(type(x))  # 输出: <class 'int'>

Python 还支持同时为多个变量赋值:

a, b, c = 1, 2, 3
print(a, b, c, sep=" ")  # 1 2 3

:::warning
猜猜看这行代码是啥作用:x = y = z = “zzzz+++”

:::

变量的类型

类型名称描述示例是否可变 (Mutable)是否有序 (Ordered)是否允许重复元素
整型 (int)整数(正、负或零),没有小数部分python age: int = 30 不可变(改变指针的指向)不适用适用
浮点型 (float)带有小数部分的数字python price: float = 19.99 不可变不适用适用
列表 (list)有序、可变的元素集合,元素可以是不同类型python names: list[str] = ["Alice", "Bob", "Charlie"] 可变有序允许
元组 (tuple)有序、不可变的元素集合,一旦创建就不能修改python mixed_data: tuple[str, int, float] = ("hello", 5, 3.14) 不可变有序允许
字符串 (str)由字符组成的不可变序列,用于表示文本数据python name: str = "Alice" address: str = 'address' 不可变有序允许
集合 (set)无序、不包含重复元素的集合,可进行添加和删除操作java unique_numbers: set[int] = {1, 2, 3, 4, 5} 可变无序不允许
字典 (dict)无序的键值对集合,每个键是唯一的,用于访问对应的值python student_info: dict[str, any] = {"name": "Bob", "age": 22} 可变在 Python 3.7+ 版本中有序 (插入顺序)键不允许重复,值可以重复
布尔值 (bool)只有两个值:True 和 False,通常用于逻辑判断python is_active: bool = True has_permission: bool = False 不可变不适用适用
可空类型可以是 None,也可以是其他指定的类型,它是比较常用的类型别名python from typing import Optional # 变量 name 可以是字符串或 None name: Optional[str] = "Alice" name = None # 这是合法的 可变不适用
NoneType只有一个特殊的值 Nonepython empty_value: None = None 不可变不适用适用
自定义类型类,接口python my_dog: Dog = Dog("Buddy", "Golden Retriever") 可变不适用

好了,知道了如何定义变量,以及变量都有哪些类型,请你定义以下的几个变量:

  1. 小明的年龄(28 岁)
  2. 小明的名字
  3. 小明的身高 173cm
  4. 小明喜欢的编程语言:Python、Java、Go、Rust
  5. 小明是否喜欢吃鱼

常量

常量是在程序运行的整个周期中都不改变的,Python 中没有特定的常量类型,但是人们通常使用全大写的变量来表示常量。

MAX_VALUE = 10000

数据类型转换

你可能会好奇,为什么我们需要进行数据类型转换呢?原因有很多,以下是一些常见的场景:

  • 不同类型的数据不能直接进行某些操作: 例如,你不能直接将一个字符串和一个整数相加。你需要先将它们转换为相同的类型才能进行计算。
  • 从外部来源获取的数据通常是字符串: 比如,从用户输入、文件读取或网络请求获取的数据,往往是以字符串的形式呈现,但在程序中你可能需要将它们转换为数字或其他类型进行处理。
  • 为了满足特定函数或方法的要求: 某些函数或方法可能只接受特定类型的数据作为参数。

Python 数据类型转换可以分为两种:

  • 隐式类型转换 - 自动完成
  • 显式类型转换 - 需要使用类型函数来转换

隐式类型转换

在隐式类型转换中,Python 会自动将小范围的数据类型转换为另一种大范围的数据类型(避免数据丢失),不需要我们去干预。

num_0 = 1
num_1 = 1.1num_2 = num_0 + num_1print("num_0 数据类型为:",type(num_0))
print("num_1 数据类型为:",type(num_1))print("num_2 值为:",num_2)
print("num_2 数据类型为:",type(num_2))

隐式类型转换在某些情况下是不能转的,比如:

num_int = 1
num_str = "123"print("num_int 数据类型为:",type(num_int))
print("num_str 数据类型为:",type(num_str))print(num_int+num_str)

在这种情况下,Python 不会进行隐式转换,上面的代码会报错:

对于字符串和数字相加的场景,我们需要使用显式类型转换,将字符串转为数字后再相加。

显式类型转换

Python 中提供了以下的内置函数用于执行数据类型之间的转换。这些函数输入要转换的值,返回一个新的类型的值:

函数描述示例转换结果
int(x)x转换为一个整数。如果 x是浮点数,则会截断小数部分。如果 x是字符串,则需要是表示整数的有效形式int(3.14)
int("123")
int("-5")
3
123
-5
float(x)x转换为一个浮点数。如果 x是整数,则会添加 .0。如果 x是字符串,则需要是表示浮点数的有效形式float(5)
float("3.14159")
float("-2.7")
5.0
3.14159
-2.7
str(x)x转换为一个字符串。可以转换任何数据类型str(123)
str(3.14)
str(True)
"123"
"3.14"
"True"
list(s)将序列 s转换为一个列表。如果 s是字符串,则会转换为包含每个字符的列表list("hello")
list((1, 2, 3))
['h', 'e', 'l', 'l', 'o']
[1, 2, 3]
tuple(s)将序列 s转换为一个元组。如果 s是字符串,则会转换为包含每个字符的元组tuple([4, 5, 6])
tuple("world")
(4, 5, 6)
('w', 'o', 'r', 'l', 'd')
set(s)将序列 s转换为一个集合。集合中的元素是唯一的,并且是无序的。如果 s是字符串,则会转换为包含每个字符的集合set([1, 2, 2, 3])
set("banana")
{1, 2, 3}
{'b', 'a', 'n'}
dict(iterable)将一个可迭代对象转换为字典。可迭代对象的元素必须是键值对(例如,包含两个元素的元组或列表)dict([('a', 1), ('b', 2)])
dict(zip(['one', 'two'], [1,2]))
{'a': 1, 'b': 2}
{'one': 1, 'two': 2}
bool(x)x转换为一个布尔值。以下值会被转换为 False
None,数字 0,空序列("", [], ()),空字典 {},空集合 set()。其他值通常转换为 True
bool(0)
bool(1)
bool("hello")
bool([])
False
True
True
False
bytes(iterable)返回一个新的“bytes”对象,它是一个不可变的字节序列。如果 iterable是一个整数,则创建一个指定大小的以零填充的 bytes 对象bytes([65, 66, 67])
bytes(5)
b'ABC'
b'\x00\x00\x00\x00\x00'
bytearray(iterabe)返回一个新的“bytearray”对象,它是字节的可变序列bytearray([65, 66, 67])
bytearray(5)
bytearray(b'ABC')
bytearray(b'\x00\x00\x00\x00\x00')

下面是一个强制转换的例子:

# 将浮点数强制转换为整数
float_num = 3.14
int_num = int(float_num)
# 输出: 3
print(int_num)

:::warning
强制类型转换可能会导致数据丢失或引发 ValueError 异常,例如尝试将无法转换为整数的字符串传递给 int() 函数

在进行类型转换时,请确保你了解数据的原始类型和目标类型,以避免意外的结果

:::

http://www.lqws.cn/news/585775.html

相关文章:

  • 如何通过SSL证书配置防止源站IP泄露 - 全面防护指南
  • 源码包安装haproxy(rocky8)
  • Kafka 核心机制面试题--自问自答
  • 本地部署kafka4.0
  • PHP中的异常处理try-catch语句
  • Franka机器人赋能RoboCulture研究,打造生物实验室智能解决方案
  • 【科研绘图系列】R语言绘制世界地图分布(world map)
  • 炸鸡派-基础测试例程
  • AdGuard Home 安装及使用
  • 插入排序的简单介绍
  • 在 VS Code 中安装与配置 Gemini CLI 的完整指南
  • 第28篇:深入解析OpenEuler 24.03中的PAM认证机制:从原理到实践
  • 面向安全产品测试的静态混淆型 Shellcode Loader 设计与对抗分析
  • react经验:在nextjs中使用motion组件
  • 设计模式-访问者模式
  • PHP WebSocket服务器搭建指南
  • 深度学习03 人工神经网络ANN
  • 大数据(3)-Hive
  • iOS 应用上架踩坑实录:7 个问题 + 工具组合解决方案详解
  • STL简介+string模拟实现
  • 【Docker基础】Docker数据持久化与卷(Volume)介绍
  • 24V转12V降压实际输出12.11V可行性分析
  • gravitino0.9 安装部署集成Trino-439查询Hive3.1.3和MySQL8.0.33
  • 88.LMS当幅度和相位同时失配时,为啥最后权值w的相位angle(w(end))收敛到angle(mis)不是-angle(mis)
  • 从零到一通过Web技术开发一个五子棋
  • SpringBoot --项目启动的两种方式
  • js遍历对象的方法
  • 【MySQL】数据库基础
  • .net8导出影像图片按现场及天拆分
  • 51单片机CPU工作原理解析