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

2.python变量

理解,我将提供更详细和深入的解释,包括一些进阶概念和实际应用的例子。我们将从变量类型开始,逐步深入到每种数据类型的特性、操作方法以及它们在编程中的应用场景。

文章目录

      • 1. 变量赋值与作用域
        • 变量赋值
        • 变量作用域
      • 2. 标准数据类型
        • Numbers(数字)
          • 整数 (`int`)
          • 浮点数 (`float`)
          • 复数 (`complex`)
        • String(字符串)
          • 基本操作
          • 字符串方法
          • 字符串格式化
        • List(列表)
          • 基本操作
          • 列表方法
        • Tuple(元组)
          • 基本操作
          • 元组方法
        • Dictionary(字典)
          • 基本操作
          • 字典方法
      • 3. 数据类型转换
        • 基本数据类型转换
        • 复杂数据类型转换
        • 数字系统转换
      • 4. 进阶概念
        • 不可变 vs 可变类型
        • 内存管理和垃圾回收
        • 类型提示(Type Hints)
      • 总结

1. 变量赋值与作用域

变量赋值

Python 中的变量赋值非常灵活,支持多种赋值方式:

  • 单个变量赋值:最简单的形式。
  • 多个变量赋值:可以同时给多个变量赋相同的值或不同的值。
  • 解包赋值:可以从序列中直接解包赋值给多个变量。
# 单个变量赋值
x = 10# 多个变量赋值
a = b = c = 1
p, q, r = "apple", "banana", "cherry"# 解包赋值
coordinates = (3, 4)
x, y = coordinates
变量作用域

Python 中的变量作用域分为全局作用域(global)和局部作用域(local)。函数内部定义的变量默认为局部变量,而函数外部定义的变量为全局变量。可以使用 global 关键字在函数内部访问和修改全局变量。

# 全局变量
global_var = "I am global"def my_function():# 局部变量local_var = "I am local"print(local_var)def modify_global():global global_varglobal_var = "Modified by function"print(global_var)  # 输出: I am global
my_function()      # 输出: I am local
modify_global()
print(global_var)  # 输出: Modified by function

2. 标准数据类型

Numbers(数字)
整数 (int)

整数是没有小数部分的数值。Python 3 中的整数没有大小限制,取决于可用的内存。

# 整数
x = 42
y = -1000
z = 0x1A  # 十六进制表示
w = 0o755 # 八进制表示
v = 0b1101 # 二进制表示print(x, y, z, w, v)  # 输出: 42 -1000 26 493 13
浮点数 (float)

浮点数是带有小数部分的数值,通常用于表示实数。

# 浮点数
pi = 3.14159
e = 2.71828
inf = float('inf')  # 正无穷大
ninf = float('-inf')  # 负无穷大
nan = float('nan')  # 非数字print(pi, e, inf, ninf, nan)  # 输出: 3.14159 2.71828 inf -inf nan
复数 (complex)

复数由实部和虚部组成,可以用 a + bjcomplex(a, b) 表示。

# 复数
c = 3 + 4j
d = complex(1, 2)print(c, d)  # 输出: (3+4j) (1+2j)
print(c.real, c.imag)  # 输出: 3.0 4.0
String(字符串)

字符串是由字符组成的不可变序列。Python 支持多种字符串操作,如切片、拼接、格式化等。

基本操作
  • 创建字符串:可以用单引号、双引号或三引号。
  • 字符串切片:使用 [start:end:step] 语法。
  • 字符串拼接:使用 + 操作符。
  • 字符串重复:使用 * 操作符。
# 创建字符串
s1 = 'Hello'
s2 = "World"
s3 = '''This is a
multi-line string'''# 字符串切片
s = "Python"
print(s[0])  # 输出: P
print(s[1:4])  # 输出: yth
print(s[-3:])  # 输出: hon# 字符串拼接
greeting = s1 + " " + s2
print(greeting)  # 输出: Hello World# 字符串重复
repeated = "abc" * 3
print(repeated)  # 输出: abcabcabc
字符串方法

Python 提供了许多内置的字符串方法,用于处理和操作字符串。

# 字符串方法
text = "hello world"
print(text.capitalize())  # 输出: Hello world
print(text.upper())       # 输出: HELLO WORLD
print(text.replace("world", "Python"))  # 输出: hello Python
print("hello" in text)    # 输出: True
print(len(text))         # 输出: 11
字符串格式化

Python 支持多种字符串格式化方式,如 % 操作符、str.format() 方法和 f-string(Python 3.6+)。

# % 操作符
name = "Alice"
age = 30
formatted = "My name is %s and I am %d years old." % (name, age)
print(formatted)  # 输出: My name is Alice and I am 30 years old.# str.format()
formatted = "My name is {} and I am {} years old.".format(name, age)
print(formatted)  # 输出: My name is Alice and I am 30 years old.# f-string (Python 3.6+)
formatted = f"My name is {name} and I am {age} years old."
print(formatted)  # 输出: My name is Alice and I am 30 years old.
List(列表)

列表是有序且可变的集合,允许重复元素。列表用方括号 [] 表示。

