使用默认值解包

大家好,
可能是一个愚蠢的问题,但我没有找到优雅的东西
到目前为止的问题.
在perl中,您可以将列表的元素解放到与类似的变量
在Python
(a,b,c = [0,1,2]),但是变量的数量不需要适合
数字
列表元素.
这意味着,如果您的列表元素变量填充较少
" undef'(python中无),如果您有更多的列表元素
其余的被忽略.
我如何在优雅而快速的情况下与Python实现这种行为
方法?
此致
Andreas模拟

# 回答1


MCA写道:
Python 3.0有一些类似的东西.多余的值可以约束
(作为列表)到最后一个变量:
a,b,*c = [1,2,3,4,5]
将导致含有c [3,4,5].
在Python 2.x中,您不能直接这样做,但是您应该能够
创建一个延长或缩短参数元组的函数
到正确的长度,因此您可以做:
a,c,b = fix(1,2)
d,e,f = fix(1,2,3,4)
但是,该功能不知道左侧的长度
序列,因此必须以额外的参数或硬参数传递
编码.
加里·赫伦
# 回答2


在7月17日,18:33,加里·赫伦(Gary Herron)
嗨,加里,
谢谢你的答案.
您知道python在解开包装时使用的"协议"吗?
这是直接的评估吗?还是迭代?
此致
Andreas模拟
# 回答3


MCA写道:
嗨,加里,
谢谢你的答案.
您知道python在解开包装时使用的"协议"吗?
这是直接的评估吗?还是迭代?
我都认为,但是 *直接 *分配是什么意思?
这样的作业可以是任何值得一提的(我认为).让我们测试:
(关于互动python会话的好处,它确实是
易于测试.)
Trackback(最近的最新电话):
文件" ",第1行,<模块>
ValueError:太多的值无法打开包装
Trackback(最近的最新电话):
文件" ",第1行,<模块>
ValueError:需要3个以上的值才能解开包.
Trackback(最近的最新电话):
文件" ",第1行,<模块>
ValueError:太多的值无法打开包装
Trackback(最近的最新电话):
文件" ",第1行,<模块>
ValueError:需要3个以上的值才能解开包.
我将其称为直接分配,并使用任何觉得均可提供的值.
加里·赫伦
# 回答4


MCA写道:
至少在cpython中,这两者都像普通的打开包装和多个
任务.通过迭代将其拆开成碎片(与
了解目标的数量,哪个是CATCHALL).这
然后直接绑定目标.
#第一个标准作业
1 0 LOAD_NAME 0(范围)
3 load_const 0(3)
6 call_function 1
9 uncack_sequence 3
12 store_name 1(a)
15 Store_name 2(b)
18 store_name 3(c)
21 load_const 1(无)
24 return_value
#现在由分配出演
1 0 LOAD_NAME 0(范围)
3 load_c ONST 0(3) 6 call_function 1 9 uncack_ex 2 12 store_name 1(a) 15 Store_name 2(b) 18 store_name 3(c) 21 load_const 1(无) 24 return_value 唯一的区别是uncack_ex(趋于)而不是uncack_sequence. tne unvack_ex代码尚未在DIS模块文档中. 但是一些反向工程揭示了参数含义: a, *b,c和 *a,b,c给出参数257和512而不是2. 将2,257,512分隔为字节,得分为0,2; 1,1; 2,0. a, *b和 *a,b给出1、256或0,1; 1,0. 两个字节 是标明目标之后和之前的目标数. Terry Jan Reedy

标签: python

添加新评论