type(3,)
restituisce il tipo int, mentreType (3,) restituisce un intero invece di una tupla in python, perché?
t = 3,
type(t)
restituisce il tipo tupla. Perché?
type(3,)
restituisce il tipo int, mentreType (3,) restituisce un intero invece di una tupla in python, perché?
t = 3,
type(t)
restituisce il tipo tupla. Perché?
All'interno delle parentesi che formano l'operatore funzione di chiamata, la virgola non è per costruire tuple, ma per separare gli argomenti. Pertanto, type(3,)
equivale a type(3)
. Una ulteriore virgola alla fine dell'elenco degli argomenti è consentita dalla grammatica. Avete bisogno di un paio di parentesi per costruire una tupla:
>>> def f(x):
... print x
...
>>> f(3)
3
>>> f(3,)
3
>>> f((3,))
(3,)
L'integrato type()
è una funzione, quindi la virgola viene analizzata come separatore di argomenti anziché come un costruttore di tupla.
>>> type(3,)
<type 'int'>
>>> type((3,))
<type 'tuple'>
Ho il sospetto Python ignora una virgola finale in argomenti della funzione:
def f (a):
print a
print type(a)
>>> f(3,)
3
<type 'int'>
Utilizzando valori separati da virgole senza parentesi per creare una tupla è un trucco che non funziona ovunque. Di lista è un buon esempio:
>>> [a,a*2 for a in range(4)]
File "<stdin>", line 1
[a,a*2 for a in range(4)]
^
Devi fare questo:
>>> [(a,a*2) for a in range(4)]
[(0, 0), (1, 2), (2, 4), (3, 6)]
Lista spacchettamento funziona bene, però, quindi è un po 'variabile in cui sono consentiti, i valori non limitati separati da virgole:
>>> [(a,b) for a, b in zip(range(4),range(4))]
[(0, 0), (1, 1), (2, 2), (3, 3)]
in func(bunch_of_args)
si è permesso di seguire l'ultimo arg con una virgola, proprio come in
alist = [1, 2, 3, ]
Indipendentemente dal numero di argomenti 'f' necessari, la virgola verrà analizzata come separatore di argomenti. –
Hai ragione - l'ho appena verificato dalla mia parte. Modificherà. –