基本操作
  • 创建列表:使用方括号或 list() 构造函数。
  • 访问元素:通过索引访问列表中的元素。
  • 切片:使用 [start:end:step] 语法。
  • 修改元素:通过索引修改列表中的元素。
  • 添加元素:使用 append()insert()extend() 方法。
  • 删除元素:使用 remove()pop()del 语句。
# 创建列表
fruits = ['apple', 'banana', 'cherry']
empty_list = list()# 访问元素
print(fruits[0])  # 输出: apple
print(fruits[-1])  # 输出: cherry# 切片
print(fruits[1:3])  # 输出: ['banana', 'cherry']# 修改元素
fruits[1] = 'blueberry'
print(fruits)  # 输出: ['apple', 'blueberry', 'cherry']# 添加元素
fruits.append('orange')
fruits.insert(1, 'grape')
fruits.extend(['mango', 'kiwi'])
print(fruits)  # 输出: ['apple', 'grape', 'blueberry', 'cherry', 'orange', 'mango', 'kiwi']# 删除元素
fruits.remove('grape')
popped = fruits.pop()  # 弹出最后一个元素
del fruits[1]
print(fruits)  # 输出: ['apple', 'cherry', 'orange', 'mango']
列表方法

Python 提供了许多内置的列表方法,用于操作和管理列表。

# 列表方法
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]# 排序
numbers.sort()
print(numbers)  # 输出: [1, 1, 2, 3, 4, 5, 5, 6, 9]# 反转
numbers.reverse()
print(numbers)  # 输出: [9, 6, 5, 5, 4, 3, 2, 1, 1]# 查找元素
index = numbers.index(5)
count = numbers.count(5)
print(index, count)  # 输出: 2 2# 清空列表
numbers.clear()
print(numbers)  # 输出: []
Tuple(元组)

元组是有序且不可变的集合,不允许修改其元素。元组用圆括号 () 表示。

基本操作
  • 创建元组:使用圆括号或 tuple() 构造函数。
  • 访问元素:通过索引访问元组中的元素。
  • 切片:使用 [start:end:step] 语法。
  • 解包元组:可以将元组中的元素解包赋值给多个变量。
# 创建元组
point = (3, 4)
empty_tuple = tuple()# 访问元素
print(point[0])  # 输出: 3
print(point[-1])  # 输出: 4# 切片
coordinates = (1, 2, 3, 4, 5)
print(coordinates[1:4])  # 输出: (2, 3, 4)# 解包元组
x, y = point
print(x, y)  # 输出: 3 4
元组方法

由于元组是不可变的,因此提供的方法较少,主要包括 count()index()

# 元组方法
t = (1, 2, 2, 3, 4, 2)# 查找元素
index = t.index(2)
count = t.count(2)
print(index, count)  # 输出: 1 3
Dictionary(字典)

字典是无序的键值对集合,键必须是唯一的且不可变。字典用花括号 {} 表示。

基本操作
  • 创建字典:使用花括号或 dict() 构造函数。
  • 访问元素:通过键访问字典中的值。
  • 修改元素:通过键修改字典中的值。
  • 添加元素:通过键添加新的键值对。
  • 删除元素:使用 del 语句或 pop() 方法。
# 创建字典
person = {'name': 'Alice','age': 30,'city': 'New York'
}
empty_dict = dict()# 访问元素
print(person['name'])  # 输出: Alice
print(person.get('age'))  # 输出: 30# 修改元素
person['age'] = 31
print(person)  # 输出: {'name': 'Alice', 'age': 31, 'city': 'New York'}# 添加元素
person['country'] = 'USA'
print(person)  # 输出: {'name': 'Alice', 'age': 31, 'city': 'New York', 'country': 'USA'}# 删除元素
del person['city']
removed_value = person.pop('country')
print(person)  # 输出: {'name': 'Alice', 'age': 31}
字典方法

Python 提供了许多内置的字典方法,用于操作和管理字典。

# 字典方法
person = {'name': 'Alice','age': 30,'city': 'New York'
}# 获取所有键
keys = person.keys()
print(keys)  # 输出: dict_keys(['name', 'age', 'city'])# 获取所有值
values = person.values()
print(values)  # 输出: dict_values(['Alice', 30, 'New York'])# 获取所有键值对
items = person.items()
print(items)  # 输出: dict_items([('name', 'Alice'), ('age', 30), ('city', 'New York')])# 更新字典
person.update({'age': 31, 'country': 'USA'})
print(person)  # 输出: {'name': 'Alice', 'age': 31, 'city': 'New York', 'country': 'USA'}# 清空字典
person.clear()
print(person)  # 输出: {}

3. 数据类型转换

Python 提供了多种内置函数来执行不同类型之间的转换。这些函数不仅可以用于基本数据类型之间的转换,还可以用于复杂数据结构之间的转换。

基本数据类型转换
  • int():将其他类型转换为整数。
  • float():将其他类型转换为浮点数。
  • str():将其他类型转换为字符串。
  • bool():将其他类型转换为布尔值。
