当前位置: 代码网 > it编程>前端脚本>Python > Python一次为多个变量赋值的简便方法

Python一次为多个变量赋值的简便方法

2026年03月30日 Python 我要评论
引言在python的世界里,简洁与优雅是永恒的追求。当面对需要同时处理多个变量的场景时,如何避免冗长的代码和临时变量的困扰?答案就藏在python强大的多重赋值机制中。无论是数据科学家处理结构化数据、

引言

在python的世界里,简洁与优雅是永恒的追求。当面对需要同时处理多个变量的场景时,如何避免冗长的代码和临时变量的困扰?答案就藏在python强大的多重赋值机制中。无论是数据科学家处理结构化数据、后端开发者解析api响应,还是自动化脚本中管理配置参数,掌握多重赋值技巧都能让代码瞬间变得清爽高效。本文将系统性地探讨python中为多个变量赋值的多种方法,从基础语法到高级技巧,配合实战案例与可视化解析,带你彻底掌握这一核心技能!

为什么多重赋值如此重要?

想象一下这样的场景:你需要交换两个变量的值。传统做法可能需要一个临时变量:

temp = a
a = b
b = temp

而在python中,只需一行:

a, b = b, a

这种简洁性不仅减少了代码量,更降低了出错概率。根据python官方文档的说明,多重赋值本质上是序列解包(sequence unpacking) 的应用,它让开发者能以声明式的方式处理数据结构,而非通过繁琐的索引操作。

多重赋值的核心价值体现在:

  • 提升可读性:直观表达数据关系
  • 减少冗余代码:避免临时变量污染命名空间
  • 增强健壮性:减少因手动索引导致的越界错误
  • 优化性能:在交换操作等场景下效率更高

让我们从最基础的用法开始,逐步深入这个充满惊喜的特性!

基础多重赋值:让代码呼吸起来

最简单的多重赋值形式是并行赋值,它要求等号两侧的元素数量严格匹配:

# 基础示例
x, y, z = 1, 2, 3
print(x, y, z)  # 输出: 1 2 3

# 字符串解包
a, b, c = "abc"
print(a, b, c)  # 输出: a b c

这里的关键在于:右侧可以是任何可迭代对象(列表、元组、字符串等),python会自动将其元素按顺序分配给左侧变量。这种机制特别适合处理固定结构的数据:

# 解析csv行数据
record = "alice,28,engineer"
name, age, job = record.split(',')
print(f"{name} is {age} years old and works as {job}")
# 输出: alice is 28 years old and works as engineer

小技巧:当处理数据库查询结果时,可以直接将元组解包到命名变量:

# 模拟数据库查询
user_data = (101, "sarah", "sarah@example.com")
user_id, username, email = user_data

这种写法比user_data[0]user_data[1]等索引访问方式更具可读性,也更容易维护。如果未来数据库结构调整字段顺序,只需修改解包行即可,无需遍历整个代码库修改索引。

元组解包:优雅处理结构化数据

元组解包(tuple unpacking)是多重赋值最常见的应用场景。python在内部将左侧变量列表视为元组,即使没有显式使用括号:

# 以下两种写法等价
a, b = (1, 2)
(a, b) = 1, 2

这种特性在函数返回多个值时尤为强大。python函数实际上只能返回一个对象,但通过返回元组并解包,可以实现"多返回值"的效果:

def get_user_info():
    return 101, "michael", "data analyst"

# 直接解包函数返回值
user_id, name, role = get_user_info()
print(f"id: {user_id}, name: {name}, role: {role}")

更妙的是,解包可以嵌套进行,处理复杂结构:

# 嵌套元组解包
coordinates = ( (2.3, 4.7), (5.1, 9.2) )
(top_left, top_right) = coordinates
(x1, y1) = top_left
(x2, y2) = top_right

# 一步到位的嵌套解包
((x1, y1), (x2, y2)) = coordinates
print(f"top left: ({x1}, {y1}), top right: ({x2}, {y2})")

重要提示:解包时必须保证结构匹配,否则会触发valueerror

# 错误示例:元素数量不匹配
a, b = [1, 2, 3]  # 报错: too many values to unpack

扩展解包:灵活处理不确定长度的数据

当面对长度不确定的序列时,python 3引入的扩展 iterable 解包(extended iterable unpacking)特性大显身手。通过星号*操作符,可以将剩余元素收集到一个列表中:

