Python中的变量

Python
作者

yangjh

发布日期

May 18, 2022

编程语言中的的变量

变量(Vaiable)实质上是对内存中地址的命名。在内存中存储着诸多对象,为了方便使用这些对象,便有了变量。变量是可以赋给值的标签,也可以说变量指向特定的值。

Python中的变量

  • 每个变量都有各自的标识符、值和类型。
  • 一个对象被创建后,它的标识符就绝不会改变,可以将其理解为该对象在内存中的地址。
  • is 运算符可以比较两个对象的标识号是否相同。
  • id() 函数能返回一个代表其标识符的整数。

Python标识符

标识符(Identifier)是变量和函数的名称。简单理解,标识符就是用户对变量和函数、类、模块等可以起名字的对象命名时所使用的字符串。

Python标识符命名规则

  1. Python 标识符由字母、数字和下划线组成,可以是中文字符。
  2. Python 标识符不能以数字开头。
  3. Python 标识符严格区分大小写。
  4. Python 标识符不能包含空格、@% 以及 $ 等特殊字符。
  5. 不能以系统保留关键字(目前共35个,后续随着版本的更新,肯定会增多)作为标识符。

Python保留关键字

Python 保留关键字可以通过keyword.kwlist 命令查看。

False      await      else       import     pass
None       break      except     in         raise
True       class      finally    is         return
and        continue   for        lambda     try
as         def        from       nonlocal   while
assert     del        global     not        with
async      elif       if         or         yield

Python 标识符命名规范

以下规范并非语法规则,只是一种约定,可以遵守,也可以不遵守。

  1. 当标识符用作模块名时,应尽量短小,并且全部使用小写字母,可以使用下划线分割多个字母。
  2. 当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下划线。
  3. 当标识符用作类名时,应采用单词首字母大写的形式。
  4. 模块内部的类名,可以采用 “下划线+首字母大写” 的形式。
  5. 函数名、类中的属性名和方法名,应全部使用小写字母,多个单词之间可以用下划线分割。
  6. 常量命名应全部使用大写字母,单词之间可以用下划线分割。

变量的值

值(Value) 是程序运行过程中的基本元素之一,例如13.14"hello"等等都是值。在编程术语中,它们又被叫作字面量(literals)。字面量拥有不同的类型,如1是整型(int),3.14是浮点型(float),"hello"是字符串(string)。

变量赋值

  • 使用“=”为变量赋值,等于号=也被认为赋值操作符
  • 在 Python 中,无需声明变量类型,解释器会根据变量的值自动判断变量类型。
  • Python 变量的数据类型可以动态改变。

以下是变量声明的一些例子:

x = 100                       # x 是整型
pi = 3.14                     # pi 是浮点类型
empname = "python is great"   # empname 是字符串
a = b = c = 100               # 将100赋值给a、b、c
a:int = 4                     # 提示a为int类型,但仍然可以改变其类型

注意,变量x中并不储存100自身,它存储的是100(它是一个整型对象)的引用(reference)地址

同步赋值

# Python可以使用以下语法对多个变量同步赋值
var1, var2, ..., varn = exp1, exp2, ..., expn
# 将表达式右边的值依次赋值给表达式左侧的变量
x = 1
y = 2
y, x = x, y # 交换x、y的值
print(x)
2
print(y)
1

上述声明告诉Python,将表达式右边的值依次赋值给表达式左侧的变量。同步赋值在要交换两个变量的值时非常有用。

修改变量的值

当需要修改变量值的时候,还是使用赋值运算符进行修改。

x = 1
print(x)
1
x = 2
print(x)
2

变量类型

在 Python 中变量类型取决于变量的对象类型,因此,从理论上将,Python中的数据类型只有一种:对象。但是,如果对对象本身再进行拆分,有一些更为基础的数据类型。

变量类型的创建与查看

  • Python 自动根据表达式创建类型,一旦创建成功,只能对该对象进行适合该类型的有效操作。
  • 可使用内置函数 type()来查看变量的类型。

例如:

x = 12
type(x)
"""
<class 'int'>
"""

