Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > pl.comp.programming > #29050

Re: python i stringi

From Piotr Chamera <piotr_chamera@poczta.onet.pl>
Newsgroups pl.comp.programming
Subject Re: python i stringi
Date 2016-10-06 13:22 +0200
Organization A noiseless patient Spider
Message-ID <nt5c60$co5$1@dont-email.me> (permalink)
References (2 earlier) <zdk42d2gkady.dlg@tyczka.com> <aba1993f-ebae-4a5c-88d3-42b46e803a3a@googlegroups.com> <8uxdbqmk73pz.dlg@tyczka.com> <nt584q$gi$1@dont-email.me> <h6zbunvyf6b0.dlg@tyczka.com>

Show all headers | View raw


W dniu 2016-10-06 o 12:32, Roman Tyczka pisze:
> On Thu, 6 Oct 2016 12:14:00 +0200, Piotr Chamera wrote:
>
>>> Jeśli chcesz mi utrzeć nosa tym googlem to ...hmmm, niepotrzebnie. Od
>>> googla zacząłem. Ale ok, może grupa dyskusyjna służy tylko do kłótni o
>>> pascala.
>>> Tak czy owak problem rozwiązałem, nie konwertując do ascii czy tablicy
>>> bajtów, ale poprawnie deklarując typ unicodowego stringa. I na taką
>>> praktyczną radę liczyłem.
>>
>> Dla jasności – nie zadeklarowałeś typu unicodowego stringa, ale za
>> pomocą metody (encode) obiektu (ustr, typu unicode) utworzyłeś nowy
>> ciąg bajtów reprezentujący ten ciąg znaków w kodowaniu, które podałeś
>> jako argument metody. Obiekt pod zmienną „ustr” pozostał niezmieniony.
>
> Obiekt został zmieniony, ale nie w sensie adresu/instancji, lecz zmienił
> się jego stan wewnętrzny, czyli tablica bajtów zawierająca łańcuch :-)

Może trochę namieszałem. Chodzi o to, że do zmiennej ustr, przypisałeś
zupełnie nowy obiekt, ciąg bajtów utworzony przez metodę encode,
zawierający reprezentację stringa w postaci ciągu bajtów zgodnego
z zadanym kodowaniem.

Czyli to zdanie:
 >>> Tak czy owak problem rozwiązałem, nie konwertując do ascii czy
 >>> tablicy bajtów, ale poprawnie deklarując typ unicodowego stringa.
jest nieprawdziwe. Oryginalny obiekt typu unicode nie został zmieniony.

Pamiętaj, że zmienne w pythonie są tylko etykietkami (wskaźnikami) do
obiektów.

Rozważ taki ciąg działań

 >>> ustr = u"test ąę"
 >>> type(ustr)
<type 'unicode'>

 >>> id(ustr)
58766080L
 >>> ustr2 = ustr
 >>> id(ustr2)
58766080L

id obiektów podpiętych pod zmienne jest takie samo, obie pokazują na ten 
sam obiekt

 >>> ustr = ustr.encode('utf-16le')

teraz do ustr przypisaliśmy nowy obiekt o innym id (trzeba pamiętać, że 
w pythonie 2.x typ 'str' i ciąg bajtów to to samo)

 >>> id(ustr)
58767040L
 >>> type(ustr)
<type 'str'>

ale poprzedni obiekt pozostał niezmieniony, chociaż teraz jest już 
przypięty tylko do zmiennej ustr2.

 >>> id(ustr2)
58766080L
 >>> ustr2
u'test \u0105\u0119'

Back to pl.comp.programming | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 09:46 +0200
  Re: python i stringi godek.maciek@gmail.com - 2016-10-06 01:10 -0700
    Re: python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 10:19 +0200
      Re: python i stringi godek.maciek@gmail.com - 2016-10-06 01:32 -0700
        Re: python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 10:44 +0200
          Re: python i stringi Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2016-10-06 12:14 +0200
            Re: python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 12:32 +0200
              Re: python i stringi Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2016-10-06 13:22 +0200
  Re: python i stringi Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2016-10-06 10:57 +0200
    Re: python i stringi Roman Tyczka <noemail@because.no> - 2016-10-06 11:22 +0200
      Re: python i stringi Piotr Chamera <piotr_chamera@poczta.onet.pl> - 2016-10-06 11:50 +0200

csiph-web