pygame - importing GL - very bad...
someone
newsboost at gmail.com
Sat Jan 5 14:49:03 EST 2013
On 01/05/2013 02:27 PM, Chris Angelico wrote:
> On Sun, Jan 6, 2013 at 12:06 AM, someone <newsboost at gmail.com> wrote:
>> In any case I think we understand each other.
>
> That's one of the links I just posted :) It's not just a naming
> difference, though. With Pascal's pass-by-reference semantics, this
> code would act differently:
>
> def foo(x):
> x = 5
>
> a = 2
> foo(a)
> print(a)
>
> Python prints 2, because the assignment to x just rebinds the name
> inside foo. True pass-by-reference actually changes the caller's
> variable. C can achieve this by means of pointers; in Python, you can
I thought that python also used "true" pass-by-reference, although I
haven't figured out exactly when I have this problem. I can just see
that sometimes I get this problem and then I need to copy the variable,
if I don't want the original data of the variable to be overwritten...
> pass and mutate a list, thus:
>
> def foo(x):
> x[0] = 5 # Dereference the pointer, kinda
>
> x=[None] # Declare a pointer variable, ish
> x[0] = 2
> foo(x) # Don't forget to drop the [0] when passing the pointer to
> another function
> print(x[0]) # Prints 5. See? We have pass-by-reference!
Yes, something like this has happened to me in my python code... Not
sure if my example was exactly like this, but I remember something where
I found this to be a problem that I had to fix.
> But otherwise, rebinding names in the function has no effect on
> anything outside. Among other things, this guarantees that, in any
hmm. ok.... So it's not true pass-by-reference like I thought... That's
interesting.
> situation, a name referencing an object can be perfectly substituted
> for any other name referencing the same object, or any other way of
> accessing the object.
>
> def foo(lst):
> lst[0]=len(lst)
>
> x = [10,20,30]
> y = x
> foo(x) # These two...
> foo(y) # ... are identical!
This is something I've experienced from my own coding, I think...
> This is a philosophy that extends through the rest of the language. A
> function returning a list can be directly dereferenced, as can a list
> literal:
>
> def foo():
> return [0,1,4,9,16]
>
> print( ["Hello","world!","Testing","Testing","One","Two","Three"][foo()[2]] )
That prints out "One"... I think I understand - that's interesting too...
> This is a flexibility and power that just doesn't exist in many older
> languages (C and PHP, I'm looking at you). Object semantics make more
> sense than any other system for a modern high level language, which is
> why many of them do things that way.
I agree, that I think python is really great and it's fast to do
something useful. Not sure I still understand exactly all aspects of
this pass-by-value and by-references, but in any case I know enough to
watch out for this problem and once I see I have a problem, I can also
take care of it and solve it by making a copy. I think maybe after 3-6-9
months more of working with python, I should be fully confident with
this. Thanks for taking the time to explain a bit of this to me...
More information about the Python-list
mailing list