Πώς μπορώ να δω τον τύπο μιας μεταβλητής, αν είναι 32 bit χωρίς πρόσημο, 16 bit με πρόσημο κ.λπ.
Πώς το βλέπω;
Μπορεί να ψάχνετε για τη συνάρτηση type()
.
Δείτε τα παρακάτω παραδείγματα, αλλά δεν υπάρχει τύπος "unsigned" στην Python όπως ακριβώς και στη Java.
Θετικός ακέραιος:
>>> v = 10
>>> type(v)
<type 'int'>
Μεγάλος θετικός ακέραιος:
>>> v = 100000000000000
>>> type(v)
<type 'long'>
Αρνητικός ακέραιος:
>>> v = -10
>>> type(v)
<type 'int'>
Κυριολεκτική ακολουθία χαρακτήρων:
>>> v = 'hi'
>>> type(v)
<type 'str'>
Ακέραιος αριθμός κινητής υποδιαστολής:
>>> v = 3.14159
>>> type(v)
<type 'float'>
print type(variable_name)
Συνιστώ επίσης ανεπιφύλακτα τον διαδραστικό διερμηνέα IPython όταν αντιμετωπίζετε ερωτήσεις όπως αυτή. Σας επιτρέπει να πληκτρολογήσετε variable_name?
και θα σας επιστρέψει μια ολόκληρη λίστα με πληροφορίες για το αντικείμενο, συμπεριλαμβανομένου του τύπου και της συμβολοσειράς doc για τον τύπο.
π.χ.
In [9]: var = 123
In [10]: var?
Type: int
Base Class: <type 'int'>
String Form: 123
Namespace: Interactive
Docstring:
int(x[, base]) -> integer
Μετατρέψτε μια συμβολοσειρά ή έναν αριθμό σε ακέραιο αριθμό, αν είναι δυνατόν. Ένα όρισμα κινητής υποδιαστολής θα περικόπτεται προς το μηδέν (αυτό δεν περιλαμβάνει μια συμβολοσειρά αναπαράσταση ενός αριθμού κινητής υποδιαστολής!) Κατά τη μετατροπή μιας συμβολοσειράς, χρησιμοποιήστε την προαιρετική βάση. Είναι σφάλμα να δώσετε μια βάση όταν μετατρέπετε ένα μη συμβολοσειράς. Εάν το όρισμα είναι εκτός του εύρους των ακεραίων, ένα αντικείμενο long θα επιστραφεί αντί αυτού.
Η ερώτηση είναι κάπως διφορούμενη - δεν είμαι σίγουρος τι εννοείτε με τον όρο "προβολή". Αν προσπαθείτε να ερωτήσετε τον τύπο ενός εγγενούς αντικειμένου της Python, η απάντηση του @atzz'θα σας κατευθύνει προς τη σωστή κατεύθυνση.
Ωστόσο, αν προσπαθείτε να δημιουργήσετε αντικείμενα της Python που έχουν τη σημασιολογία των πρωτόγονων τύπων της C, (όπως uint32_t
, int16_t
), χρησιμοποιήστε την ενότητα struct
. Μπορείτε να προσδιορίσετε τον αριθμό των bits σε ένα δεδομένο primitive τύπου C με τον εξής τρόπο:
>>> struct.calcsize('c') # char
1
>>> struct.calcsize('h') # short
2
>>> struct.calcsize('i') # int
4
>>> struct.calcsize('l') # long
4
Αυτό αντικατοπτρίζεται επίσης στην ενότητα array
, η οποία μπορεί να δημιουργήσει πίνακες από αυτούς τους τύπους χαμηλότερου επιπέδου:
>>> array.array('c').itemsize # char
1
Ο μέγιστος υποστηριζόμενος ακέραιος αριθμός (Python 2's int
) δίνεται από sys.maxint.
>>> import sys, math
>>> math.ceil(math.log(sys.maxint, 2)) + 1 # Signedness
32.0
Υπάρχει επίσης το sys.getsizeof, το οποίο επιστρέφει το πραγματικό μέγεθος του αντικειμένου Python στην υπολειπόμενη μνήμη:
>>> a = 5
>>> sys.getsizeof(a) # Residual memory.
12
Για δεδομένα float και δεδομένα ακριβείας, χρησιμοποιήστε το sys.float_info:
>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)