2012-04-03 4 views

Antwort

13

in den Klammern, die die Funktion Call-Betreiber bilden, ist das Komma nicht für Tupel Aufbau, sondern auch für Argumente zu trennen. Somit entspricht type(3,)type(3). Ein zusätzliches Komma am Ende der Argumentliste wird von der Grammatik erlaubt. Sie benötigen ein zusätzliches Paar von Pars ein Tupel zu bauen:

>>> def f(x): 
...  print x 
... 
>>> f(3) 
3 
>>> f(3,) 
3 
>>> f((3,)) 
(3,) 
6

Das eingebaute type() ist eine Funktion, daher wird das Komma als Argumententrennzeichen und nicht als Tupelkonstruktor analysiert.

>>> type(3,) 
<type 'int'> 

>>> type((3,)) 
<type 'tuple'> 
+1

Unabhängig davon, wie viele Argumente 'f' benötigt werden, wird das Komma als Argumenttrennzeichen analysiert. –

+0

Sie haben Recht - ich habe das nur an meinem Ende verifiziert. Wird bearbeiten. –

2

Ich vermute, Python ein Komma in Funktionsargumente ignoriert:

def f (a): 
    print a 
    print type(a) 

>>> f(3,) 
3 
<type 'int'> 

Mit kommagetrennte Werte ohne Klammern ein Tupel zu erstellen, ist ein Trick, der nicht überall funktioniert. Listenkomprehensionen ist ein gutes Beispiel:

>>> [a,a*2 for a in range(4)] 
    File "<stdin>", line 1 
    [a,a*2 for a in range(4)] 
      ^

Sie haben, dies zu tun:

>>> [(a,a*2) for a in range(4)] 
[(0, 0), (1, 2), (2, 4), (3, 6)] 

Liste auspacken funktioniert gut, aber so ist es ein Bit-Variable, wo unbegrenzt, durch Komma getrennte Werte sind erlaubt:

>>> [(a,b) for a, b in zip(range(4),range(4))] 
[(0, 0), (1, 1), (2, 2), (3, 3)] 
0

in func(bunch_of_args) Sie dürfen das letzte arg mit einem Komma folgen, genau wie in

alist = [1, 2, 3, ] 
Verwandte Themen