# 基本数据类型转换
int_value = int(3.5)        # 输出: 3
float_value = float("12.34")  # 输出: 12.34
str_value = str(42)          # 输出: '42'
bool_value = bool(0)         # 输出: False
复杂数据类型转换
  • list():将其他类型转换为列表。
  • tuple():将其他类型转换为元组。
  • set():将其他类型转换为集合。
  • dict():将其他类型转换为字典。
# 复杂数据类型转换
list_from_string = list("hello")
print(list_from_string)  # 输出: ['h', 'e', 'l', 'l', 'o']tuple_from_list = tuple([1, 2, 3])
print(tuple_from_list)  # 输出: (1, 2, 3)set_from_list = set([1, 2, 2, 3, 4])
print(set_from_list)  # 输出: {1, 2, 3, 4}dict_from_tuples = dict([('name', 'Alice'), ('age', 30)])
print(dict_from_tuples)  # 输出: {'name': 'Alice', 'age': 30}
数字系统转换
  • hex():将整数转换为十六进制字符串。
  • oct():将整数转换为八进制字符串。
  • bin():将整数转换为二进制字符串。
# 数字系统转换
hex_value = hex(255)  # 输出: '0xff'
oct_value = oct(64)   # 输出: '0o100'
bin_value = bin(13)   # 输出: '0b1101'

4. 进阶概念

不可变 vs 可变类型
  • 不可变类型:一旦创建后,其内容不能被修改。例如,intfloatstrtuple 等。
  • 可变类型:可以在创建后修改其内容。例如,listdictset 等。
# 不可变类型
s = "hello"
s += " world"  # 实际上创建了一个新的字符串对象
print(s)  # 输出: hello world# 可变类型
l = [1, 2, 3]
l.append(4)
print(l)  # 输出: [1, 2, 3, 4]
内存管理和垃圾回收

Python 使用自动内存管理机制,包括引用计数和垃圾回收器(GC)。当一个对象的引用计数为零时,它会被自动释放。垃圾回收器还会处理循环引用的情况。

import gc# 启用垃圾回收
gc.enable()# 手动触发垃圾回收
gc.collect()
类型提示(Type Hints)

Python 3.5 引入了类型提示功能,允许你在代码中明确指定变量、函数参数和返回值的类型。这有助于提高代码的可读性和维护性,并且可以与静态分析工具结合使用。

from typing import List, Dict, Tupledef greet(name: str) -> str:return f"Hello, {name}!"def process_data(data: List[int]) -> Dict[str, int]:return {"min": min(data), "max": max(data)}def get_coordinates() -> Tuple[int, int]:return (3, 4)

总结

通过上述详细的解释,我们不仅涵盖了 Python 中的基本变量类型和数据结构,还深入探讨了它们的特性和操作方法。此外,我们还介绍了进阶概念,如不可变与可变类型、内存管理、垃圾回收和类型提示。这些知识将帮助你更好地理解和使用 Python 编程语言,编写高效、可靠的代码。

如果你有任何具体问题或需要进一步的解释,请随时告诉我!

http://www.lryc.cn/news/504557.html

相关文章:

  • 【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)
  • opencv获取摄像头的最大分辨率图像
  • 23.DDD与微服务
  • Redis是什么?Redis和MongoDB的区别在那里?
  • git SSL certificate problem: unable to get local issuer certificate
  • 使用Keil V6编译 FreeRTOS CMSIS V2版本 ETH + Lwip 编译报错问题解决方式
  • 驱动开发系列30 - Linux Graphics DRM光标绘制分析
  • 如何利用Java爬虫获得淘宝买家秀
  • 【ArcGIS】基于R语言、MaxEnt模型融合技术的物种分布模拟、参数优化方法、结果分析制图与论文写作
  • 虚幻引擎C++按键绑定
  • 秒杀抢购场景下实战JVM级别锁与分布式锁
  • 【Pandas】pandas interval_range
  • 有没有办法让爬虫更加高效,比如多线程处理?
  • go-zero(十三)使用MapReduce并发
  • 【实操之 图像处理与百度api-python版本】
  • java 导出word锁定且部分内容解锁可编辑
  • SQL 在线格式化 - 加菲工具
  • 大数据法律法规——《关键信息基础设施安全保护条例》(山东省大数据职称考试)
  • 【CVE-2024-5660】ARM CPU漏洞:硬件页面聚合(HPA)安全通告
  • 数智读书笔记系列008 智人之上:从石器时代到AI时代的信息网络简史
  • 将 Ubuntu 22.04 LTS 升级到 24.04 LTS
  • 【自动驾驶】Ubuntu20.04安装ROS1 Noetic
  • (转,自阅,侵删)【LaTeX学习笔记】一文入门LaTeX(超详细)
  • css的选择器有哪些?权重由大到小是怎么排序的?
  • CTF知识集-PHP特性
  • 比特币是否会取代美元(以及其他主权货币)
  • WPF+MVVM案例实战与特效(三十七)- 实现带有水印和圆角的自定义 TextBox 控件
  • 深度学习训练参数之学习率介绍
  • 导游现场面试需要注意的问题
  • Burp suite 3 (泷羽sec)