Trying to figure out the data type from the code snippet

Cameron Simpson cs at cskk.id.au
Tue Jan 29 23:12:55 EST 2019


On 30Jan2019 04:24, Chupo <bad_n_mad at yahoo.com> wrote:
>I am trying to figure out what data type is assigned to variable p in
>this code snippet:
>
>for p in game.players.passing():
>    print p, p.team, p.passing_att, p.passer_rating()

Well, Python comes with a type() builtin function:

  print type(p)

>Results:
>
>R.Wilson SEA 29 55.7
>J.Ryan SEA 1 158.3
>A.Rodgers GB 34 55.8
>
>https://stackoverflow.com/q/28056171/1324175
>
>If p is a string ('print p' prints names of the players) then how is
>possible to access p.something?

Well, if p is just a string, then you can't: strings don't have the 
attributes (".something") you're using. Thereofre p is not a string. (It 
_could_ be a subtype of str, but that is pretty unlikely.

What you're probably wanting to know is that the print statement calls 
str(x) for every "x" which it is asked to print, and that "p" has a 
__str__ method returning the "R.Wilson" string (etc). All object's have 
an __str__ method, and for "p" it has been defined to produce what looks 
like a player's name.

>If p is an object, then how can p return a string?

"p" is definitely an object: all values in Python are objects.

"p" doesn't return a string, it returns "p".

However, "print" actually prints "str(p)". So it is call's p's __str__ 
method to get a string to print out.

Think of it this way: print's purpose it to print things out, and it 
prints to the output which is text. You can only write strings to text, 
so print converts _everything_ it is given to a string. That "55.7" in 
your output: that is a string representing a floating point value.

Cheers,
Cameron Simpson <cs at cskk.id.au>



More information about the Python-list mailing list