# 基本用法
first, *middle, last = [1, 2, 3, 4, 5]
print(first)   # 1
print(middle)  # [2, 3, 4]
print(last)    # 5

# 星号可出现在任意位置
*head, x, y = range(5)
print(head)  # [0, 1, 2]
print(x, y)  # 3 4

这种机制在数据处理中极其实用。例如解析日志文件时,我们可能只关心首尾字段:

# 解析带时间戳的日志
log_entry = "2023-08-15 info user logged in successfully"
timestamp, level, *message = log_entry.split()
print(f"[{timestamp}] [{level}] {' '.join(message)}")
# 输出: [2023-08-15] [info] user logged in successfully

让我们通过mermaid图表直观理解扩展解包的工作原理:

渲染错误: mermaid 渲染失败: parse error on line 2: ...hart lr a[输入序列: [10, 20, 30, 40, 50] ----------------------^ expecting 'sqe', 'doublecircleend', 'pe', '-)', 'stadiumend', 'subroutineend', 'pipe', 'cylinderend', 'diamond_stop', 'tagend', 'trapend', 'invtrapend', 'unicode_text', 'text', 'tagstart', got 'sqs'

在这个流程中:

  1. 输入序列被拆分为三个逻辑部分
  2. 首元素直接赋值给变量a
  3. 中间所有元素打包为列表赋给b
  4. 尾元素单独赋给c

值得注意的边界情况:

# 单元素序列
a, *b, c = [1]
print(a, b, c)  # 1 [] 报错! 实际会触发valueerror

# 两元素序列
a, *b, c = [1, 2]
print(a, b, c)  # 1 [] 2 → b为空列表

当序列长度不足时,python会尽可能分配元素,但必须满足至少有一个元素分配给带星号的变量(除非它是唯一变量)。这种灵活性使我们能编写更健壮的数据处理代码。

列表解包:与元组解包的微妙差异

虽然列表和元组在解包时表现相似,但存在关键区别:

# 列表解包
[x, y, z] = [1, 2, 3]
print(x, y, z)  # 1 2 3

# 元组解包
x, y, z = 1, 2, 3

主要差异在于可变性

  • 列表解包时,左侧使用方括号[](尽管不常见)
  • 元组解包更常用,因为元组不可变,更适合作为"数据结构"而非"容器"

但在实际开发中,这种差异几乎不影响使用。更值得关注的是列表解包在循环中的应用:

# 处理坐标列表
points = [[1,2], [3,4], [5,6]]
for [x, y] in points:
    print(f"point at ({x}, {y})")

虽然语法有效,但python社区更推荐使用元组形式:

for x, y in points:  # 更pythonic的写法
    print(f"point at ({x}, {y})")

这种偏好源于python之禅:“flat is better than nested”(扁平优于嵌套)。省略不必要的括号使代码更简洁。

zip函数:并行迭代的赋值利器

当需要同时处理多个序列时,zip()函数配合多重赋值能产生魔法般的效果:

# 基本用法
names = ["alice", "bob", "charlie"]
scores = [85, 92, 78]

for name, score in zip(names, scores):
    print(f"{name} scored {score}")

zip()会创建一个迭代器,每次生成一个元组,然后通过多重赋值解包到变量。这比使用索引循环更安全(避免越界)且更易读:

# 不推荐的索引方式
for i in range(min(len(names), len(scores))):
    print(f"{names[i]} scored {scores[i]}")

更强大的是处理多序列场景:

# 三序列并行处理
cities = ["beijing", "new york", "tokyo"]
temps = [32, 28, 30]
humidity = [65, 70, 80]

for city, temp, humid in zip(cities, temps, humidity):
    print(f"{city}: {temp}°c, {humid}% humidity")

当序列长度不一致时,zip()默认以最短序列为准。若需处理不等长序列,可使用itertools.zip_longest

from itertools import zip_longest

names = ["alice", "bob"]
scores = [85, 92, 78, 88]

for name, score in zip_longest(names, scores, fillvalue="n/a"):
    print(f"{name}: {score}")
# 输出:
# alice: 85
# bob: 92
# n/a: 78
# n/a: 88

这个特性在数据对齐场景中非常实用,比如合并不同来源但部分匹配的数据集。

变量交换:无需临时变量的魔法

多重赋值最令人惊叹的应用之一是变量交换。在大多数语言中,交换两个变量需要临时存储:

// java中的变量交换
int temp = a;
a = b;
b = temp;

而在python中,只需一行:

a, b = b, a

让我们深入理解其工作原理。考虑以下代码:

x = 10
y = 20
x, y = y, x

执行过程分为三步:

  1. 右侧y, x创建临时元组(20, 10)
  2. 解包该元组到左侧变量
  3. 最终x得到20,y得到10

这种机制不仅适用于两个变量,还可扩展到更多变量:

# 三变量轮换
a, b, c = 1, 2, 3
a, b, c = b, c, a
print(a, b, c)  # 2 3 1

在算法实现中,这种技巧能大幅简化代码。例如实现冒泡排序:

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]  # 无需临时变量
    return arr