判断变量类型

  • 要判断两个类型是否相同推荐使用 isinstance(object, classinfo)
  • 对于基本类型来说 classinfo 可以是:intfloatboolcomplexstrlistdictsettuple等等。
a = 2
isinstance(a,int)
True
isinstance(a,str)
False
isinstance(a,(str,int,list))  
True

基础数据类型

Python的基础数据类型主要包括以下几种:

数据类型 描述 示例
整数 (Integers) 表示没有小数部分的数 1, 100, -50
浮点数 (Floats) 表示有小数部分的数 1.0, -3.142, 2.5e2
布尔值 (Booleans) 表示逻辑值,只有TrueFalse True, False
字符串 (Strings) 表示文本或字符序列 "hello", 'Python3.8'
列表 (Lists) 一个有序的元素集合,元素类型可以不同 [1, "a", True, 2.3]
元组 (Tuples) 与列表类似,但一旦创建,其元素不能修改 (1, "b", False)
字典 (Dictionaries) 存储键值对的集合,键是唯一的 {"name": "Alice", "age": 25}
集合 (Sets) 无序且元素唯一的集合 {1, 2, 3, "a", "b"}

这个表格清晰地展示了每种数据类型的描述和相关示例。

这些基础数据类型是Python编程中最基本且最重要的部分,它们提供了存储和操作数据的基础。

类型提示

  • 类型提示(type hints)是指编辑器(IDE)对变量类型的提示。
  • Python 允许开发者指定变量类型,供 IDE 和各种开发工具使用。
  • 类型提示对代码运行不产生影响,运行时会过滤类型信息。

类型提示的优点

  1. 易于理解代码。
  2. 易于重构。
  3. 便于IDE提供准确的建议

如何创建类型提示

  • 使用:语句将类型信息附加到变量或函数参数中,如name: str
  • ->运算符用于将信息附加到函数的返回值中,如def isAnkiConnected() -> bool:
  • 可以声明容器数据结构中包含的数据类型,如items:List[str]
  • 可以使用 Python 的 typing 标准库来声明容器类型以及子类型。
# 变量类型提示
from typing import List
def process_items(items:List[str]):
    for item in items:
        print(item)

# 将变量类型声明为自定义类
class Person:
    def __init__(self, name: str):
        self.name = name

def get_person_name(one_person: Person):
    return one_person.name

变量类型的转换

在Python中,变量类型的转换通常是指将一个数据类型转换为另一个。Python提供了内置的函数来实现这种类型转换。以下是一些常见的类型转换函数和示例:

转换函数 描述 示例 注意事项
整数转换 (int()) 将其他数据类型转换为整数 int("123")123 如果字符串不是有效的整数,会引发错误
浮点数转换 (float()) 将其他数据类型转换为浮点数 float("123.45")123.45 字符串必须是有效的浮点数表示
字符串转换 (str()) 将其他数据类型转换为字符串 str(123)"123"
布尔值转换 (bool()) 将其他数据类型转换为布尔值 bool(0)False, bool(1)True 大多数值转换为 True0None 和空集合转换为 False
列表转换 (list()) 将其他数据类型(如元组、字符串)转换为列表 list("hello")['h', 'e', 'l', 'l', 'o']
元组转换 (tuple()) 将其他数据类型(如列表、字符串)转换为元组 tuple([1, 2, 3])(1, 2, 3)
集合转换 (set()) 将其他数据类型(如列表、字符串)转换为集合 set("hello"){'h', 'e', 'l', 'o'} 元素无序
字典转换 (dict()) 将元组列表或键值对列表转换为字典 dict([(1, 'one'), (2, 'two')]){1: 'one', 2: 'two'}

这些转换在数据处理和类型兼容性方面非常重要。需要注意的是,不是所有的转换都是可能的,有些转换可能会因为数据不兼容而引发错误。

参考文献

  1. Lexical analysis — Python 3.10.6 documentation
  2. 全面理解Python中的类型提示(Type Hints) · Sika (sikasjc.github.io)
  3. 数据模型 — Python 3.10.6 文档
回到顶部