Μια str στην Python είναι μια αμετάβλητη ακολουθία από σημεία κώδικα Unicode.
Αυτά μπορεί να περιλαμβάνουν γράμματα, διακριτικά σημάδια, χαρακτήρες τοποθέτησης, αριθμούς, σύμβολα νομισμάτων, emoji, σημεία στίξης, χαρακτήρες διαστήματος και αλλαγής γραμμής και πολλά άλλα.
Για μια εις βάθος ματιά στο τι πληροφορία κωδικοποιεί μια συμβολοσειρά (ή, "πώς ξέρει ένας υπολογιστής να μεταφράζει τα μηδενικά και τους άσσους σε γράμματα;"), αυτή η ανάρτηση σε ιστολόγιο είναι διαχρονικά χρήσιμη.
Η τεκμηρίωση της Python παρέχει επίσης ένα πολύ λεπτομερές unicode HOWTO που συζητά την υποστήριξη της Python για την προδιαγραφή Unicode στα modules str, bytes και re, ζητήματα τοπικών ρυθμίσεων και μερικά συνηθισμένα προβλήματα με την κωδικοποίηση και τη μετάφραση.
Οι συμβολοσειρές υλοποιούν όλες τις κοινές πράξεις ακολουθιών και μπορούν να διατρεχθούν με τη σύνταξη for item in <str> ή for index, item in enumerate(<str>).
Σε μεμονωμένα σημεία κώδικα (συμβολοσειρές μήκους 1) μπορεί να γίνει αναφορά με αριθμό 0-based index από τα αριστερά ή με αριθμό -1-based index από τα δεξιά.
Οι συμβολοσειρές μπορούν να συνενωθούν με <str> + <other str> ή <str>.join(<iterable>) και να χωριστούν με <str>.split(<separator>).
Προσφέρουν επίσης πολλές επιπλέον επιλογές μορφοποίησης, συναρμολόγησης και δημιουργίας προτύπων.
Ένα literal str μπορεί να δηλωθεί με μονά ' ή διπλά " εισαγωγικά. Ο χαρακτήρας διαφυγής \ είναι διαθέσιμος όποτε χρειάζεται.
>>> 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."
Οι συμβολοσειρές πολλαπλών γραμμών δηλώνονται με ''' ή """.
>>> 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.
'''
Ο κατασκευαστής str(<object>) μπορεί να χρησιμοποιηθεί για να δημιουργήσει ή να μετατρέψει συμβολοσειρές από άλλα αντικείμενα:
>>> my_number = 42
>>> str(my_number)
...
"42"
Ενώ ο κατασκευαστής str(<object>) μπορεί να χρησιμοποιηθεί για να μετατρέψει τιμές σε συμβολοσειρές, δεν θα διατρέξει ούτε θα αποσυσκευάσει ένα αντικείμενο.
Αυτό διαφέρει από τη συμπεριφορά των κατασκευαστών για άλλους τύπους δεδομένων όπως list(), set(), dict() ή tuple(), και μπορεί να έχει απροσδόκητα αποτελέσματα.
>>> numbers = [1,3,5,7]
>>> str(numbers)
...
'[1,3,5,7]'
Στα σημεία κώδικα μέσα σε μια str μπορεί να γίνει αναφορά με αριθμό 0-based index από τα αριστερά:
creative = '창의적인'
>>> creative[0]
'창'
>>> creative[2]
'적'
>>> creative[3]
'인'
Η αρίθμηση θέσεων λειτουργεί και από τα δεξιά, ξεκινώντας από -1-based index:
creative = '창의적인'
>>> creative[-4]
'창'
>>> creative[-2]
'적'
>>> creative[-1]
'인'
Δεν υπάρχει ξεχωριστός τύπος "χαρακτήρα" ή "rune" στην Python, οπότε η αρίθμηση θέσεων σε μια συμβολοσειρά παράγει μια νέα str μήκους 1:
>>> website = "exercism"
>>> type(website[0])
<class 'str'>
>>> len(website[0])
1
>>> website[0] == website[0:1] == 'e'
True
Οι υποσυμβολοσειρές μπορούν να επιλεγούν μέσω σημειογραφίας τομής, χρησιμοποιώντας <str>[<start>:<stop>:<step>] για να παραχθεί μια νέα συμβολοσειρά.
Τα αποτελέσματα δεν περιλαμβάνουν τη θέση stop.
Αν δεν δοθεί start, η αρχική θέση θα είναι 0.
Αν δεν δοθεί stop, η θέση stop θα είναι το τέλος της συμβολοσειράς.
moon_and_stars = '🌟🌟🌙🌟🌟⭐'
>>> moon_and_stars[1:4]
'🌟🌙🌟'
>>> moon_and_stars[:3]
'🌟🌟🌙'
>>> moon_and_stars[3:]
'🌟🌟⭐'
>>> moon_and_stars[:-1]
'🌟🌟🌙🌟🌟'
>>> moon_and_stars[:-3]
'🌟🌟🌙'
Οι συμβολοσειρές μπορούν επίσης να σπάσουν σε μικρότερες συμβολοσειρές μέσω <str>.split(<separator>), που επιστρέφει μια list από υποσυμβολοσειρές.
Η χρήση του <str>.split() χωρίς ορίσματα θα χωρίσει τη συμβολοσειρά στα κενά διαστήματα.
>>> 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']
Οι συμβολοσειρές μπορούν να συνενωθούν με τον τελεστή +.
Αυτή η μέθοδος καλό είναι να χρησιμοποιείται με φειδώ, καθώς δεν είναι πολύ αποδοτική ούτε εύκολη στη συντήρηση.
language = "Ukrainian"
number = "nine"
word = "дев'ять"
sentence = word + " " + "means" + " " + number + " in " + language + "."
>>> print(sentence)
...
"дев'ять means nine in Ukrainian."
Αν μια list, ένα tuple, ένα set ή άλλη συλλογή από μεμονωμένες συμβολοσειρές πρέπει να συνδυαστεί σε μία μόνο str, το <str>.join(<iterable>) είναι καλύτερη επιλογή:
# 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'
Οι συμβολοσειρές υποστηρίζουν όλες τις κοινές πράξεις ακολουθιών.
Μπορείς να διατρέξεις μεμονωμένα σημεία κώδικα σε έναν βρόχο με for item in <str>.
Μπορείς να διατρέξεις θέσεις μαζί με τα στοιχεία σε έναν βρόχο με for index, item in enumerate(<str>).
>>> 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 : ့
Η Python παρέχει ένα πλούσιο σύνολο από μεθόδους συμβολοσειρών που βοηθούν στην αναζήτηση, τον καθαρισμό, τον διαχωρισμό, τον μετασχηματισμό, τη μετάφραση και πολλές άλλες λειτουργίες. Μια επιλογή από αυτές τις μεθόδους καλύπτεται σε άλλη άσκηση.
Η Python παρέχει επίσης ένα πλούσιο σύνολο εργαλείων για τη μορφοποίηση και τη δημιουργία προτύπων συμβολοσειρών, καθώς και πιο εξελιγμένη επεξεργασία κειμένου μέσω των modules re (κανονικές εκφράσεις), difflib (σύγκριση ακολουθιών) και textwrap. Για μια εξαιρετική εισαγωγή στη μορφοποίηση συμβολοσειρών στην Python, δες αυτή την ανάρτηση στο Real Python. Για μια εισαγωγή στις μεθόδους συμβολοσειρών, δες το Strings and Character Data in Python στην ίδια ιστοσελίδα.
Εκτός από τη str (μια ακολουθία κειμένου), η Python έχει αντίστοιχους τύπους δυαδικών ακολουθιών που συνοψίζονται στις υπηρεσίες δυαδικών δεδομένων: bytes (μια δυαδική ακολουθία), bytearray και memoryview για την αποδοτική αποθήκευση και διαχείριση δυαδικών δεδομένων.
Επιπλέον, τα Streams επιτρέπουν την αποστολή και λήψη δυαδικών δεδομένων μέσω σύνδεσης δικτύου χωρίς τη χρήση callbacks.