相比传统实现,代码更简洁且不易出错。根据real python的性能分析,这种交换方式在cpython中经过高度优化,效率与手动使用临时变量相当甚至更高。

字典解包:处理键值对的优雅方式

字典作为python最常用的数据结构之一,其解包有独特规则。字典解包默认提供

user = {"name": "eva", "age": 30, "role": "designer"}
key1, key2, key3 = user
print(key1, key2, key3)  # name age role

要获取值,需使用.values()

name, age, role = user.values()
print(name, age, role)  # eva 30 designer

而同时获取键值对,则用.items()

for key, value in user.items():
    print(f"{key}: {value}")

更高级的用法是使用扩展解包处理嵌套字典:

config = {
    "server": "api.example.com",
    "port": 8080,
    "timeout": 30,
    "retries": 3
}

# 仅提取关键配置
main_server, port, *other = config.values()
print(f"connecting to {main_server}:{port}")

在函数参数中,字典解包更是强大。**kwargs可以将字典解包为关键字参数:

def connect(**settings):
    print(f"connecting to {settings['host']}:{settings['port']}")

config = {"host": "db.example.com", "port": 5432}
connect(**config)  # 等价于 connect(host="db...", port=5432)

这种模式广泛应用于api客户端、配置管理系统等场景,提供极高的灵活性。

函数参数解包:动态调用的终极武器

python的函数调用支持两种解包操作符:

  • *args:解包位置参数
  • **kwargs:解包关键字参数

结合多重赋值,可以实现动态函数调用:

def calculate(a, b, operation="add"):
    if operation == "add":
        return a + b
    elif operation == "multiply":
        return a * b

# 从配置获取参数
params = [5, 10]
operation = {"operation": "multiply"}

# 动态调用
result = calculate(*params, **operation)
print(result)  # 50

这种模式在以下场景特别有用:

  1. 测试框架:动态生成测试用例
  2. 插件系统:根据配置调用不同处理函数
  3. 序列化/反序列化:将数据结构映射到函数参数

更复杂的例子:实现一个通用的api请求处理器

import requests

def api_request(method, url, **params):
    response = requests.request(method, url, params=params)
    response.raise_for_status()
    return response.json()

# 从配置文件读取请求参数
request_config = {
    "method": "get",
    "url": "https://api.example.com/data",
    "params": {"page": 1, "limit": 10}
}

# 动态解包调用
data = api_request(
    request_config["method"],
    request_config["url"],
    **request_config["params"]
)

通过这种设计,代码与具体api解耦,配置变更无需修改核心逻辑,极大提升可维护性。

常见陷阱与错误处理

尽管多重赋值强大,但新手常陷入以下陷阱:

陷阱1:元素数量不匹配

# 错误示例
a, b = [1, 2, 3]  # valueerror: too many values to unpack

# 正确做法
a, b, *c = [1, 2, 3]  # c接收剩余元素

陷阱2:嵌套结构不匹配

# 错误示例
(x, y), z = [1, 2, 3]  # typeerror: cannot unpack non-iterable int object

# 正确结构
(x, y), z = [[1, 2], 3]  # 需要匹配嵌套结构

陷阱3:字典解包顺序问题

在python 3.6之前,字典不保证顺序,可能导致意外结果:

# python 3.5及更早版本
user = {"name": "alex", "age": 25}
a, b = user  # 顺序不确定!

# 安全做法(所有版本)
a, b = user.keys()  # 显式获取键列表

