<p>不清楚你想用<code>sys.argv</code>做什么。它是由shell和Python解释器创建的字符串列表。通常它是读取的,就像任何列表一样,但也可以修改。你知道吗</p>
<pre><code>In [16]: import sys
In [17]: sys.argv
Out[17]:
['/usr/local/bin/ipython3',
' pylab',
'qt',
' nosep',
' term-title',
' InteractiveShellApp.pylab_import_all=False']
In [18]: input(sys.argv)
['/usr/local/bin/ipython3', ' pylab', 'qt', ' nosep', ' term-title', ' InteractiveShellApp.pylab_import_all=False']1 2 3
Out[18]: '1 2 3'
</code></pre>
<p>当用作<code>input</code>的参数时,它只是作为提示字符串。这样做有什么意义?我们从<code>input</code>得到的是一个字符串(至少在Py3中,Py2是不同的)。你知道吗</p>
<pre><code>a,b,c = ...
</code></pre>
<p>像这样拆箱是不可饶恕的。如果在RHS上给定了错误的项数,则会引发错误。你知道吗</p>
<pre><code>In [19]: a,b,c = input('3 items: ').split() # split input string on space
3 items: a b c
In [20]: a,b,c = input('3 items: ').split()
3 items: d e
-
ValueError Traceback (most recent call last)
<ipython-input-20-7dacf1e93e8c> in <module>
> 1 a,b,c = input('3 items: ').split()
ValueError: not enough values to unpack (expected 3, got 2)
In [21]: a,b,c = input('3 items: ').split()
3 items: 1 2 3 4
-
...
ValueError: too many values to unpack (expected 3)
</code></pre>
<p>所以我看到了三个问题:</p>
<ul>
<li>什么是<code>sys.argv</code>以及如何使用它的问题</li>
<li><code>input</code>do的论点是什么</li>
<li>开箱包装的使用</li>
</ul>
<p>===</p>
<p>我想你对<code>input</code>做什么以及解包是如何工作的感到困惑:</p>
<pre><code>In [67]: a,b,c = input('3 numbers: ')
3 numbers: 123
In [68]: a
Out[68]: '1'
In [69]: b
Out[69]: '2'
In [70]: c
Out[70]: '3'
In [71]: a,b,c = input('3 numbers: ')
3 numbers: 1 2 3
...
ValueError: too many values to unpack (expected 3)
In [74]: a,b,c = input('3 numbers: ')
3 numbers: 1234
...
ValueError: too many values to unpack (expected 3)
</code></pre>
<p>使用<code>input</code>相当于:</p>
<pre><code>In [72]: a,b,c='123'
</code></pre>
<p>字符串中的3个字符在3个变量中分开。如果提供的字符串较长(或较短),则与解包所需的3个变量不匹配。你知道吗</p>
<hr/>
<p>或者复制您键入“mn nn nj”的示例:</p>
<pre><code>In [75]: input(['a','list','of','strings'])
['a', 'list', 'of', 'strings']mn nn nj
Out[75]: 'mn nn nj'
In [76]: a,b,c=_ # trying to unpack that string to 3 variables
...
ValueError: too many values to unpack (expected 3)
In [77]: a,b,c=_.split() # split on white space
In [78]: a,b,c
Out[78]: ('mn', 'nn', 'nj')
</code></pre>