A Pythonban egy str Unicode-kódpontok módosíthatatlan sorozata.
Ezek közé tartozhatnak betűk, diakritikus jelek, pozicionáló karakterek, számok, pénznemszimbólumok, emodzsik, írásjelek, szóköz- és sortöréskarakterek, és még sok más.
Ha mélyebben szeretnéd megérteni, milyen információt kódol egy string (vagyis »honnan tudja a számítógép, hogyan fordítsa le a nullákat és egyeseket betűkké?«), ez a blogbejegyzés ma is hasznos.
A Python dokumentációjában is található egy nagyon részletes unicode HOWTO, amely bemutatja, hogyan támogatja a Python az Unicode specifikációt a str, bytes és re modulokban, kitér a területi beállítások szempontjaira, valamint néhány gyakori kódolási és fordítási problémára.
A stringek minden általános sorozatműveletet megvalósítanak, és bejárhatók for item in <str> vagy for index, item in enumerate(<str>) szintaxissal.
Az egyes kódpontokra (1 hosszúságú stringekre) balról 0-based index számmal, jobbról -1-based index számmal hivatkozhatsz.
A stringek összefűzhetők <str> + <other str> vagy <str>.join(<iterable>) módon, és feloszthatók a <str>.split(<separator>) segítségével.
Emellett számos további formázási, összeállítási és sablonozási lehetőséget is kínálnak.
Egy str literál aposztróffal (') vagy idézőjellel (") hozható létre. A \ escape-karakter szükség szerint elérhető.
>>> single_quoted = 'These allow "double quoting" without "escape" characters.'
>>> double_quoted = "These allow embedded 'single quoting', so you don't have to use an 'escape' character."
A többsoros stringeket ''' vagy """ jelekkel hozzuk létre.
>>> triple_quoted = '''Three single quotes or "double quotes" in a row allow for multi-line string literals.
Line break characters, tabs and other whitespace is fully supported. Remember - The escape "\" character is also available if needed (as can be seen below).
You\'ll most often encounter multi-line strings as "doc strings" or "doc tests" written just below the first line of a function or class definition.
They\'re often used with auto documentation ✍ tools.
'''
A str(<object>) konstruktor segítségével más objektumokból hozhatsz létre vagy alakíthatsz stringet:
>>> my_number = 42
>>> str(my_number)
...
"42"
Bár a str(<object>) konstruktor használható stringgé alakításra vagy konvertálásra, nem fogja bejárni és nem bontja ki az objektumot.
Ez eltér más adattípusok, például a list(), set(), dict() vagy tuple() konstruktorainak viselkedésétől, és meglepő eredményekkel járhat.
>>> numbers = [1,3,5,7]
>>> str(numbers)
...
'[1,3,5,7]'
Egy str kódpontjaira balról 0-based index számmal hivatkozhatsz:
creative = '창의적인'
>>> creative[0]
'창'
>>> creative[2]
'적'
>>> creative[3]
'인'
Az indexelés jobbról is működik, -1-based index számmal kezdve:
creative = '창의적인'
>>> creative[-4]
'창'
>>> creative[-2]
'적'
>>> creative[-1]
'인'
A Pythonban nincs külön »karakter« vagy »rune« típus, ezért egy string indexelése egy 1 hosszúságú új str-t eredményez:
>>> website = "exercism"
>>> type(website[0])
<class 'str'>
>>> len(website[0])
1
>>> website[0] == website[0:1] == 'e'
True
Részstringeket szeleteléssel választhatsz ki a <str>[<start>:<stop>:<step>] használatával, így új string jön létre.
Az eredmény nem tartalmazza a stop indexet.
Ha nincs megadva start, akkor a kezdőindex 0 lesz.
Ha nincs megadva stop, akkor a stop index a string vége lesz.
moon_and_stars = '🌟🌟🌙🌟🌟⭐'
>>> moon_and_stars[1:4]
'🌟🌙🌟'
>>> moon_and_stars[:3]
'🌟🌟🌙'
>>> moon_and_stars[3:]
'🌟🌟⭐'
>>> moon_and_stars[:-1]
'🌟🌟🌙🌟🌟'
>>> moon_and_stars[:-3]
'🌟🌟🌙'
A stringek kisebb stringekre is bonthatók a <str>.split(<separator>) segítségével, amely részstringek list-jét adja vissza.
Ha a <str>.split() metódust argumentum nélkül használod, a stringet whitespace mentén bontja fel.
>>> cat_ipsum = "Destroy house in 5 seconds command the hooman."
>>> cat_ipsum.split()
...
['Destroy', 'house', 'in', '5', 'seconds', 'command', 'the', 'hooman.']
>>> cat_words = "feline, four-footed, ferocious, furry"
>>> cat_words.split(',')
...
['feline', ' four-footed', ' ferocious', ' furry']
>>> colors = """red,
orange,
green,
purple,
yellow"""
>>> colors.split(',\n')
['red', 'orange', 'green', 'purple', 'yellow']
A stringek a + operátorral fűzhetők össze.
Ezt a módszert azonban mértékkel érdemes használni, mert nem túl hatékony, és nehezen karbantartható.
language = "Ukrainian"
number = "nine"
word = "дев'ять"
sentence = word + " " + "means" + " " + number + " in " + language + "."
>>> print(sentence)
...
"дев'ять means nine in Ukrainian."
Ha egy list, tuple, set vagy más gyűjtemény elemeit egyetlen str-be kell összefűzni, a <str>.join(<iterable>) jobb választás:
# str.join() makes a new string from the iterables elements.
>>> chickens = ["hen", "egg", "rooster"] # Lists are iterable.
>>> ' '.join(chickens)
'hen egg rooster'
# Any string can be used as the joining element.
>>> ' :: '.join(chickens)
'hen :: egg :: rooster'
>>> ' 🌿 '.join(chickens)
'hen 🌿 egg 🌿 rooster'
# Any iterable can be used as input.
>>> flowers = ("rose", "daisy", "carnation") # Tuples are iterable.
>>> '*-*'.join(flowers)
'rose*-*daisy*-*carnation'
>>> flowers = {"rose", "daisy", "carnation"} # Sets are iterable, but output order is not guaranteed.
>>> '*-*'.join(flowers)
'rose*-*carnation*-*daisy'
>>> phrase = "This is my string" # Strings are iterable, but be careful!
>>> '..'.join(phrase)
'T..h..i..s.. ..i..s.. ..m..y.. ..s..t..r..i..n..g'
# Separators are inserted **between** elements, but can be any string (including spaces).
# This can be exploited for interesting effects.
>>> under_words = ['under', 'current', 'sea', 'pin', 'dog', 'lay']
>>> separator = ' ⤴️ under' # Note the leading space, but no trailing space.
>>> separator.join(under_words)
'under ⤴️ undercurrent ⤴️ undersea ⤴️ underpin ⤴️ underdog ⤴️ underlay'
# The separator can be composed different ways, as long as the result is a string.
>>> upper_words = ['upper', 'crust', 'case', 'classmen', 'most', 'cut']
>>> separator = ' 🌟 ' + upper_words[0] # This becomes one string, similar to ' ⤴️ under'.
>>> separator.join(upper_words)
'upper 🌟 uppercrust 🌟 uppercase 🌟 upperclassmen 🌟 uppermost 🌟 uppercut'
A stringek minden általános sorozatműveletet támogatnak.
Az egyes kódpontokon for item in <str> ciklussal mehetsz végig.
Az indexeket az elemekkel együtt for index, item in enumerate(<str>) ciklussal járhatod be.
>>> exercise = 'လေ့ကျင့်'
# Note that there are more code points than perceived glyphs or characters.
# Care should be used when iterating over languages that use
# combining characters, or when dealing with emoji.
>>> for code_point in exercise:
... print(code_point)
...
လ
ေ
့
က
ျ
င
်
့
# Using enumerate will give both the value and index position of each element.
>>> for index, code_point in enumerate(exercise):
... print(index, ": ", code_point)
...
0 : လ
1 : ေ
2 : ့
3 : က
4 : ျ
5 : င
6 : ်
7 : ့
A Python gazdag stringmetódus-készletet kínál, amelyek segítenek a keresésben, tisztításban, felosztásban, átalakításban, fordításban és sok más műveletben. E módszerek közül néhányat egy másik feladatban mutatunk be.
A Python emellett gazdag eszközkészletet kínál a stringek formázásához és sablonozásához, valamint kifinomultabb szövegfeldolgozást tesz lehetővé a re (reguláris kifejezések), a difflib (sorozat-összehasonlítás) és a textwrap modulokon keresztül. Ha szeretnél egy remek bevezetőt a Python stringformázásába, nézd meg ezt a Real Python-os bejegyzést. A stringmetódusok bevezetőjéhez pedig a Strings and Character Data in Python oldalt ajánljuk ugyanezen a weboldalon.
A str (szöveges sorozat) mellett a Pythonnak megfelelő bináris sorozattípusai is vannak, amelyeket a bináris adatszolgáltatások alatt foglaltunk össze: bytes (bináris sorozat), bytearray és memoryview a bináris adatok hatékony tárolásához és kezeléséhez.
Emellett a Streams lehetővé teszi bináris adatok küldését és fogadását hálózati kapcsolaton keresztül, visszahívások használata nélkül.