从python 3.7开始,字典保持插入顺序,但为兼容性考虑,建议明确使用.keys().values()

陷阱4:生成器解包的消耗问题

gen = (x for x in range(3))
a, b, c = gen  # 正常
print(a, b, c)  # 0 1 2

# 但生成器只能遍历一次
d, e, f = gen  # valueerror: not enough values to unpack

解决方案:将生成器转为列表再解包:

gen = (x for x in range(3))
data = list(gen)
a, b, c = data

错误处理最佳实践

try:
    a, b, c = get_data()
except valueerror as e:
    # 检查错误类型
    if "too many" in str(e):
        print("数据过多,请检查输入格式")
    elif "not enough" in str(e):
        print("数据不足,需要至少3个字段")
    else:
        raise

更健壮的方式是预先验证数据长度:

data = get_data()
if len(data) != 3:
    handle_error()
else:
    a, b, c = data

高级技巧:嵌套解包与模式匹配

python 3.10引入的结构模式匹配(structural pattern matching)将解包能力提升到新高度。虽然这不是传统赋值,但思想一脉相承:

# python 3.10+ 的match-case
def process_point(point):
    match point:
        case (0, 0):
            print("origin")
        case (x, 0):
            print(f"x-axis at {x}")
        case (0, y):
            print(f"y-axis at {y}")
        case (x, y):
            print(f"point at ({x}, {y})")

process_point((3, 4))  # 输出: point at (3, 4)

在传统代码中,我们可以用嵌套解包模拟类似效果:

# 传统方式处理坐标
x, y = (3, 4)
if x == 0 and y == 0:
    print("origin")
elif y == 0:
    print(f"x-axis at {x}")
elif x == 0:
    print(f"y-axis at {y}")
else:
    print(f"point at ({x}, {y})")

更复杂的嵌套解包示例:

# 解析嵌套api响应
response = {
    "status": "success",
    "data": {
        "user": {
            "id": 101,
            "name": "taylor"
        },
        "items": [1, 2, 3]
    }
}

# 多层解包
status = response["status"]
user_id = response["data"]["user"]["id"]
user_name = response["data"]["user"]["name"]
first_item = response["data"]["items"][0]

# 一行解包(需python 3.10+)
match response:
    case {"status": "success", 
          "data": {"user": {"id": uid, "name": uname},
                   "items": [first, *rest]}}:
        print(f"user {uname}({uid}) has item {first}")

# 传统解包(所有版本)
status = response["status"]
if status == "success":
    data = response["data"]
    user = data["user"]
    items = data["items"]
    uid, uname = user["id"], user["name"]
    first, *rest = items

嵌套解包的黄金法则:保持层级不超过3层。过度嵌套会降低可读性,此时应考虑重构数据结构或使用专门的解析函数。

实战案例:从配置文件加载参数

让我们通过一个完整案例,展示多重赋值在实际项目中的应用。假设需要从yaml配置文件加载应用设置:

# config.yaml
server:
  host: "0.0.0.0"
  port: 8000
  ssl: true
database:
  url: "postgres://user:pass@localhost/db"
  timeout: 30
features:
  - "auth"
  - "analytics"
  - "notifications"

传统加载方式可能如下:

import yaml

with open("config.yaml") as f:
    config = yaml.safe_load(f)

# 逐层提取
host = config["server"]["host"]
port = config["server"]["port"]
ssl_enabled = config["server"]["ssl"]
db_url = config["database"]["url"]
# ... 其他参数

使用多重赋值优化:

import yaml

with open("config.yaml") as f:
    config = yaml.safe_load(f)

# 服务器配置
server = config["server"]
(host, port, ssl_enabled) = (server["host"], server["port"], server["ssl"])

# 数据库配置(更简洁的解包)
db_url, timeout = config["database"]["url"], config["database"]["timeout"]

# 功能列表(扩展解包)
*enabled_features, = config["features"]  # 等价于 enabled_features = config["features"]

print(f"server: {host}:{port}, ssl: {ssl_enabled}")
print(f"database: {db_url}, timeout: {timeout}s")
print(f"features: {', '.join(enabled_features)}")

进一步优化,使用嵌套解包:

# 一行解包服务器配置(python 3.10+)
(host, port, ssl_enabled) = (config["server"][k] for k in ["host", "port", "ssl"])

