Hallo. Mein Name ist @ sho-hata und ich begann von zu Hause aus zu arbeiten, sobald ich in die Firma eintrat. Während die Arbeit von zu Hause aus den schönen Punkt hat, keine Pendelzeit zu haben, ist es schwierig, sie ein- und auszuschalten. Übrigens habe ich bis jetzt nur Python berührt, aber jetzt, wo ich Ruby on Rails bei der Arbeit berühre, verbringe ich meine Tage damit, jeden Tag zu lernen. Dieses Mal, da es die erste Woche war, in der ich anfing, Ruby zu berühren, fand ich ["Von Python zu Ruby"](https: // www) im Abschnitt "Einführung in Ruby aus mehreren Sprachen" im offiziellen Ruby-Dokument ** Beim Lesen von .ruby-lang.org / ja / Dokumentation / Ruby-aus-anderen-Sprachen / zu-Ruby-aus-Python /) mache ich mir oft Sorgen um Ruby und Python ** Ähnlichkeiten / Unterschiede ** Ich habe kurz nachgeforscht und zusammengefasst. Der Inhalt wird entsprechend hinzugefügt. Alle folgenden basieren auf Ruby.
Es ist wirklich praktisch, nicht wahr? Wenn Sie den Code schnell ausprobieren möchten, fühlt es sich wie die wahre Kraft einer interpretierten Sprache an. Ruby interaktive Ausführungsumgebung
Ruby
irb
irb(main):001:0>
Interaktive Python-Ausführungsumgebung
Python
python
>>>
Eine kleine reichhaltige interaktive Python-Ausführungsumgebung
Python
ipython
In [1]:
Der integrierte Listencontainer ist ein Array mit variabler Länge. Wenn Sie also Elemente hinzufügen, erhöht sich die Anzahl der Elemente ohne Erlaubnis!
Ruby
array1 = [1, 2, 3] # => [1, 2, 3]
array1[3] = 4 # => 4
array1
# => [1, 2, 3, 4]
In Python sind String-Literale unveränderlich. Wenn sie denselben Wert haben, beziehen sie sich daher auf dieselbe Adresse im Speicher.
Python
str1, str2 = "hoge", "hoge"
str1 is str2 # -> True
id(str1) # -> 140682191246064
id(str2) # -> 140682191246064
** * (4/18) Nachschrift **
Wenn es sich bei einer Zeichenfolge um dasselbe Zeichenfolgenliteral handelt, wird dasselbe Objekt gemeinsam genutzt. Wenn jedoch eine Zeichenfolge durch Berechnung usw. erstellt wird, verweist sie auf eine andere Speicheradresse, auch wenn sie denselben Wert hat.
Herr @ Shiracamus wies darauf hin. Wie unten gezeigt, bezieht sich ein Wert, der einer Variablen neu zugewiesen wird, auf eine andere Speicheradresse, selbst wenn er denselben Wert hat. Dies liegt daran, dass bei der Neuzuweisung ein neues Objekt erstellt wird und seine Referenz in der Variablen str2 gespeichert wird.
Python
str1 = "hoge"
str2 = "ho"
str2 += "ge"
str1 == str2 # -> True
str1 is str2 # -> False
id(str1) # -> 140239943766896
id(str2) # -> 140239943767152
Wenn eine Zeichenfolge durch Verketten von Zeichenfolgenliteralen durch Berechnung beim Deklarieren einer Variablen erstellt wird und die Werte gleich sind, wird auf dieselbe Adresse im Speicher verwiesen.
Python
str1 = "hoge"
str2 = "ho" + "ge"
str1 is str2 # -> True
str1 == str2 # -> True
Wenn jedoch beim Deklarieren der Variablen und bei der Neuzuweisung eine leere Zeichenfolge generiert wird, entspricht die Objekt-ID der Variablen nach der Neuzuweisung der ID der Variablen mit demselben Wert. Sprache ist schwierig. .. ..
Python
str1 = "hoge"
str2 = ""
id(str1) # -> 140239943766896
id(str2) # -> 140240212059056
str2 += "hoge"
str1 is str2 # -> True
id(str2) # -> 140239943766896
In Ruby sind String-Literale jedoch ** veränderbar **. Jeder zeigt auf eine andere Adresse im Speicher.
Ruby
str1, str2 = "hoge", "hoge"
p str1.equal?(str2) # => false
p str1.object_id # => 70220509475900
p str2.object_id # => 70220643515600
Ruby verfügt jedoch über ** Symbole ** -Literale, die als Alternative zu Zeichenfolgenliteralen verwendet werden, die wie Zeichenfolgen in der Quelle aussehen und intern als Ganzzahlen behandelt werden. Symbole sind unveränderlich und verbrauchen weniger Speicher, daher werden sie häufig verwendet. ~~ Ich weiß nichts über das Symbol ... ~~
In Ruby werden Bezeichner, die mit einem Großbuchstaben beginnen, als Konstanten behandelt. Hier, ** Konstanten in der Programmiersprache = Nach der Initialisierung kann der Inhalt nicht mehr geändert werden ** Ich denke das ist die Anerkennung. ** Aber ** In Ruby ist es möglich, eine initialisierte Konstante neu zuzuweisen. (Es scheint, dass es nicht empfohlen wird, weil es eine Warnung gibt) Daher tritt beim Neuzuweisen kein Fehler auf.
Ruby
LANG = "Ruby" # => "Ruby"
LANG = "Python"
warning: already initialized constant LANG
warning: previous definition of LANG was here
# => Ruby
Für mich zeigt die Konstante in Ruby = auf dieselbe Objekt-ID Ist es die Idee? Es ist die Anerkennung. Konstanten werden übrigens in Python nicht unterstützt, aber wenn es sich um Variablen (= feste Werte) handelt, die als Konstanten behandelt werden, ist es am besten, sie mit allen Großbuchstaben und Unterstrichen (_) zu konfigurieren. Es ist üblich **.
Python
PREFIX = 'Ist Prost auf gute Arbeit'
MAX_COUNT = 255
Referenz: PEP 8 - Style Guide für Python-Code | Python.org
In Python gibt es ein Objekt namens Taple, dessen Elemente nicht geändert werden können. Es wird verwendet, wenn Sie einen kompakten Listencontainer mit festen Elementen erstellen möchten oder wenn Sie mehrere Elemente packen und entpacken möchten.
Python
tuple1 = (1, 2, 3)
tuple2 = 1, 2, 3
type(tuple1) # -> <class 'tuple'>
type(tuple2) # -> <class 'tuple'>
Ruby implementiert jedoch keine Tupel als integrierte Objekte. Es scheint jedoch, dass Sie so etwas wie Tapple machen können, je nachdem, wie Sie es schreiben.
Ruby
rb_tuple = [1, 2, 3].map(&:freeze).freeze
rb_tuple[2] = 3
# => FrozenError (can't modify frozen Array)
(Referenz: Ruby-Ingenieur hat Python studiert, um Python zu dissen)
In Ruby wird ** else if ** geschrieben, um ** else if ** auszudrücken. In Python wird es als ** elif ** geschrieben, aber die Aussprache hat sich als Abkürzung für ** else if ** geändert. Wenn man sich ansieht, was Mats, der Schöpfer von Ruby, gesagt hat, scheint es, dass die kürzeste Anzahl von Zeichen und das Gleichgewicht der Aussprache ausgeglichen sind. https://twitter.com/yukihiro_matz/status/1161556434728808448
Selbst mit derselben dynamischen Aufräumsprache wurden einige für Python / Ruby einzigartige Teile ausgeblendet und ausgeblendet. ** Es ist eine wahre Freude, eine neue Sprache zu lernen, um darüber nachzudenken, "welche Art von Gedanken haben die Sprachdesigner die Sprache geschaffen?" **! Viel Spaß!
Recommended Posts