# 或使用字典解包
server = config["server"]
host, port, ssl_enabled = [server[k] for k in ("host", "port", "ssl")]

对于更复杂的场景,可以创建专门的解析函数:

def parse_config(config):
    # 服务器配置
    server = config["server"]
    db = config["database"]
    
    return {
        "host": server["host"],
        "port": server["port"],
        "ssl": server["ssl"],
        "db_url": db["url"],
        "timeout": db["timeout"],
        "features": config["features"]
    }

# 一次性解包所有配置
app_config = parse_config(config)
host, port, ssl, db_url, timeout, features = (
    app_config[k] for k in ["host", "port", "ssl", "db_url", "timeout", "features"]
)

这种模式将配置解析逻辑集中管理,主流程保持清晰。根据python最佳实践指南,将配置处理封装为函数是推荐做法,它提高了代码复用性和可测试性。

性能考量:解包操作的效率真相

多重赋值是否影响性能?让我们通过基准测试揭示真相:

import timeit

# 交换变量的两种方式
def swap_with_temp():
    a = 1
    b = 2
    temp = a
    a = b
    b = temp

def swap_with_unpacking():
    a = 1
    b = 2
    a, b = b, a

# 测试执行时间
temp_time = timeit.timeit(swap_with_temp, number=1000000)
unpack_time = timeit.timeit(swap_with_unpacking, number=1000000)

print(f"临时变量: {temp_time:.6f}s")
print(f"解包交换: {unpack_time:.6f}s")

典型输出:

临时变量: 0.085231s
解包交换: 0.072846s

结果表明:解包交换略快于临时变量。这是因为cpython对元组交换进行了特殊优化,避免了创建临时变量的开销。

更全面的测试(解包 vs 索引访问):

data = list(range(1000))

def index_access():
    total = 0
    for i in range(len(data)):
        total += data[i]
    return total

def unpacking():
    total = 0
    for x in data:
        total += x
    return total

print("索引访问:", timeit.timeit(index_access, number=1000))
print("解包迭代:", timeit.timeit(unpacking, number=1000))

输出:

索引访问: 0.182345s
解包迭代: 0.123789s

关键结论:

  • 迭代时直接解包比索引访问快约30%
  • 变量交换时解包略快于临时变量
  • ⚠️ 复杂嵌套解包可能增加少量开销(但可读性收益通常大于性能损失)

在99%的实际应用中,这些差异微不足道。根据python性能分析指南,优先选择可读性高的写法,仅在性能关键路径进行优化。

与其他语言的对比:python的独特优势

对比其他主流语言,python的多重赋值机制有何特点?

特性pythonjavascriptjavago
基础多重赋值a, b = 1, 2[a, b] = [1, 2]❌ 需临时变量a, b := 1, 2
扩展解包a, *b, c = [1,2,3]const [a, ...b, c] = arra, b, c := 1, 2, 3
字典解包k1, k2 = dconst {k1, k2} = obj
函数返回多值✅ 元组解包✅ 数组/对象解包✅ 通过对象✅ 原生支持

javascript在es6后引入了类似的解构赋值,但python的扩展解包(*操作符)更灵活。例如在js中:

// javascript解构
const [first, ...middle, last] = [1,2,3,4]; // 语法错误!

而python允许星号出现在任意位置:

first, *middle, last = [1,2,3,4]  # 完全合法

java则完全缺乏此类特性,必须通过创建自定义对象或使用临时变量:

// java实现多返回值
class result {
    int a;
    string b;
    // 构造函数等
}

result getresult() {
    return new result(1, "text");
}

// 调用
result res = getresult();
int a = res.a;
string b = res.b;

这种对比凸显了python在数据处理方面的简洁优势。正如python设计哲学所述:“simple is better than complex”(简单优于复杂)。

代码风格建议:写出pythonic的解包代码

如何写出既高效又符合社区规范的多重赋值代码?遵循以下原则:

1. 保持简洁但不过度压缩

# 不推荐:过度压缩降低可读性
a, b, c, d, e = 1, 2, 3, 4, 5

# 推荐:按逻辑分组
x, y = 1, 2
width, height = 100, 200

2. 避免深层嵌套

# 反面示例:三层嵌套难以理解
((a, b), (c, d)), e = nested_data

# 正面示例:分步解包
top_level = nested_data
inner1, inner2, e = top_level
a, b = inner1
c, d = inner2

3. 为解包结果添加注释

# 解包数据库配置
db_host, db_port, db_name = get_db_config()
# ^ host   ^ port  ^ database name

4. 在函数返回时明确命名

# 不推荐
def get_user():
    return user_id, username, email

# 推荐(使用命名元组或数据类)
from collections import namedtuple
user = namedtuple("user", ["id", "name", "email"])

def get_user():
    return user(id=101, name="alex", email="alex@example.com")

# 调用时解包
user_id, username, _ = get_user()  # 忽略email

5. 合理使用下划线占位

当某些值不需要时,用_表示忽略:

# 忽略中间值
first, _, last = [1, 2, 3]

# 忽略多个值
head, *_, tail = range(10)

6. 保持一致性

在项目中统一解包风格:

  • 全部使用显式括号:(a, b) = (1, 2)
  • 或全部省略括号:a, b = 1, 2

根据pep 8,后者(省略括号)是更pythonic的选择。

教育意义:培养数据思维的关键

多重赋值不仅是语法糖,更是培养数据结构思维的重要工具。当开发者习惯用解包处理数据时,会自然形成以下思维模式:

  1. 数据即结构:将输入视为可分解的结构化数据
  2. 声明式思维:关注"要什么"而非"如何取"
  3. 模式识别:快速识别数据中的重复模式

例如处理时间序列数据:

# 传统索引方式
timestamps = data[0]
values = data[1]

# 解包思维
timestamps, values = data

后者直接表达了数据的二元结构,无需关注底层实现。这种思维转变对数据科学家尤其重要,因为:

  • 数据处理的核心是结构转换
  • 清晰的结构表达减少认知负荷
  • 与pandas等库的向量化操作理念一致

正如计算机科学家alan kay所言:“show me your flowchart and conceal your tables, and i shall continue to be mystified. show me your tables, and i won’t usually need your flowchart; it’ll be obvious.”(给我看你的流程图而隐藏你的数据结构,我仍会困惑;给我看你的数据结构,通常我不需要流程图,一切将一目了然。)

未来展望:python赋值机制的演进

python的赋值机制仍在持续进化。值得关注的未来方向:

pep 634: 结构模式匹配

虽然已随python 3.10引入,但其与解包的深度整合仍在探索中:

match response:
    case {"status": "ok", "data": [x, y, *rest]}:
        process(x, y)

赋值表达式(海象运算符)

python 3.8引入的:=可与解包结合:

# 在条件中解包
if (data := get_data()) and (a, b := data[0], data[1]):
    print(a, b)

类型提示增强

随着类型系统完善,解包将获得更好的类型推导:

from typing import tuple

def get_point() -> tuple[float, float]:
    return (1.5, 2.5)

x: float
y: float
x, y = get_point()  # 类型检查器能推断x/y为float

这些演进表明:解包作为核心数据处理范式,将在python中扮演越来越重要的角色。开发者应持续关注python增强提案中的相关讨论,保持技术前瞻性。

总结与行动建议

多重赋值是python简洁哲学的完美体现。通过本文的系统梳理,我们掌握了:

  • 🌟 基础多重赋值:并行赋值的简洁语法
  • 🌟 序列解包:元组、列表、字符串的灵活处理
  • 🌟 扩展解包*操作符处理动态长度数据
  • 🌟 字典与函数参数解包:处理复杂结构的利器
  • 🌟 实战模式:从配置解析到api调用的完整应用

要真正内化这些知识,建议采取以下行动:

  1. 重构现有代码:找出项目中使用索引或临时变量的地方,尝试用解包优化
  2. 编写解包挑战:故意创建嵌套数据结构,练习各种解包技巧
  3. 参与开源项目:在github上查看知名项目的解包用法(搜索a, b =等模式)
  4. 创建速查表:整理本文要点,作为日常参考

记住:优秀的代码不是一蹴而就的,而是通过持续精炼达成的。正如python之禅所述:“now is better than never”(做比不做好)。从今天开始,在下一个代码片段中尝试使用多重赋值,体验python带来的开发愉悦感!

以上就是python一次为多个变量赋值的简便方法的详细内容,更多关于python为多个变量赋值的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com