Transkripte
1. Einführung: Willkommen zu dieser Einführung in
die Python-Programmierung. Mein Name ist Fernando Ortega. Ich bin technischer Direktor in der Animations- und
Visual-Effects-Branche sowie ehemaliger 3D-Animator. In diesem Kurs werde
ich Ihnen die Grundlagen des
Programmierens in Python beibringen , indem
ich eine Reihe von unterhaltsamen Inhalten erstelle. Sie haben Tools
in Maya erwähnt. Aber obwohl sich die
Projekte, die wir
erstellen werden , auf
Animation in Maya konzentriert haben, werden
die Fähigkeiten, die Sie lernen, unsere Programmierkenntnisse, die hohem Maße
auf andere Abteilungen,
andere Software und sogar
andere Programmiersprachen anwendbar
sind . Am Ende dieses Kurses werden
Sie über die Fähigkeiten
und die Fähigkeit verfügen, Ihre eigenen Tools zu erstellen und
Ihren eigenen Arbeitsablauf
wesentlich effizienter zu gestalten. Danke, dass du zu
uns gekommen bist. Lass uns anfangen.
2. Skript-Editor Übersicht: Machen wir uns mit dem
Skript-Editor in Maya vertraut. Erstens, wie finden wir es? Das ist übrigens mein Inserat 2020. Aber was ich
Ihnen zeigen werde, ist in
all meinen Abneigungen
praktisch dasselbe. Um den Skript-Editor zu öffnen, können
wir
dies über diese Schaltfläche in der
unteren rechten Ecke oder über das Windows-Menü tun. Allgemeine Editoren und
kratzen Sie es oder was ist dieser beschreibende Fehler ist Mayas Werkzeug zum
Schreiben, Laufen. Oder ich zeige die
Ausgabe von Code, den Sie schreiben, Code oder Befehle , die ausgeführt werden, wenn
Sie Maya verwenden. Es besteht also aus zwei Hauptteilen. Das erste ist
das Skriptfenster, das ist dieses
hier unten, wo sich mein Cursor befindet. Hier schreibst du die
Codenummer hier oben. Dies ist das
Ausgabefenster, in dem das Ergebnis dieses Codes
angezeigt wird . Also lass uns einfach etwas schreiben. Lass uns ein bisschen rechnen. Zwei plus zwei,
etwas ganz Einfaches. Das ist jetzt ein bisschen klein. Wir können die Strg-Taste
und das Rad und
die Masse drücken und das Rad und , um es
ein bisschen größer zu machen.
Das ist das Gleiche, was
im Ausgabefenster erscheint , werde ich Ihnen in einer Sekunde
zeigen. Um Ihren Code auszuführen, nehmen wir an, wir möchten
hier ein bisschen rechnen. Es gibt ein paar Optionen, ein paar Möglichkeiten, den Code auszuführen. Eine davon ist über
diese Play-Schaltfläche möglich. Es heißt Execute. Jetzt siehst du, noch einmal, ich werde das mit
der Strg-Taste und der Maus und dem Rad an der Maus
etwas größer machen . Sie werden sehen, dass
Maya Ihnen immer
den Code zeigt , den Sie ausführen. Und dann das Ergebnis
dieses Codes. Das mag zunächst
etwas verwirrend sein, aber Sie werden sich sehr schnell
daran gewöhnen. Sie stellen also fest, dass Ihr
Code hier unten verschwunden ist. Wenn Ihnen das passiert, machen
Sie sich keine Sorgen, drücken Sie
einfach Strg-Z oder
Strg-Z, um es zurückzubekommen. Der einfachste Weg,
dies zu vermeiden, besteht darin, einfach Ihren Code
hervorzuheben. Normalerweise verwende ich die Hotkeys
Strg a, um
alles auszuwählen und dann auf
die Schaltfläche Ausführen zu klicken. Um auszuführen, ohne
auf diese Schaltfläche zu klicken. Sie können die Eingabetaste
auf dem Ziffernblock verwenden oder auf
Control und Enter
klicken .
Diese Tastenkombination führt diesen Code aus. Eine andere Möglichkeit, den
Code auszuführen,
ohne dass er verschwindet, ist
die Double Play-Schaltfläche. Es sieht aus, als würde man Icons spielen. Es wird dasselbe tun, aber es wird, es wird Ihren Code
nicht entfernen. Da Sie jedoch normalerweise
die Hände auf der Tastatur haben, fällt es
mir leicht, einfach die Strg-Taste und die
Eingabetaste zu drücken , um den Code auszuführen. Nun, da wir gerade hervorheben, lassen Sie mich hier eine weitere
Codezeile schreiben. Nur ein weiteres Stück Mathematik. Bei Maya kannst du entweder
alles ausführen, wie du siehst. Wieder einmal gab es mir den
Decoder und lief hier hoch. Und dann das Ergebnis
für jeden Zeilencode. Sie können aber auch einfach eine einzelne Zeile
markieren, z. B. hier drücken Sie Control Enter,
um diese Zeile auszuführen. Und es läuft nur, wenn diese Zeile
ausgeführt wird. Das Ausgabefenster zeigt also,
wie Sie sehen, den Code
, den Sie ausführen, aber es zeigt auch, was in
Maya
passiert. Also wenn ich z. B. einen Würfel erstellen
und dann den Würfel auswählen würde, z. B. wirst
du sehen, dass alles, was
ich mache, ausgegeben wird, in
diesem Ausgabefenster angezeigt wird .
Was großartig ist. Auf diese Weise können
Sie herausfinden, welche Befehle Maya benötigt, um einen Würfel zu
erstellen, z. B. damit
dieses Ausgabefenster irgendwann etwas überladen
wird . Wie du siehst. Lösche das mit dieser Schaltfläche
hier, lösche den Verlauf. Und bevor wir weitermachen, möchte
ich dir das zeigen. Wie gesagt, was du Maya
machst,
wird hier angezeigt, aber es
wird nicht alles gezeigt. Wenn ich z. B. meinen
Schattierungsmodus über dieses Menü hier ändere, sehen
Sie, dass sich das auf dem Bildschirm
ändert. Ich mache das nochmal. Änderungen im Viewport, tut mir leid. Aber es
sagt dir nicht wirklich, was passiert ist. Es gibt eine Möglichkeit, mehr
Informationen von Maya anzuzeigen. Es heißt Echo all commands. Es ist dieser Button hier. Und das wird dazu führen, dass
noch mehr Dinge angezeigt werden, die ein bisschen wortreich werden können. Wie Sie sehen können, wird alles, was ich
mache , hier ausgegeben. Es kann, wie gesagt,
ein bisschen wortreich sein, aber manchmal ist es nützlich zu wissen, was
in der Motorhaube passiert. Also werde ich
es vorerst ausschalten. Lösche mein Ausgabefenster
erneut mit dieser Schaltfläche. Hier unten haben Sie wahrscheinlich diese Tabs
bemerkt, das sind MEL-Tabs. Wir
konzentrieren uns erneut auf Python. Also
bleiben wir beim Python-Tab. Mit diesem Plus-Button können Sie hier neue Tabs erstellen. Lassen Sie uns einen weiteren Python-Tab erstellen. Lass uns einfach eine Funktion aufsprühen. Wenn Sie nicht wissen,
was eine Funktion ist, sich
keine Sorgen,
dazu kommen wir sehr bald. Also lasst uns das noch einmal ein
bisschen größer machen. Du kannst sehen, dass meine Geschenke dir Farben für verschiedene Dinge geben. ZB das ist gelb, das ist eine Zeichenfolge,
das ist ein Kommentar. Dies wird als
Syntaxhervorhebung bezeichnet. Dies ist meine Methode, um
Ihnen zu helfen, Ihren Code ein
bisschen besser zu lesen ,
was sehr nett ist. Also haben wir diesen Tab. Dies ist eine gute Möglichkeit, Ihren Code zu
organisieren. Und Sie können diese Schritte
über das Befehlsmenü benennen. Sie können diesen Tab umbenennen. Nennen wir diesen Tab
Nummer zwei, z. B. nennen
wir diesen einen
Tab Nummer eins. So können Sie jetzt
leicht erkennen, was jeder Tab hat. Und Sie können hier auch
den Typ löschen , den die
Tabs haben. Und das Schöne
daran ist, dass, wenn Sie Maya schließen
und erneut öffnen,
es sich an die Tabs
und den Code erinnert , den Sie darin hatten. Damit du nichts davon verlierst. Manchmal tust du das, aber normalerweise
nicht? Normalerweise mein Ja. Sehr gut darin
, diesen Code für dich aufzubewahren. Das Letzte, was ich Ihnen zeigen
möchte, ist
, wie man Code in ein Regal stellt. Also z. B. ich weiß, dass
ich diesen Befehl verwenden musste, um einen Würfel zu erstellen . Wir werden uns sehr bald mit
diesen Befehlen vertraut machen. Das ist nur für,
wir sind beim Beispiel. Ich weiß also, dass, ähm, wenn ich diesen
Befehl noch einmal ausführe, ich Strg a und Enter oder Control Enter drücke
, um den Code auszuführen. Ich erstelle diese Würfel. Das ist großartig. Was ist, wenn ich das in ein Regal
stellen möchte? Sie können Ihren Code markieren, darauf
klicken und ihn dann einfach in das Regal
ziehen. Und Maya gibt Ihnen diese
Option, um eine Schaltfläche zu erstellen. Wir werden auf
die Option Python klicken. Wenn wir auf die Schaltfläche klicken, wird der Würfel für uns erstellt. Das ist großartig. Wenn wir also diese Schaltfläche
bearbeiten, sehen
Sie, dass Ihr Code
hier ist und er sich
im Python-Modus befindet. Und vergessen Sie auch nicht,
Ihre Regale jedes Mal zu speichern , wenn Sie eine Änderung am Regal
vornehmen. Ähm, und das ist im Allgemeinen, es gibt viel mehr Optionen. Wie Sie sehen können, gibt es hier
viel mehr Schaltflächen, es gibt noch viel mehr Menüs. Es gibt eine Menge Dinge, die
du nach einem Drehbuch machen kannst, oder was ich dir gezeigt habe, wird das
sein, was du brauchst. 95, 99% der Zeit. Egal, ob Sie
einfache oder
komplexere Skripte,
sagen wir, die Entwicklung durchführen . Dies sind die wichtigsten Optionen, die
Sie benötigen. Also lass uns weitermachen und
deinen ersten Code schreiben.
3. Dein erstes Python-Programm: Hallo Maya: Okay, lass uns dein
erstes Python-Programm erstellen. Eines der ersten
Dinge, die wir tun können,
eines der einfachsten
Dinge, die wir tun können ist, etwas anzuzeigen, das
auch als Sprinten bekannt ist. Also tippe mit mir, drucke
offene Klammern, öffne ein Anführungszeichen und lass uns unsere Nachricht schreiben. Hallo Welt. Schließen Sie nun das Anführungszeichen
und schließen Sie die Klammern. Lassen Sie uns nun diesen Code ausführen. Noch einmal, ich kann, ich drücke Strg
a, um alles zu markieren. Und ich klicke auf
die Schaltfläche Ausführen. Und wie ich bereits erwähnt habe, druckt
oder gibt
die Maya den Code aus
, den Sie ausführen. Und dann die tatsächlichen Ergebnisse
oder die Ausgabe dieses Codes. Übrigens, wenn die
Schrift zu klein ist,
denken Sie daran, dass Sie
auf die Strg-Taste
und das Mausrad klicken können , um sie zu
verkleinern oder zu vergrößern. Lassen Sie uns das ein wenig
aufschlüsseln. Zunächst haben wir die
gedruckten Kontoauszüge. Jetzt. Sie werden mich
Aussage und Funktionen sagen hören. Sie bedeuten verschiedene Dinge. Aber lassen Sie uns vorerst einen Druck als Funktion betrachten. Dies ist ein spezielles Wort in
Python, das einfach etwas in der Konsole
oder im Ausgabefenster hier oben
anzeigt . Dann die Klammer, wir benutzen eine Klammer, um etwas
auszuführen, um Funktionen zum Handeln aufzurufen
oder Funktionen auszuführen. Denken Sie also immer daran, die Klammer zu öffnen
und zu schließen. Und dann in der Mitte
hier in Gelb. Und denken Sie daran, dass
Maya
die Dinge für Sie hervorhebt , damit Sie
leichter sagen und auf einen Blick erkennen können, was in Ihrem Code enthalten ist. Das ist eine Zeichenfolge. Eine Zeichenfolge ist im Grunde ein
Textstück unter der Haube. Es ist ein bisschen
komplizierter als nur ein Textstück. Aber du kannst es dir als
nur eine Reihe von Zeichen vorstellen. Es könnte eine Sequenz sein,
tut mir leid, ein Satz. Es könnte eine Gemeinde oder ein Symbol einzelnes Zeichen
oder eine
einzelne Ziffer sein. In diesem Fall. Eine Zeichenfolge wird immer mit Anführungszeichen
erstellt oder erstellt. Sie können entweder ein einfaches
Anführungszeichen
oder ein doppeltes Anführungszeichen verwenden . Es spielt keine Rolle, solange Sie am
Anfang und am Ende denselben Typ
verwenden. Es gibt eine weitere spezielle
Zeichenfolge , die drei
Anführungszeichen verwendet. Aber das behalten wir uns für die Dokumentation vor und
darüber werden wir später sprechen. Wenn Sie dies also schon einmal gemacht haben, haben
Sie vielleicht gesehen, dass das Drucken ohne Klammern
erfolgt ist. Also lasst uns das ausprobieren. Ich
klicke auf Control a. Und jetzt klicke
ich dieses Mal auf Control Enter, um meinen Code
auszuführen. Es ist also das gleiche Ergebnis. Also, was passiert hier? Was passiert, sind die
Print-Inversionen zu Maya 2020, was wir hier verwenden. Maya verwendet eine Version von
Python, die 2.7 ist. Und in dieser Version von Python ist
print eine spezielle Art von
Funktion, die als
Anweisungen bezeichnet wird und die Sie in diesem Fall mit
oder ohne
Klammer verwenden können . Jetzt ab Maya 2022, der nächsten Version
,
weil Autodesk
beschlossen hat, Tony zu überspringen, Tony, Tony One, angefangen mit
meinem Anwalt 22 Python. Die Python-Version
wird Python 3 sein. Und in diesem Fall kann das
Drucken nur mit
der Klammer ausgeführt
werden. Deshalb wirst du
sehen, wie ich Klammern verwende. Unsere Konvention. Ich denke, das ist eine gute Angewohnheit. Aber wisse einfach, dass
du für die meisten
aktuellen Versionen von Maya die Möglichkeit hast, dies mit oder ohne zu
tun. Solange Sie
ein Leerzeichen zwischen
der Print-Anweisung
und der Zeichenfolge lassen . Lassen Sie mich das jetzt nur klarstellen. Der Unterschied
zwischen Anweisungen und Funktionen ist ein bisschen technisch und Sie
müssen sich darüber keine Gedanken machen. Zu diesem Zeitpunkt. Sie müssen sich nicht darum kümmern, also denken Sie nicht zu viel
über diesen Unterschied nach. Also lasst uns das ein
bisschen besser machen. Speichern wir das
in einer Variablen. Also lasst uns hier etwas Platz schaffen. Jetzt, Variablen, werde ich diese Variable meine Nachricht
nennen. Variablen sind
Wertcontainer und der Variablenname liegt bei Ihnen. Sie können Ihren
Variablen einen beliebigen Namen geben, um
ihnen einen Wert zuzuweisen, indem Sie um
ihnen einen Wert zuzuweisen das
Gleichheitszeichen verwenden, ein einzelnes Gleichheitszeichen. Und dann weise ich
diese Zeichenfolge zu , die wir hier haben. Also HelloWorld in einer Variablen, die per Nachricht
aufgerufen wird. Und jetzt werde
ich, anstatt
diese Zeichenfolge direkt zu drucken, meine variablengesteuerte Methode drucken ,
um alles hervorzuheben, und die Eingabetaste
drücken, um sie auszuführen. Und da hast du es. Also, was passiert hier? Wie gesagt, eine Variable ist ein
Wertcontainer,
was bedeutet, dass Sie
jeden beliebigen Wert zuweisen können ,
solange er für Python gültig ist, natürlich jeder gewünschten
Variablen. Also z.B. den Wert zehn, die Zahl zehn, das funktioniert, du kannst das
Ergebnis von etwas zuordnen. Also lass uns noch einmal
ein bisschen rechnen. Drei plus drei. Sechs, da hast du's. Nun, warum verwende ich
einen Unterstrich? Dies ist einfach eine
Konvention, die ich gerne verwende und die als Snake-Casing bezeichnet wird. Wenn Sie Wörter mithilfe
von Unterstrichen trennen. Manche Leute
verwenden gerne Kamelbuchstaben,
was bedeutet, dass sie
einen Großbuchstaben verwenden ,
um Wörter zu trennen, welcher verwendet werden soll. Es spielt keine Rolle. Es liegt an Ihnen oder dem Team, mit dem
Sie zusammenarbeiten. Ich neige dazu, das zu benutzen und
ich bleibe einfach dabei. Ich würde sagen, es gibt nur
zwei Regeln für Variablen. Eine davon ist, dass
sie Sinn machen sollten. Was meine ich damit? Ich meine , du könntest
deine Variable x nennen. Und Python ist das egal. Es wird immer noch
genauso funktionieren. Aber wenn Sie zu Ihrem Code
zurückkehren, sagen
wir in sechs Monaten, wird
x für Sie nicht wirklich Sinn machen
. Aber ich werde Variablen
wie meine Nachricht benennen, z. B. wir machen ein
bisschen mehr Sinn oder so, wenn du es
einfach MSG nennst, auch das ist ein besserer Name
als x oder einfach Nachricht. Und die andere Regel ist, dass Sie Ihre
Benennung konsistent halten. ZB, wenn du diesen, sorry, für den Tippfehler hast,
mischst du Konventionen. Sie verwenden hier
Unterstriche, Sie verwenden hier
Großbuchstaben. Dies ist kein
Problem für Python, aber es ist eine gute Methode um Ihren Code
sauber und lesbar
zu
halten sauber und lesbar
zu
halten und dieselben Konventionen einzuhalten
, die Sie festgelegt haben. Aber darüber werden
wir etwas später sprechen. Das ist also großartig, aber es ist nicht sehr aufregend. Wir drucken nur. Obwohl
das Drucken sehr leistungsfähig ist und Sie es beim Codieren
häufig verwenden werden. Aber jetzt, wo wir wissen, dass
ich irgendwie auf unsere
Befehle reagiere, lasst uns das ausnutzen. Lass uns meine
etwas direkter verwenden. Also werde ich von
Maya Important CMBS tippen. Wir werden in den nächsten Lektionen etwas
ausführlicher darauf eingehen . Beachten Sie jedoch, dass dies die CMBS-Bibliothek
ist
, auch bekannt
als Befehlsbibliothek oder Maya-Befehlsbibliothek. Und das gibt uns Zugriff auf viele Befehle
, die Maya verstehen wird. Einer von ihnen wird
in View Message aufgerufen. Beachten Sie nun, dass meine anderen Schrauben datiert sind oder
diese einfach blau hervorgehoben haben. Und die Schrift hat ein wunderschönes
und metallisches Rendering. Das liegt daran, dass Maya es als
einen Befehl
erkennt , der
in der Befehlsbibliothek verfügbar ist. Also, dieser Befehl wird
auch als Funktion bezeichnet, und ich werde ihn
Funktion nennen, weil das in Python der richtige Begriff
ist. Das ist also eine Funktion. Und beachten Sie, dass wir diese Punktnotation
verwenden. Wir werden das genauer sehen,
wie ich bereits erwähnt habe. Die einfache Erklärung
ist jedoch, dass wir von
dieser Bibliothek aus
, die wir hier importieren, auf diese Funktion zugreifen von
dieser Bibliothek aus
, die wir hier importieren, auf diese Funktion . Die Befehlsbibliothek
hat also diese Funktion und wir greifen von dort aus
über die Punktnotation auf Funktionen zu. Jetzt verwenden wir die Klammern,
um diese Funktion aufzurufen. Und Funktionen können
und
haben normalerweise spezielle Optionen, mit denen wir die
Ausgabe der Funktion ändern können. Und diese Optionen werden Argumente
genannt. In diesem Fall hat diese Funktion ein Argument namens
assist message. Nun, ich weiß, dass ich gesagt habe, dass
Sie
die Dinge konsistent halten sollten , wenn es
um die Benennung Ihrer Variablen geht. Und du sagst, das hat Kamelgehäuse oder
Großbuchstaben. Das liegt daran, dass Maya entschieden hat
, dass dies Mayas Konvention ist. Sie können sich daran halten, wenn Sie
möchten, oder Ihr eigenes erstellen. Aber wenn es darum geht, die Funktionen von Maya zu
nutzen, müssen
Sie das verwenden, wofür sich
meine Air-Entwickler entschieden
haben. Das ist also die
Meso-Assist-Nachricht, die eine Zeichenfolge akzeptiert. In diesem Fall
möchte ich, dass Sie die Variable
verwenden, die ich bereits erstellt
habe. Und lassen Sie mich das wieder
dazu bringen, Hallo Welt zu sagen. Dann gibt es noch ein weiteres
Argument namens bezahlt. Ich werde sagen, dass das
stimmt und wir werden gleich
sehen, warum
ich das mache. Und es gibt ein weiteres
Argument namens Position, das
eine andere Zeichenfolge benötigt. Und ich werde sagen, ich möchte
, dass das oben in der Mitte steht. Springe das etwas weiter in die Mitte und mache es
ein bisschen größer. Lassen Sie uns also diesen Code ausführen
und sehen, was passiert. Sie sehen diese kleine Meldung hier und sie wird
ein wenig ausgeblendet , weil wir die Option „
Fade ist gleich wahr“
haben. Wie Sie gesehen
haben, verwenden wir diese Argumente, um das Verhalten
der Funktion zu ändern. Wenn ich möchte, dass es auf
der rechten Seite erscheint, z. B. ich sage
einfach oben rechts. Wenn ich die Nachricht ändern möchte, ändere ich einfach meine Variable. Und diese Variable
wird hier verwendet. Und jetzt haben wir die
andere Botschaft. Das hast du schon einmal gesehen. Nun, ich weiß nicht,
ob Sie es haben, es ist sehr wahrscheinlich, dass Sie es gesehen haben. Wenn du zum Beispiel in diesem Menü den
Schattierungsmodus umschaltest, siehst
du diese
Meldung unter der Haube, meine Augen verwenden genau den gleichen
Befehl, den wir verwenden. Mit einigen anderen Argumenten. Natürlich. Wir werden sehr bald
ausführlich über Funktionen sprechen. Wir werden lernen, wie wir die Argumente
herausfinden können , die uns für jede
der Funktionen
zur Verfügung stehen , die
in derselben DS-Bibliothek existieren. Moment weiß ich das nur zum Beispiel
aus dem
Gedächtnis. Aber wir zeigen Ihnen in ihrer
Empfehlung
, wie Sie das finden. Aber jetzt bist du bereit,
dein erstes Projekt in Maya zu starten. Also lasst uns weitermachen und das tun.
4. Intro in die cmds-Bibliothek und Importe: Bevor wir mit
dem ersten Projekt beginnen, müssen
wir über
die Maya CMBS-Bibliothek sprechen. Also, was ist eine Bibliothek? Eine Bibliothek ist eine
Sammlung von Code, eine Sammlung von Funktionen. Perfektes Beispiel, wir
haben es bereits benutzt. Ist das eine Sichtnachricht. Lass uns einfach dein
Gedächtnis darüber auffrischen, wie es funktioniert. Los geht's, du bekommst eine kleine
Nachricht im Viewport. Eine Bibliothek, in diesem Fall
die MIS him, die Bibliothek,
auch bekannt als
Malloc-Befehlsbibliothek,
hat also auch bekannt als
Malloc-Befehlsbibliothek, eine Sammlung von Funktionen. Und Funktionen. Du kannst sie dir
als Blackboxen vorstellen, bei denen du nicht weißt, wie sie unter der Haube
funktionieren, aber du weißt, wie du daraus ein Ergebnis ziehen kannst
. In diesem Fall wissen
wir also, dass auf die
Imbue-Nachricht über die Punktnotation
von der Szene aus, dieser Bibliothek,
zugegriffen werden kann über die Punktnotation
von der Szene aus, dieser Bibliothek,
zugegriffen . Und wir können die Ausgabe
mit diesen Argumenten ändern. Wir wissen nicht, wie es
eine Nachricht unter der Haube anzeigt. Aber ganz ehrlich, das ist
uns egal. Worum es uns geht, ist das Ergebnis. Das ist also eine Bibliothek, im Grunde eine Sammlung von Code. Um nun Zugriff auf
eine Bibliothek zu erhalten, müssen
Sie zunächst
sicherstellen, dass Python und
Maya Zugriff auf
den Code haben, Maya Zugriff auf
den Code haben der sich
in der Bibliothek befindet. Weil Bibliotheken am Ende
des Tages im
Grunde nur Textdateien sind Grunde nur Textdateien denen Python-Code enthalten ist. Die zweite Sache, die Sie tun
müssen, ist wichtig
, und genau das tun wir hier. Also, was ich gemacht habe, was ich
hier mache, ist von Maya, das ist zufällig
eine weitere Bibliothek. Also ich sage aus
der Meyer-Bibliothek, importieren Sie die CMBS-Bibliothek. Und dann hier unten, ich sage,
aus der C&DH-Bibliothek, greifen Sie auf die Funktion für
Interview-Nachrichten zu. Sie werden also sehen, dass dieser
Import anders durchgeführt wird. So etwas wie Import Maya, der obszöne Punkt ds als CMBS. Dadurch erhalten Sie
genau das gleiche Ergebnis, das Sie hier sehen können. Jetzt müssen Sie nicht einmal C und D
eingeben, da Sie über die Punktnotation auf
Bibliotheken aus anderen Bibliotheken
zugreifen können . Wir könnten einfach sagen,
wichtig Maya, so. Jetzt müssen wir sagen, von
der Meyer-Bibliothek aus, greifen Sie
über diese Punktnotation auf die C&DH-Bibliothek zu. Und von hier aus, in dieser Bibliothek, beim Zugreifen auf Ihre Nachrichtenfunktion, ist
das eine Menge Tipparbeit. Deshalb ziehen wir es vor, dies von meinem Eingabe-CMBS aus zu
tun. Jetzt werden Sie sehen, dass dies auch
auf eine andere Weise gemacht wird. So etwas. Das ist sehr häufig, wenn
Sie Skripte online sehen, Sie werden diese sehen, diese Art zu importieren, was hier passiert. Dies wird als Namespaces bezeichnet. Wir importieren also immer noch
aus der Meyer Library. Wir importieren dieses Thema, diese Bibliothek, aber
wir nennen es MC. Deshalb dann diese als MC. Jetzt ist der AMC so etwas
wie eine Variable. Sie speichern
die CMBS-Bibliothek im Grunde in einer Variablen Ihrer Wahl. Du könntest diese Befehle aufrufen. Es wird genauso funktionieren. Das Ergebnis können Sie hier oben sehen. Viele Leute entscheiden sich für
MC, weil sie der
Meinung sind , dass das Tippen schneller
und bequemer ist. Ob das bei Ihnen
der Fall ist oder nicht. Das liegt an dir. Du kannst dir den Namensabstand
so vorstellen , als ob du einem Charakter einen
Namespace gibst Wenn du ein
Rig in die Szene importierst, importierst
du deinen
Verweis auf das Rakefile. Sie geben ihm einen Namensraum ,
damit er
innerhalb der Szene funktioniert. In diesem Fall ist
cmd für mich einfach genug zu tippen,
also neige ich dazu, mich daran zu halten. Es liegt jedoch an Ihnen, ob Sie
den Namensabstand verwenden möchten oder nicht. Und ich verwende
Namespace und oft,
aber normalerweise, wenn
die Bibliothek, die ich
importiere, zu lang ist, um sie zu tippen, entscheide ich mich für etwas Effizienteres oder
Praktischeres. Da hast du es also. Das ist mein SEM, diese Bibliothek, nur
um das klarzustellen. Lassen Sie uns auf eine andere
Funktion zugreifen, die ich aus dem Gedächtnis
kenne, Poly Cube. Es wird einfach ein Würfel erstellt. Also greifen wir erneut über diese Punktnotation auf die Poly-Cube-Funktion die Poly-Cube-Funktion
aus
dieser Bibliothek zu. Und was passiert
nur als Beispiel,
was passiert, wenn ich das starte? Denken Sie daran, dass Sie
einzelne Codezeilen ausführen können, indem den Code markieren und
auf Control Enter klicken. Wenn ich das ausführe, sagt mir Python
einfach dies eine Methode ist, die auch als Funktion
bekannt ist. Aber
wie ich bereits sagte, passiert nichts , um zu handeln oder eine Funktion
auszuführen. Du musst es
durch die Klammer aufrufen. Und da hast du es. Dadurch wird ein Würfel für Sie erstellt. Wir haben gerade meinen
Schattierungsmodus geändert. Perfekt. Lassen Sie mich
Ihnen also ein weiteres Beispiel für eine Bibliothek geben, bevor wir zu einem weiteren
Beispiel für eine Bibliothek
übergehen. In Python gibt es eine eingebaute
Bibliothek. Das ist nicht von, mein Rat
stammt von Python selbst. Werde einen Pass bekommen. Und get pass hat eine sehr nützliche Funktion namens getUser. Was das bewirken wird, und lassen Sie mich
diese hier meiner Variablen zuweisen. In meiner Nachrichtenvariablen möchte
ich also, anstatt Hallo Maya zu sagen, anstatt Hallo Maya zu sagen, das
Ergebnis daraus erhalten,
indem ich diese Funktion aufrufe. Dadurch erhalte ich den Benutzernamen,
der meinen Computer
registriert. Lassen Sie mich mein Ausgabefenster leeren. Ich werde
diese Poly-Cube-Funktion loswerden. Lassen Sie uns das jetzt ausführen. erinnere mich noch einmal daran
, dass ich
die Ausgabe von getUser speichere . Lassen Sie uns das zunächst offensichtlicher
machen, lassen Sie uns die
Ausgabe von getUser drucken. Zuallererst gebe ich die
Get Pass-Bibliothek ein. Und dann werde ich die Ausgabe
der getUser-Funktion aus
dieser Bibliothek
drucken der getUser-Funktion aus . Da hast du es. Das ist also der
Benutzername in meinem Computer. Wenn Sie diese
Codezeilen ausführen , ist das für Sie
natürlich
anders , da Ihr Computer einen anderen Benutzernamen
hat. Lassen Sie uns nun
diesen Code ausführen, der das Ergebnis von
getUser
zuweist, diese Variable hier. Und da hast du es. Jetzt vermitteln sie eine Botschaft. Die Funktion zeigt
meinen Benutzernamen im Viewport an. Da hast du es. Jetzt sind wir also tatsächlich bereit, mit
dem ersten Projekt zu beginnen.
5. Projekt 1 - Requisiten-Rigging-Tool: Intro: Sie sind bereit,
Ihr erstes Python-Tool zu erstellen. Wir beginnen
mit etwas Einfachem. Dies wird ein geeignetes Tool sein. Lass mich dir zeigen, was ich meine. Das ist das Ergebnis. Ich habe es nur als Beispiel hier
ins Regal gestellt. Es wird dir also ein
einfaches Stück Geometrie geben. In diesem Fall ist es ein Würfel, aber es kann etwas anderes sein. Es wird dir einen Controller geben. Du kannst also deine Requisite animieren und dir vorstellen, dass du einen
Schuss abblendest und du hast, du brauchst etwas, mit
dem dein Charakter interagieren kann. Oder stellen Sie sich vor, Sie erstellen ein vorheriges Bild
und müssen Ihre Aufnahme
nachzeichnen ,
um das
Timing der Sequenz oder den
Bildausschnitt der Kamera zu bestimmen. Für
diese Art von Tool gibt es viele Einsatzmöglichkeiten. Es ist also sehr nützlich. Vor allem aber zeigt
es Ihnen die Prinzipien von Python, die Sie benötigen, um
Ihre eigenen Tools zu erstellen. Es zeigt Ihnen die Grundlagen
der Interaktion mit meiner App. Und es wird
Ihnen helfen zu entdecken, wie sehr einfache Aktionen wie das
Erstellen eines Würfels und
eines Kreises schnell zu sehr leistungsstarken Tools führen
können.
6. Werkzeugzusammenstellung: Also eine Aufschlüsselung
dessen, was hier passiert. Wenn wir hier
links im Outliner nachschauen, haben
wir unsere Kurve für einen
Kreis namens Control. Und darunter haben wir ein
Stück Geometrie, das ein Würfel ist. Es heißt Requisite. Requisite ist parenteral unter Kontrolle, sodass sie animiert werden
kann. Dies ist ein sehr einfaches Setup, und tatsächlich können wir es manuell
durchführen. Und tatsächlich
ist dies normalerweise eine der besten Möglichkeiten, mit
der
Entwicklung eines Tools zu beginnen , wenn Sie nicht
wissen, wo Sie anfangen sollen. Lass mich
dir zeigen, was ich meine. Öffnen wir den Skript-Editor. Und Sie werden sich erinnern , dass wir Ihnen in den ersten
paar Lektionen
gezeigt haben , dass
das Ausgabefenster Ihnen
nicht nur die
Ausgabe Ihres Codes zeigt, sondern Ihnen auch zeigt,
was meine Augen tun. Sehen wir uns das also in Aktion an. Lassen Sie mich das Ausgabefenster leeren. Lassen Sie mich diesen Code löschen, damit
wir ihn nicht mehr benötigen. Beginnen wir mit der
Erstellung eines Kreises. Lassen Sie uns nun mit dem
Training des Würfels beginnen. Und dann möchte ich
den Würfel und den Kreis auswählen. Und ich klicke auf
die P-Taste für Eltern. Jetzt erhalten wir sehr
ähnliche Ergebnisse. Natürlich ist es nicht dasselbe. Wir haben die Namen nicht
und wir wollen, dass der Kreis
etwas kleiner ist als das,
was uns das Tool gibt. Aber es ist ein guter Anfang und es hat uns den größten Teil des Weges gebracht, indem wir
diese Schritte manuell ausgeführt haben. Nun, falls ihr hier
im Ausgabefenster bemerkt, Maya hat uns
viele Informationen gegeben. Machen wir das jetzt noch einmal und
schauen uns das Ausgabefenster an. Während ich meine Objekte erstelle. Beginne mit dem Kreis, dem Würfel. Wählen Sie aus, verschieben Sie die Maustaste, wählen Sie
den Kreis und das übergeordnete Element aus. Großartig. Sie sehen also, Maya hat
alle Befehle erhalten , die
wir benötigen, um dies zu erstellen. Nun, das ist Malcolm, sind MEL-Befehle. Das ist Mel-Code. Wie ich bereits erwähnt habe, werden
wir MEL nicht verwenden. Aber zu wissen, wie man
ein bisschen
E-Mail liest , wird sehr
nützlich sein , da Sie diesen Python
übersetzen können. Also lasst uns, lasst uns das versuchen. Dieser Code, den Maya dir
gibt, ist nicht immer,
nicht immer sauber. Sie sehen, hier gibt es
viele Optionen, die wir wahrscheinlich nicht benötigen. Und Sie werden auch feststellen
, dass zwei Kreise erstellt werden. Wenn ich diesen
Code so ausführe, wie er
ist, hat er das gewünschte
Setup erstellt. Wie Sie hier sehen können, ist der Coupon
auf der Platte aufgedruckt, aber er hat auch
zusätzliche Objekte erstellt. Warum
wiederholt mein Aggie Befehle? Ehrlich gesagt, ich
weiß es nicht. Aber wir wissen, dass wir den ersten einfach
ignorieren müssen. Und noch einmal, dies
ist nur eine Richtlinie. Dies wird nicht Ihr
resultierender Code sein, obwohl dies nicht der Fall sein könnte. Wenn Sie etwas
so Einfaches tun müssen, ist das
vielleicht alles, was
Sie tun müssen. Für unsere Zwecke reicht
dies jedoch nicht aus. Die wichtigste Erkenntnis daraus werden die Befehle sein
, die Maya ausführt. In diesen Fällen der Befehl
Kreis, der Befehl Poly Cube und der übergeordnete Befehl. Und außerdem müssen
wir ein
bisschen aufräumen. Wie bereits erwähnt,
ist die Benennung nicht ganz das, was wir brauchen und die Größe des Kreises ist bekanntlich so benutzerfreundlich, wie
wir es uns wünschen. Lassen Sie uns
diese Befehle also in
Python übersetzen und beginnen,
das Tool selbst zu erstellen.
7. Das Tool erstellen: Beginnen wir mit der Übersetzung
dieser Befehle in Python. Wir brauchen also nur die Namen
der Befehle selbst. Kreis, Würfel. Möglicherweise
benötigen wir den Befehl select oder auch nicht. Also werden wir es vorerst
ignorieren. Und der Druckbefehl. Also lasst uns das kopieren und in ein Python-Labor
bringen. Dadurch wird die
Schrift ein bisschen größer. Steuerung am
Rad, an der Maus. Lassen Sie mich dieses Setup löschen
, das wir von zuvor hatten. Wir wissen also, dass diese Befehle, und normalerweise, wenn Sie
diese blaue Farbe und
die Kursivschrift sehen , bedeuten, dass sie von der MIS
Him It's Library
kommen . Also noch einmal, falls Sie sich erinnern, müssen
wir diese Bibliothek importieren
und Sie werden sie lernen. Diese auswendig. Sie tippen
aus dem Maya-Import, siehe MDS. Großartig. Lassen Sie uns nun auf
diese Funktionen
aus der CMBS-Bibliothek
zugreifen , indem wir die Punktnotation tmDLs verwenden, bei der der Kreis
scheinbar wie ein Polywürfel aussieht. Beachten Sie jetzt den Fall hier, Die Großschreibung.
Das ist wichtig. Wenn Sie
das große C nicht haben, ist es nicht der
richtige Befehl. Cmd als Entschuldigung. Fangen wir also zuerst mit
eingekreist an. Denken Sie daran, dass
ich, um eine Funktion
auszuführen , einfach
den Verlauf von hier lösche, damit er weniger überladen ist. Um eine Funktion auszuführen, müssen
Sie die Klammern öffnen
und schließen verwenden. Lass uns einfach weitermachen und das tun. Und lassen Sie uns einfach diese
ersten drei Codezeilen ausführen. Also bekommen wir, wir bekommen einen Kreis. Hervorragend.
Machen wir jetzt dasselbe, aber mit einem Würfel, einem Polywürfel. Lassen Sie uns diese Codezeile ausführen. Lassen Sie uns eigentlich die Befehle
oder Funktionen für
den Kreis und den Polywürfel
ausführen . Hervorragend. Das ist ein guter Anfang. Wir haben einen Würfel und
wir haben einen Kreis. Beachten Sie nun, dass wir keine Argumente
weitergeben. Also fügt mein S
den Namen für uns hinzu. Ich weiß, dass Sie sehr bald
herausfinden werden
, wie Sie diese Argumente herausfinden können. Aber ich weiß, dass es in den meisten
dieser Funktionen ein
Namensargument gibt , mit dem Sie eine Zeichenfolge übergeben können ,
die verwendet wird, um
das resultierende Objekt zu benennen. In diesem Fall hatten
wir also gesagt, dass der
Kreis als Kontrolle bezeichnet werden soll. Wir hatten gesagt, dass
der Würfel oder die Geometrie, die
wir
verwenden werden, als Requisite bezeichnet werden soll. Also lass mich das machen. Und lassen Sie uns das noch einmal ausführen. Hervorragend, das sieht
ein bisschen besser aus. Jetzt haben wir also einen
Kreis namens Control und wir haben ein Stück
Geometrie oder einen Würfel namens Requisite. Nun, diese sind noch nicht erzogen. Um sie zu drucken, verwenden
wir
den Befehl print. Jetzt werde ich
dir zeigen, wie man sie erzieht. Und gleich danach zeige
ich Ihnen, wie Sie herausfinden können, was jeder Befehl benötigt
, und das wird anhand
der Dokumentation erledigt. Aber jetzt
wollen wir die Requisite ihrer Kontrolle überlassen. Also beachte jetzt, was
ich hier mache. Wir wissen, dass dies ein Würfel ist und der Würfelknoten heißt Requisite. Und lassen Sie uns
das verstärken, indem wir
den Namen hier in
der Kanalbox sagen . Also was für viele
dieser Maya-Befehle, Sie werden
den Namen der Knoten verwenden. Und die Namen dieser
Knoten werden Zeichenketten sein. Denken Sie also noch einmal daran, Zeichenketten
mithilfe von Anführungszeichen erstellt werden. Sie können entweder einfache
Anführungszeichen
oder doppelte Anführungszeichen verwenden . Diese Wahl liegt bei Ihnen. Ich werde einfache
Anführungszeichen verwenden. Also werde ich sagen, ich werde
den übergeordneten Knoten nach
Polizeipower fragen und
die Requisite, tut mir leid, ich ging als übergeordnete
Funktion zu Police Parent über, den Requisitenknoten zum
Kontrollknoten. Also, wenn ich
diese Codezeile ausführen würde, würde sie das tatsächlich für mich erledigen. Lassen Sie mich, lassen Sie mich nur zeigen, dass
diese noch nicht erzogen sind. Und lassen Sie uns das einfach ausführen. Und da hast du es. Das ist
das Ergebnis, das wir wollen. Und jetzt können Sie hier die Pro-Business
sehen, sie sind unter der Kontrolle. Lassen Sie uns also diesen ganzen Code
von Grund auf neu ausführen. Hervorragend. Jetzt ist es also erzogen. Und es macht irgendwie das,
was wir wollen? Es gibt noch ein paar
Dinge, die wir ändern müssen. Sie haben wahrscheinlich bemerkt
, dass sich der Kreis nicht an der gleichen Position
befindet
, an der wir ihn zuvor hatten. Es ist vertikal und wir wollen
, dass es flach auf dem Boden liegt. Und es ist auch nicht, es ist nicht
die Größe, die wir wollen. Also lasst uns das aufräumen. Aber Sie haben vielleicht auch
bemerkt, dass wir unseren Code bereinigen sollten, bevor
wir
diese kleinen Details korrigieren . Sie haben vielleicht
bemerkt, dass wir die Namen, die wir hier haben
wollen, durch Marketing fest codieren, ich meine, die Zeichenketten
direkt schreiben und wir wiederholen
diese Namen hier. Eine gute Methode, um zu wissen
, dass Sie anfangen müssen, Variablen zu verwenden, besteht darin, sich selbst zu wiederholen,
entweder indem Sie sich selbst wiederholen
oder indem Sie sie kopieren und einfügen. Wenn du dich dabei ertappst, z. B. diesen Namen
kopierst und einfügst, ist
prop ein gutes Zeichen dafür , dass du wahrscheinlich eine Variable
verwenden kannst. Also lass uns das machen. Nehmen wir an, das
Steuerelement wird control heißen. Nehmen wir an, der Name
der Geometrie wird Requisite sein. Beachten Sie jetzt auch,
wie vorsichtig ich bei
minimalen Variablen bin , damit sie keinen Sinn ergeben,
wenn Sie sie lesen. Und lassen Sie uns einfach
diese Zeichenketten,
diese fest codierten Zeichenketten
, durch diese Variablen ersetzen . Das wird also Ihr Name sein,
der dem Kontrollnamen übergeordnet ist. Excel. Lass uns das noch einmal ausführen
, nur um sicherzugehen, dass alles in Ordnung ist. Hervorragend, das ist es. Also jetzt noch einmal die Macht der Variablen. Wenn Sie dieses
Steuerelement anstelle von CTRL benennen möchten. Und wenn Sie
diese Requisiten z.B.
oder etwas anderes benennen möchten , funktioniert es
immer noch und Sie müssen es
nur an einer Stelle
tun nicht an
mehreren Stellen. Hervorragend. Also lasst uns, lasst uns das weiter
aufräumen.
8. Die Steuerung ändern: Wir wollen ein paar
Anpassungen am Kreis vornehmen. Eine davon ist, dass wir wollen, dass
es ein bisschen größer wird. Und wir möchten auch, dass es in Richtung der Y-Achse nach
oben zeigt . Also, wie können wir das machen? Wie bereits erwähnt, lassen Sie uns das jetzt löschen.
Lassen Sie uns einfach die ersten
Zeilen ausführen, um den Kreis zu erstellen. Wie bereits erwähnt, können
wir Maya bitten, uns zu
sagen, wie das geht. Ich werde den Verlauf löschen. Wir könnten
das einfach grob drehen und
hoffentlich nach oben zeigen. Wir könnten es auch
ein bisschen größer machen. Also wie gesagt, das könnte funktionieren, wir könnten den Befehl zum Drehen
und Skalieren stehlen. Wir werden
etwas
saubereres machen , wenn du darfst, ein bisschen
mehr, das leichter zu kontrollieren ist. Dafür. Wir müssen in den
Circle-Befehl einsteigen. Also schauen wir uns das mal an. Lassen Sie uns trotzdem Maya bitten, uns ein bisschen zu
helfen. Lassen Sie uns mit dieser Schaltfläche hier oben
im Modellierungsmenü und
den Kreisen und Flächen einen Kreis
erstellen . Und ich werde einen Nurbs-Kreis
erstellen. Also, was passiert hier? Lass mich das ein
bisschen größer machen. Meine Augen
verwenden natürlich den Kreisbefehl, wir bereits verwenden. Und es verwendet ein
paar weitere Argumente. Jetzt brauchen wir nicht
all diese Argumente, aber wir brauchen einige davon. Nun, das könnte sein,
das könnte
ein bisschen verwirrend aussehen . Aber ich weiß mit Sicherheit
, dass r für Radius steht. Also r
ist in diesem Fall jemand, der vielleicht möchte , dass
es ein
bisschen mehr als einer ist, aber das ist vorerst okay. Und n sind, nimmt drei Werte an. Und wenn Sie bei der Konvertierung von Male zu Python drei Werte sehen, bedeutet das, dass dies eine Liste ist. Und Sie müssen sie durch Kommas
trennen. Also lass uns das einfach ausführen. Lassen Sie uns diesen Kreisbefehl
alleine ausführen. Das ist großartig. Mal sehen, was passiert, wenn wir unser Argument erhöhen
. Lassen Sie mich diesen löschen. Führen Sie den Code erneut aus. Und jetzt ist das ein
bisschen größer. Also, woher weiß ich das und
woher weiß ich, dass unser Radius bedeutet? Dass Sie
in die Dokumentation schauen müssen? Der einfachste Weg, dies zu erreichen,
ist hier über das Hilfemenü im Skript-Editor und klicken Sie auf
die Python-Befehlsreferenz. Sobald Sie darauf klicken, wird diese
Hilfedokumentation angezeigt. Nun, das ist die Implementierung für My Aberration 2020. Und das sind alle Befehle,
die Ihnen in Maya zur Verfügung
stehen. Also der Befehl, der uns
jetzt
wichtig ist, ist der Kreisbefehl. Sie können diese
Suchleiste hier verwenden. Und wir haben den Befehl Circle gefunden. Nun ein paar Dinge, die es zu beachten gilt. Hier oben
rechts in diesem Abschnitt. Sie können entweder
die männliche Version oder die Python-Version haben. Und wir wollen natürlich in der
Python-Version sein. Diese Zusammenfassung hier,
das ist
eine Art Zusammenfassung der Befehle
, die Ihnen zur Verfügung stehen,
tut mir leid, der Argumente,
die Ihnen zur Verfügung stehen. Nun, all dies sind die Optionen für
Argumente, die Sie auf diesen Befehl
anwenden können . Wenn du jetzt ein bisschen nach
unten scrollst
und ich wünschte, ich könnte
das hier loswerden , aber
ich kann das jetzt nicht. Sie scrollt ein
bisschen nach unten. Du siehst Flux. Flux ist ein anderes
Wort für Argumente. Du kannst sie alle sehen. Zu beachten ist also
, dass jede Blume, jedes Argument einen langen
Namen und einen Kurznamen hat, weshalb wir eine NR gesehen haben, was meiner Meinung nach ein bisschen
kryptisch ist. Wenn wir also ein bisschen nach unten
scrollen, versuchen
wir herauszufinden unsere Kuratoren der lange
Name für r der Radius sind. Nun, wenn Sie hier sehen, sagt Ihnen
das, welche Art von Wert, Argument, Typ, Art des Wertes meine Augen für
dieses spezifische Argument erwarten. Wir werden das meiste davon behandeln. Boolean ist im Grunde wahr
oder falsch oder ja oder nein. Im Fall des
Radius linear. Linear bedeutet eine Zahl, entweder eine Ganzzahl, die eine ganze Zahl
ist,
oder eine Gleitkommazahl, die
in Python-Begriffen von Float im Grunde eine Zahl
mit Dezimalpunkten ist. In diesem Fall sagt
es Ihnen also, wenn Sie so wollen, genau hier, dass
das Radius-Argument
einen Standardwert von 1,0 hat. Diese, weil es die
Dezimalzahlen hat, ist das schwimmfähig. Aber im Moment stellst du dir
linear als eine Zahl vor. Es ist ein bisschen
bedauerlich, dass Maya nicht das Vokabular
verwendet, das
Python verwendet, aber es ist okay. Das wirst du
in diesem Fall in Abschnitten durchstehen. Es erwartet also ein
Int, wenn es linear ist, es bedeutet eigentlich Float oder int eine Ganzzahl in die
Abkürzung für Integer. Das ist also der erste. Jetzt der andere
, der uns wichtig ist. Wie ich bereits erwähnt habe, ist es ein R. Nun steht N-R für normal. Normal ist im Wesentlichen ein Vektor. Es ist die Zeile, die, lassen Sie mich zu meiner Anzeige zurückkehren, dies ein
bisschen besser
erklären. Es ist die Linie, die parallel zu der Ebene verläuft
, mit der wir es zu tun haben. In diesem Fall geht die Normalität
im Grunde auf diese Weise nach oben. Wir werden nicht auf
die Details der
Erstellung von Vektoren und all diese spezifischeren Details eingehen. Beachten Sie jedoch vorerst, dass
dies drei Werte benötigt. Sie können sich diese
Werte im Allgemeinen als Ihre X-,
Y- und Z-Achse vorstellen . Und beachten Sie, dass es diese Klammern
hat. Diese Klammern
bedeuten nun, dass es sich um eine Liste handelt. Wir werden uns sehr bald mit Listen
befassen. Aber zumindest ist es im Grunde eine Liste von Werten oder eine
Sammlung von Werten. In diesem Fall werden
drei spezifische Werte erwartet. Jetzt, wo wir das wissen, kehren
wir zu Maya zurück. Oh, tut mir leid. Bevor ich es vergesse, wenn du ganz
nach unten
scrollst, hast du normalerweise Beispiele
und das ist wirklich cool. Das ist sehr nützlich, da
meine andere Empfehlung
Ihnen Beispiele für die
Verwendung des Befehls gibt. Sie können das also ganz einfach ausführen und sehen,
wie die Dinge funktionieren. In diesem Fall wird das normale Argument
verwendet, was uns gerade wichtig
ist. Und wenn Sie
zur männlichen Version wechseln, werden
Sie dieselben
Beispiele im Nelson-Lehrbuch sehen. Wir verwenden gerade Python, also bleiben wir dabei, sie zu kaufen. Okay, lass uns zurückgehen. Wechseln wir tatsächlich
zum vollständigen Namen
dieser Argumente. Bei
Maya-Befehlen können
Sie nun sowohl den Kurznamen
als auch den langen Namen verwenden , der Ihnen überlassen ist. Viele Leute
bevorzugen den langen Namen. Aber wenn es einfach zu tippen ist, ziehe
ich es vor, etwas
expliziter zu sein und einfach
das lange Spiel einzugeben. Ich werde den Radius
etwas größer machen als die Standardeinstellung, die 1,0 ist. Ich werde es auch schaffen. Ich könnte zwei oder 2,0 oder
2,5 eingeben, was immer du willst. In diesem Fall belasse ich
es bei der Wahrheit. Nun zum Normalen. Lass uns, lass uns ein bisschen
herumspielen. Sagen wir einfach
, wir möchten, dass
es auf die X-Achse schaut. Nun, falls Sie es hier bemerken, falls Sie mit
dieser Achse hier unten links nicht vertraut sind. Das sagt dir,
was, welche Handlungen du dir ansiehst. Das ist also x, das wird z sein und dann aufwärts, das
wird die Y-Achse sein. Was passiert, wenn wir das ausführen? Nun, unser Kreis wird
auf die X-Achse zeigen. Aber auch hier möchten wir, dass es auf die Y-Achse
zeigt. Nun, wie ich bereits erwähnt habe, diese Werte einen Vektor dar, es handelt sich
also nicht ganz um die Achse. Aber vorerst können Sie sie sich
für dieses Beispiel für unsere Zwecke nur als die X-,
Y- und Z-Achse
vorstellen . Und denken Sie noch einmal an das
Minus, wenn Sie eine Liste erwarten, und das geschieht durch diese Klammernotation
, die wir hier haben. Aber
darauf werden wir sehr bald eingehen. Lassen Sie uns also dieses Steuerelement
acht ausführen und alles markieren. Drücken Sie die Eingabetaste, um meinen Code auszuführen. Hervorragend, das sieht
ein bisschen besser aus. Dieser Kreis ist also
etwas größer und einfacher auszuwählen. Jetzt können wir es animieren. Und natürlich
treibt es den Würfel an. Hervorragend. Was können wir also noch tun? Mal sehen, ob es irgendwelche
Bugs gibt, die wir finden können. Es gibt einen und es ist
ein bisschen ein großer Fehler. Was passiert, wenn wir den gleichen Code
ausführen? Wieder einmal erhalten wir eine
Fehlermeldung. Es ist großartig. Fehler sind gut, weil sie dir genau sagen, was falsch ist. Das bedeutet also, dass
mehr als ein Objekt der Namensquelle
übereinstimmt. Wie ist das möglich? Sie sehen also, hier haben wir zwei Geometrien, die den Namen prop
haben. Das ist dieser Würfel hier. Und es sieht so aus, als hätten wir
zwei verschiedene Kurven. Denken Sie daran, dass wir
erwähnt haben, dass,
wann immer Maya, wann immer wir
das Namensargument angeben, Maya versuchen wird, den
Namen zu verwenden, den wir ihr gegeben haben. Aber wenn es schon existiert, wird
es eine Zahl hinzufügen, was heißt, was hier der
Fall ist, es hat eine Eins hinzugefügt. Das bedeutet also, dass unsere, wenn wir versuchen, Macht und Kontrolle
zu erlangen, zu untersuchen oder Entschuldigung,
produktive Kontrolle zu haben. Steuerung. Es ist irreführend, da dies ein früheres
ist
, das wir erstellt haben. Es ist nicht wirklich der neuere , der die Nummer eins enthält. Sehen wir uns nun ein klares
Beispiel dafür an. Was ist, wenn ich einfach
ein paar verschiedene Kreise erstelle? Lassen Sie mich nur einen
Teil des verrückten Kreises von Kodak hervorheben. Lassen Sie uns diesen Code dreimal ausführen. Drei. Siehst du,
der erste hat den Namen , den ich, den ich haben
oder dem Kreis geben möchte. Aber jetzt
werden die anderen dieses Suffix haben, diese zusätzliche Zahl. Können wir das vermeiden? Nein, das können wir nicht. Maya kann sicherstellen, dass die
Knotennamen eindeutig sind. Im vorherigen Fall. Ich denke, ich sollte das klarstellen. Im vorherigen Fall werde
ich den Code einfach zweimal
ausführen, er wird erneut fehlschlagen. Prob hat den gleichen Namen. Dies liegt daran, dass, wie Sie feststellen, Eigenschaft tatsächlich unter einem anderen Knoten
verschachtelt ist. In diesem Fall lässt
mein also zu, dass das passiert. Aber mach dir darüber keine Sorgen. Das ist ein Detail, das Sie vorerst nicht
allzu sehr betreffen wird. Also, wie gehen wir mit
diesem Fall um , wenn meine SID und zusätzliche Zahlen
zu unseren Namen hinzugefügt werden. Lass uns dazu kommen.
9. Deep Dive – Hilfe und Dokumentation: Bevor wir fortfahren, lassen Sie uns einen
Schritt zurücktreten und ein bisschen mehr
über Dokumentation
sprechen. Gehen wir also noch einmal
zur
Dokumentationsseite zurück .
Um dorthin zu gelangen, können Sie
vom Skript-Editor
im Hilfemenü aus gehen . Klicken Sie auf die
Python-Befehlsreferenz. Und ich werde Sie hier
auf diese Seite bringen. Jetzt führen all diese Befehle
andere Befehle aus, die Ihnen in
der
Maya-Befehlsbibliothek, der CMBS-Bibliothek,
zur Verfügung stehen . Sie sind nach
Kategorien gegliedert. Also hast du zB die
Animationsfilme hier. Sie werden
diese ziemlich oft benutzen. Oder Sie haben den
Suchbereich hier. Schauen wir uns also den anderen
Befehl an, den wir verwenden. Oh, vielleicht schauen
wir uns den Würfel an. Jetzt. Noch einmal eine kurze Zusammenfassung. Sie haben hier in der oberen rechten Ecke dieses Abschnitts die Möglichkeit,
zwischen
der männlichen und der Python-Version zu wechseln. Wir werden bei
der Python-Version bleiben. Synapse. Synapsis enthält eine Zusammenfassung der Argumente,
die Sie in diesem Befehl zur Verfügung haben
können. Es gibt eine kleine Beschreibung. Und was noch wichtiger ist,
unten gibt
es Beispiele. Dies ist für
Sie am nützlichsten , wenn Sie anfangen
, einen neuen Befehl zu verwenden. Manchmal erhalten Sie
alle Informationen, die Sie benötigen, wenn Sie
jetzt diese Beispiele ausprobieren. Großartig. Der schlimmere
Teil davon ist also das Flag, der Flux-Abschnitt, auch als Argumente
bekannt. Jede Flagge oder jedes Argument
hat einen langen Namen. Wie dieser,
Baugeschichte oder ein Kurzname he H. Es liegt an Ihnen,
ob Sie einen kurzen oder den langen Namen
verwenden möchten . Normalerweise empfehle ich lange Namen weil sie expliziter sind, aber jede Person hat
Präferenzen dafür. Sie haben die Beschreibungen
für die Kommentare hier. Wie ich bereits sagte, ist
es ein bisschen bedauerlich, dass Maya nicht immer Namen
verwendet, die
dem Python-Typ entsprechen. In diesem Fall bedeutet linear
eigentlich Float, was eine Zahl mit
Dezimalstellen ist. Ain't existiert in Python
in dieser Abkürzung für Integer, was im Grunde eine Zahl
ohne Dezimalzahlen ist , in diesem Fall wäre
eins für sich eine Ganzzahl, Punkt etwas
wäre ein Float. Wann immer Sie diese Klammern sehen, bedeutet
dies eine
Liste oder ein Tupel. Dazu werden wir sehr bald kommen. Das wirst du, du
merkst wahrscheinlich, dass es
hier, da diese Briefe gibt. Was bedeutet das? In Immobilien? Das bedeutet, dass Sie diese Befehle
verwenden können ,
wenn Sie den Knoten
oder das Objekt, für das
Sie ihn verwenden, erstellen , abfragen oder bearbeiten . In diesem Fall wird die
Historie der Konstruktion eines
festen Heaps nur zum Erstellen
und Abfragen verwendet. Die meisten anderen
Argumente können zur
Bearbeitung verwendet werden . Was bedeutet das? Das bedeutet, dass Sie
dasselbe Argument in
demselben Befehl verwenden können , in diesem Fall einen Polywürfel. Sie können es entweder verwenden
, um einen neuen Würfel zu erstellen. Sie können es verwenden, um
Informationen aus
einem vorhandenen Würfel abzufragen , oder Sie können es verwenden, um
einen vorhandenen Würfel zu bearbeiten, z. B. wenn
Sie
die Breite Ihres Würfels ändern möchten, verwenden Sie dafür das
Bearbeitungs-Flag, aber darauf werden
wir in weiteren Projekten noch eingehen. Jetzt gibt es andere Möglichkeiten, Hilfe von Maya
zu erhalten. Die wichtigste
ist, um ehrlich zu sein, diese Seite, die wir gerade gesehen haben. Der wahrscheinlich zweitbeste Ort
dafür ist Google selbst. Und Google an sich kann
eine Fähigkeit sein , die Sie entwickeln
möchten. Aber ich empfehle, normalerweise tippen, was Sie tun
möchten. Nehmen wir zum Beispiel an, Sie möchten den aktuellen Befehl
finden, den ich meinem Python übergebe. Dadurch erhalten Sie normalerweise ein gutes Beispiel oder ein gutes Ergebnis, entweder zurück zur
Dokumentation. Beachten Sie nur, dass Sie manchmal eine ältere Version von Maya
erhalten oder dass Sie dadurch auf
einige andere Websites weitergeleitet werden. Eines davon, das sehr,
sehr nützlich ist , wird StackOverflow
sein. Das ist eine Community
für Entwickler. Und es gibt eine Menge Hilfe für sehr spezifische Fragen, die hier
beantwortet werden. Ich empfehle daher, in StackOverflow nach Hilfe zu
suchen, entweder direkt bei Google, dann bei IT oder in der Suchleiste
nach einem StackOverflow. Es gibt immer viele Foren. Ich kann
keine bestimmten empfehlen. Es gibt viele Foren für technische Künstler, die dir weiterhelfen
werden. also auf keinen Fall
Angst davor,
Ihre Informationen oder Fehler zu googeln ,
die Sie möglicherweise haben denn Google wird Ihr bester Freund
in Ihrer Entwicklungskarriere
sein . Wie können wir sonst Hilfe bekommen? Lassen Sie mich einen neuen Python-Tab öffnen. Eine Möglichkeit, Hilfe zu erhalten, besteht darin,
buchstäblich Gesundheit einzugeben. Hilfe ist jetzt eine eingebaute Funktion in Python, die eine Funktion
aufnimmt. Und wenn die Funktion eine Dokumentation
enthält, wird
sie Ihnen
diese Informationen geben. Lassen Sie uns also die CMBS-Bibliothek wichtig machen. Lassen Sie uns die
CMBS-Hilfe direkt ausführen. Um das auszuführen. Jetzt siehst du, dass es
dir all diese Informationen gegeben hat. Das ist eine Menge. Dies ist im Grunde
das, was
die Entwickler der CMBS-Bibliothek in diese Empfehlung
der Bibliothek aufgenommen haben, und all dies steht Ihnen
zur Verfügung. Es ist nicht sehr gründlich,
um ehrlich zu sein, aber es ist etwas und es sagt dir tatsächlich, wo du es auf deinem Computer finden
kannst. Diese Fälle, dieser Pfad und alle
darin enthaltenen Funktionen. Wir könnten z. B. das ABC wichtig
bei olympisch wichtig überprüfen. Beachten Sie nun, dass
ich die Funktion nicht ausführe, um die Hilfe zu
überprüfen . Das tut mir leid. Ich füge
die Klammer nicht hinzu , weil
ich die Funktion nicht ausführen möchte. Ich möchte nur
die Hilfe von ihm bekommen. Okay? Nun, dieser
hat eine Menge Hilfe, was bedauerlich ist, aber manchmal
bekommt man Hilfe von
dieser Hilfefunktion. Lass mich, lass mich, lass mich eine Funktion finden
, die nützlich sein könnte. Dieser könnte bessere
Hilfe haben. Ja, da hast du es. Er hat nur eine
kleine Beschreibung abgegeben, aber sie ist nützlich genug. Es gibt Ihnen sogar
eine Empfehlung , die großartig ist, ausgezeichnet. Eine weitere Möglichkeit, Hilfe zu erhalten, insbesondere mit der
Maya-Befehlsbibliothek,
besteht darin, die Schnellhilfe zu aktivieren. Das ist jetzt im Befehlsmenü. Schnellhilfe anzeigen. Du wirst diesen kleinen, diesen kleinen Abschnitt hier bekommen. Sie können Informationen
finden, Ihre Befehle finden. Sagen wir, lass uns wieder
Poly Cube finden. Nun, das hat
keine Details, aber es wird die Argumente enthalten
, die Ihnen zur Verfügung stehen. ZB haben wir benutzt. Wir kehren zu diesem Tab zurück. Wir haben
das Namensargument verwendet. Du weißt also, dass das von dort
kommt. 11. 11 sagt dir
, dass es eine Zeichenfolge ist, was wirklich nett ist. Ein weiterer ist offenbar im Gange. Das ist großartig. Es ist also nicht sehr detailliert, aber es reicht aus
, damit Sie
zumindest auf einen Blick wissen, welche Argumente Ihnen
zur Verfügung stehen. Normalerweise verwende ich das nicht,
vor allem, weil es
dem Skript-Editor Speicherplatz
wegnimmt , aber es ist
von Zeit zu Zeit nützlich. Also schalte ich es aus. Eine weitere Möglichkeit, Hilfe zu erhalten, ist
diese Tooltip-Hilfe anzeigen. Das funktioniert nun so, sagen
wir, ich fange an,
den Kreisbefehl einzugeben. Wenn ich die Klammer öffne, werden
Sie diesen Tooltip sehen. Das ist jetzt ähnlich,
als wenn Sie den
Mauszeiger wie eine Regaltaste darüber bewegen. Es wird dir eine
Art Tooltip zum Scrollen nach oben geben, Tooltips helfen,
wenn du den Mauszeiger über etwas bewegst. Es wird Ihnen geben, dass
es ein bisschen
mehr Informationen enthält. Und es hat die, die
Argumenttypen. Und auch die Argumente sind Flags, die für diesen Kommentar
verfügbar sind. Dieser
ist persönlich ein bisschen
aufdringlich, weil
er meinen Code abdeckt und das gefällt mir nicht wirklich. Aber es ist eine nette Option. Viele Leute mögen es und
es ist eine gute Option, darüber Bescheid
zu wissen. Ich habe es generell aus, aber auch hier kommt es
auf die persönlichen Vorlieben an. Das ist also ein guter
Überblick über die Möglichkeiten, Hilfe zu erhalten. Kommen wir zurück zum Code.
10. Mit Knotennamen und Listen arbeiten: Um herauszufinden, welchen Namen Maya ist,
verwenden wir oder den wir verwenden, sobald
wir unsere Notizen erstellt haben. Sehen wir uns das Ergebnis
dieser Funktion hier an. Beginnen wir also mit dem Ergebnis
einer Variablen namens control. Lassen Sie sich nun nicht
zwischen dem Namen
dieser Variablen und
dieser Zeichenkettenkontrolle verwechseln dieser Variablen und
dieser Zeichenkettenkontrolle denn sie sind, sie
sind sehr unterschiedlich. Sie haben nichts miteinander zu
tun. Ich vermeide in der Tat Verwirrung. Ich werde diese
beiden Kontrollschritte vertauschen. Also lass uns, lass uns das ausführen. Und lassen Sie uns die
Kontrollausgabe drucken. Das ist diese Variable, deren Ausgabe wir gespeichert
haben, die Ausgabe des Kreisbefehls oder der Kreisfunktion
in dieser Variablen. Lass uns das einfach ausführen. Nur um es ein
bisschen sauberer zu machen. Lass uns das löschen. Lass mich meine Geschichte löschen. Und da hast du es. Das ist also die Ausgabe. Beachten Sie nun, dass es zwei gibt, wir haben
wieder
diese Klammern. Das bedeutet, dass es sich um eine Liste handelt. Jetzt enthält diese Zelle
zwei Zeichenketten. Mach dir keine Sorgen über das
u. U bedeutet Unicode, aber für diese Zwecke ist es im Wesentlichen
dasselbe wie eine Zeichenfolge. Also mach dir keine Sorgen um die EU. Sie merken, dass wir die Kontrolle haben. Wir haben etwas anderes
namens Make Nerve Circle. Einer ist ein bisschen kryptisch. Lassen Sie uns das jetzt noch
ein paar Mal wiederholen. Sie werden sehen, dass es beim
zweiten Mal, wenn wir es ausführen, hier ist. Wir haben tatsächlich den Namen des Knotens,
den Maya erstellt hat. Also, was bedeutet das? Nehmen wir an, lassen
Sie mich das
hier kopieren und einfügen , nur um es
ein bisschen klarer zu machen. Nun, das erste Element in der Liste, das ist der tatsächliche Name
des Knotens,
den ich erstellt habe was wir wissen
wollen, oder? Lassen Sie mich einfach das U loswerden Noch
einmal, die EU
spielt keine Rolle. Du kannst es
da drin lassen, wenn du willst. Aber jetzt werde
ich es loswerden. Und dann ist da noch dieses Ding. Dies ist der, das ist
der Konstruktor des Knotens,
den die Mayas
verwenden, um ihn zu erstellen. Was heißt das? Lassen Sie uns, lassen Sie uns
ein anderes Beispiel geben. Indem du
dasselbe mit dem Würfel machst. Ich denke, das könnte ein
bisschen klarer sein. Speichern wir also das
Ergebnis von Cube. Diese Variable heißt prop. Lassen Sie mich diesen
Kreis löschen, den ich erstellt habe. Jetzt werde ich
nur diese beiden Codezeilen hervorheben. Du merkst, dass ich die anderen nicht
hervorhebe. Dies liegt daran, dass Maya, sobald Sie diese Codezeilen
ausgeführt
haben, sobald
Maya sie abfängt , im Grunde
den letzten Wert
dieser Variablen speichert , was sehr praktisch sein kann. In diesem Fall habe
ich also schon
einmal, nachdem ich diese
drei Codezeilen ausgeführt
habe, den Namen
dieser Variablen oder den
Wert dieser Variablen gespeichert . Jetzt kann ich
diese beiden Codezeilen einfach ausführen. Und das wird, es wird genauso gut
funktionieren. Also lass uns das machen. Lass es uns auch dreimal machen. Beachten Sie also noch einmal, dass meine Hände den
Namen verwenden,
den ich vorgeschlagen habe der in der Variablen des
Geonamens gespeichert ist, nämlich prep, das ist
die Wertezeichenfolge. Aber da es feststellt, dass einer der
beiden bereits erstellt wurde, fügt
es diese Namen
und das Ergebnis jedes einzelnen dieser Befehle hinzu. Auch hier ist es der eigentliche
Knoten, der erstellt wurde. Und dann dieser Konstruktor. Machen Sie sich ab jetzt keine
Sorgen mehr darüber. Warum
ist uns dieser erste Wert wichtig? Wie greifen wir also auf diesen Wert zu? Nun, wie gesagt, lass mich noch einmal einfügen. Lassen Sie mich das hier
noch einmal einfügen, nur um es ein
bisschen einfacher
zu machen , die USA zu erkennen und los weil sie es
momentan nicht
unbedingt sind . Das ist eine Liste. Wie ich bereits erwähnt habe, weißt
du
wegen dieser Klammern, dass es Alice ist. Und eine Liste ist im Grunde
eine Liste von Elementen, eine Sammlung von Werten. Sie können ganze Zahlen haben, die nur Zahlen sind. Du kannst Zeichenketten haben, du kannst eine Mischung davon haben. In diesem Fall ist es
nur eine Liste von Zeichenketten. Wie komme ich, wie
komme ich an den ersten Artikel? Wir tun das, indem wir
eine andere Klammernotation verwenden. Wenn es nun darum geht, beim Programmieren zu
zählen, und das wird für die
meisten Programmiersprachen gelten, insbesondere
aber für Python, beginnen
wir bei Null zu zählen. Also der Index oder die Position, oder sagen wir, die Nummer
dieses Elements ist Null, also ist dies Position Null und dann ist dies Position eins. Jetzt werden wir sehr bald auf weniger
als mehr Details eingehen. Aber vorerst sollten Sie wissen, dass
wir, um das erste Element dieser Liste zu erhalten, das erste Element dieser Liste zu erhalten, es
durch den nullten Index bringen werden. Wir beginnen aus verschiedenen
Gründen bei Null zu zählen. Es ist ein sehr verbreiteter Standard, ein Standard in
Programmiersprachen. Lassen Sie uns also diese Codezeile ausführen. Lass uns das einfach ausdrucken. Denken Sie jetzt daran, ich
drucke das erste Element, das Element in der Liste, und los geht's. Das
bekommen wir. Also lasst uns versuchen, das
ein bisschen sauber zu machen. Also nennen wir das, lassen Sie uns diese Variable
ändern. Nennen wir es Kontrolle. Nennen wir es Kontrolle. Jetzt wissen wir wieder, dass das Ergebnis die Liste
mit dem Namen des Knotens
und dann des Konstruktors ist , was uns im Moment egal
ist. Rufen wir den Kontrollknoten auf,
wird das erste, das erste Element, das
Kontrolllistenelement sein. Und jetzt wird der Knoten
das erste Element darin sein,
in dem Ergebnis, das
wir von Maya erhalten. Wenn das
verwirrend ist, mach dir keine Sorgen. Wir werden die
Listen sehr bald noch einmal
genauer erklären . Wie Sie sich vorstellen können, würden
wir diese Namen nicht mehr
verwenden. Dies sind
Vorschläge für Maya geworden, so viele wie möglich vier zu verwenden, sie muss dem Namen
Zahlen hinzufügen. Lassen Sie uns diese
beiden Variablen hier drucken. Die neuen Variablen
, die wir erstellt haben, also Kontrollknoten und dann Knoten. Diese beiden Variablen
stellen nun die tatsächlichen
Knoten dar, die erstellt wurden. Da hast du es. Also kontrollieren wir und praktisch ist das erste
Mal, dass wir sie erstellen. Wenn wir das noch einmal ausführen,
kontrollieren Sie eine Sonde, eine, führen Sie das noch viele Male aus. Sie sehen, dass die Zahl
wächst, während wir den Code ausführen. Das ist genau das, was wir wollen. Jetzt. Lassen Sie uns unsere Befehlsgewalt regeln. Also wollen wir jetzt
den Creative Control Node als übergeordneten Knoten verwenden. Wir wollten für die Sonde
erzogen werden. Notiz. Lassen Sie mich
diese beiden Zeilen löschen, ein paar Zeilen
entfernen und lassen Sie uns diesen Code ausführen. Hervorragend. Das sind also die Ergebnisse
, mit denen wir vertraut sind. Eigentlich. War es nicht
, es hat nicht funktioniert. Oh, ich habe es
falsch gemacht. Wir wollen den
Requisitenknoten dem Kontrollknoten überordnen. Wir wollen, dass die Kontrolle
die Ursache des Problems ist. Was Sinn macht. Das tut mir leid. Debuggen während wir gehen. Davon nochmal. Hervorragend. Nun ist das so, wie wir es erwarten, wenn wir das zur Seite verschieben, lassen Sie uns unseren Code erneut
ausführen um sicherzustellen
, dass dies funktioniert. Großartig. Das wird jetzt
kontrolliert und fallen gelassen. Nochmals, wie gesagt, weil diese Würfel unter etwas
untergeordnet sind, erlaubt
mein, dass der Name
wiederholt wird, aber das ist in Ordnung. uns egal
, denn denk dran, wir haben den Namen
direkt von Maya. Wir erraten keine Namen. Mein Freund, sagst du uns genau den Namen, unter
dem der Polywürfel hergestellt wurde? Nur zur Plausibilitätsprüfung, lass uns das noch einmal machen. dritte Mal ist der Reiz, wie
man so schön sagt. Und los geht's. Jetzt haben wir all das. Jetzt
arbeiten mehrere Requisiten gleichzeitig. Lassen Sie uns eine kleine Anpassung vornehmen bevor wir
mit der nächsten Lektion fortfahren. Die kleine Anpassung
, die ich von Ihnen erwarte, ist im Wesentlichen eine
Workflow-Anpassung. Wäre es nicht schön,
wenn
wir bei der Erstellung Ihres Rigs den Würfel nicht direkt
animieren möchten. Höchstwahrscheinlich wollen wir
das Rig animieren. Lassen wir es also dieses Steuerelement
auswählen. Wir haben, das sind der
Auswahlbefehl ist großartig. Also lass uns sehen. Das
können wir einfach tun. Cmbs Dot wähle das aus,
das funktioniert. Und wir wollen
den Kontrollknoten auswählen , den
wir erstellt haben, oder? Es übergibt also den
Kontrollknoten an diese Funktion. Lassen Sie mich das anhand meiner Geschichte klarstellen. Und lassen Sie uns den
Code noch einmal ausführen. Und da hast du es. Sobald Sie Ihre Vorbereitung
erstellt haben, können
Sie mit der Animation beginnen.
11. Das Tool mit „if“-Anweisungen erweitern: Wir haben unsere Arbeit darin gemacht,
im Wesentlichen das zu tun, was wir brauchen. Aber machen wir es ein
bisschen interessanter. Ich habe am Anfang gesagt, dass die Requisite nicht nur ein Würfel sein
muss. Lassen Sie uns ein wenig hinzufügen. Lassen Sie
uns noch ein paar Optionen behalten . Und wir werden
auch ein neues Konzept vorstellen. Und das ist die if-Aussage. Wenn Sie ihn fragen, ob
etwas passiert, tun Sie dies oder etwas anderes,
was bedeutet, dass Sie
je nach Zustand wechseln und
eine andere Option wählen können wechseln und
eine andere Option wählen . So funktionieren die
IIF-Statements. Also, wie machen wir das? Lassen Sie uns zunächst herausfinden, wo sich dieser Zustand ändern
würde. In diesem Fall wäre es hier, was wie der Würfel ist. Wir wissen, dass die Kontrolle, wir wollen
das nicht ändern, wo Sie nur den einfachen Kreis haben wollen . Wir wollen nur die Geometrie
ändern. Beginnen wir also mit der
Änderung der Geometrie. Anstatt es ein Würfel sein zu lassen. Lass uns eine Kugel machen, z. B. lass uns Maya noch einmal sagen, was wir brauchen. Dieser Koffer sieht aus wie
Poly-Sphären, alles was wir brauchen. Lassen Sie uns das also tatsächlich eingeben
, bevor wir die Aussage
hinzufügen, die
bedeutet, bereinigen Sie das. Geben wir also
noch einmal Pauli-Großbuchstabe S Lassen Sie uns
nun einfach diesen Code ausführen. Beachten Sie nun, dass der Code
genau derselbe ist, den wir hatten. Wir ändern nur den
Würfel oder die Kugel. Und da hast du es.
Der Code funktioniert perfekt. Nun, genauso wie wir es zuvor hatten. Nehmen wir an, wir wollen, sagen
wir, einen Kegel. Einfach genug, tippe einfach
Kegel statt Kugel ein. Sieh dir die Schönheit der
Beständigkeit an , die Maya
bietet, bietet. Entschuldigung, ich wollte Kegel eingeben. Schreiben wir das auf. Perfekt. Bleiben wir also bei
diesen drei Optionen. Jetzt wissen wir, dass alles,
was wir brauchen , von der gewünschten
Option abhängt. Wir wollen das,
diesen Befehl oder diese Funktion ändern . Fügen wir nun eine Variable , die uns bei der
Entscheidung für die Option hilft. Nennen wir es Typ. Und das wird auch
eine Saite sein. Es kann alles sein, was
du willst, es kann, es kann auch eine Zahl sein, wenn
du dich so entscheiden willst. Aber um es
benutzerfreundlicher zu machen, werden
wir eine Zeichenfolge verwenden. Nehmen wir an, die Standardeinstellung
wird cubed sein. Beachten Sie nun, dass ich
es
absichtlich Requisitentyp nenne , nicht nur Typ. Der Grund dafür
ist, dass es in
Python
eine eingebaute Funktion gibt , die vom Typ ist. Und es ist normalerweise keine
gute Idee,
Variablen zu erstellen , die den
gleichen Namen wie integrierte Funktionen haben. Das liegt daran, dass
Ihr Code, wenn Sie das tun , nicht kaputt geht, sondern Sie werden die in Python integrierte Funktion
im Grunde
überschreiben in Python integrierte und Sie
haben keinen Zugriff darauf. In diesem Fall
benötigen wir diese Funktion nicht, also ist es in Ordnung, sie zu tun. Aber im Allgemeinen ist
es eine gute Praxis, das
nicht zu tun. Ich sage Prototyp. Ich sage, setze
es als Würfel zurück. Vorerst. Wir sagen, ob der
Requisitentyp gleich ist, entspricht qb. Jetzt pass auf und
ich sage doppelt gleich. anstelle eines Gleichheitsworts Wenn Sie anstelle eines Gleichheitsworts ein einzelnes Gleichheitszeichen verwenden, weisen
Sie einer Variablen einen
Wert zu. Sie verwenden ein doppeltes Gleichheitszeichen, Sie führen einen Vergleich durch. Und jetzt kommt etwas,
etwas Neues namens Einrückung dem wir innerhalb
dieser if-Anweisung arbeiten können. Wir müssen das
darin einrücken. Die Standardeinrückung
in Python besteht vier Leerzeichen oder
so, wiederum 1234. Oder Sie könnten auch die Registerkarte verwenden, in diesem Fall die obere Taste
direkt über der Feststelltaste neben der Q-Taste. In diesem Fall bedeutet Maya, geschrieben
oder in Maya
übersetzt, mit Tippen
auf vier Leerzeichen. Denken Sie nur daran
, dass
es im Allgemeinen eine gute Praxis ist, die Kraftbasen in Python 1234 zu haben . Jetzt verwende ich einen Tab,
weil er gleichwertig ist, weil wir uns in Maya befinden. Wenn wir in so
etwas wie Notepad wären, zB das hier, der Tab. Lass mich das ein bisschen machen. Sagen wir einfach zu a, also das ist ein Tab. Dies sind vier Leerzeichen, 1234. Sie sind nicht dasselbe. Das ist also ein sehr wichtiger Unterschied. Die Einrückung
macht Python sehr einfach zu lesen, da Sie nicht viel
zusätzliche Syntax benötigen, aber Sie müssen
sich der Einrückung bewusst sein. Wenn weniger
Einrückungen um ein Leerzeichen
abweichen, erhalten Sie eine Fehlermeldung. Das können wir gleich sehen. Also noch einmal, wenn der
Requisitentyp
gleich, gleich Würfel ist, dann
werden wir das tun. Eigentlich. Ich tippe cone ein. Also sagen wir Würfel. Sagen wir nun l. Wenn das gleichbedeutend ist mit
der Aussage „else if“. Aber in diesem Fall müssen
Sie LF prop type equals,
equals b oder z.B. Poland eingeben. Beachten Sie nun, dass
ich am
Ende der if-Anweisung eine Kolumne schreibe. Das ist sehr wichtig.
Wenn Sie das nicht tun, Python Ihnen eine Fehlermeldung. Und beachte auch, dass hinter
dem Doppelpunkt bei der
Eingabe von Enter Maya, scripted oder in Maya automatisch
dieses Leerzeichen angezeigt wird, weil es weiß, dass ich
dort etwas
erfinden muss , die else if Anweisung. Also diesen Fall,
lasst uns das kopieren. Jetzt. Kugel statt Würfel
oder Kugel, perfekt. Und jetzt war die letzte Option, über die wir
gesprochen haben, ein Kegel. Der LA-Prototyp entspricht also Doppelpunkt, Doppelpunkt. Lass uns das kopieren und einfügen. Und vielleicht sehen Sie bereits
eine Redundanz in diesem Code, was großartig ist, wenn Sie etwas
Gutes für Sie getan haben. Gut gemacht. Wenn nicht, werde ich
das gleich erwähnen. Also Polykegel. Hervorragend. Nun, was passiert, wenn, jetzt erinnere dich, tut mir leid,
diese Variable, wir vergleichen diese Zeichenfolge mit dem Wert
dieser Variablen hier oben. Was passiert nun, wenn es
keine Option gibt, die wir akzeptieren? Nehmen wir an, wir nehmen an, einen
Standardwert. Also dafür kannst du etwas anderes
sagen, sonst. Lassen Sie uns zuweisen. Nehmen wir an, der
Standardwert ist Würfel. Lassen Sie uns dem Benutzer auch mitteilen , dass er keinen
Wert angegeben hat, dass wir
einen Standardwert verwenden. Es gibt also eine Funktion namens
Warnung, genauso wie das Boarding. Und die Warnung ermöglicht es uns, einer Nachricht einfach eine
ungültige Option mit dem Würfel x
zu geben . Das könnte
also
eine bessere Nachricht sein,
aber tatsächlich eine ungültige Option für den
Requisitentyp Würfel als Standard
verwendet. Da hast du es. Das ist ein
bisschen klarer. Hervorragend. Lassen Sie uns also einfach
diesen Code ausführen , bevor wir uns etwas
eingehender damit befassen. Lassen Sie mich meinen Abstand
ein wenig aufräumen und
vielleicht noch ein Leerzeichen, aber wir werden ein
bisschen einfacher zu lesen. Da hast du es. In Ordnung,
lassen Sie uns einfach diesen Code ausführen und wir bekommen einen Würfel. Fügen wir nun
eine weitere Option hinzu. Sagen wir eine Kugel. Los geht's, wir bekommen eine Kugel. Was passiert nun, wenn wir eine Tabelle erstellen
würden, z. B. diese? Jetzt kannst du das Video jetzt
pausieren und versuchen zu erraten,
was passieren wird. Also lassen Sie uns das ausführen. Da hast du es. Sie sehen also, wir haben
diese Warnung hier. ungültige Requisitentypoption ist in Kuba standardmäßig
und wir haben einen Würfel. Was dort also passiert
ist, ist, dass
der Wert seit dem mit keiner
dieser Optionen übereinstimmt, die wir dort eingegeben haben, dann verwenden
wir standardmäßig die andere. Beachten Sie jetzt auch, dass
hier zwischen Groß- und Kleinschreibung unterschieden wird. Wenn ich also Kugel mit einem S eintippe, großes S statt
eines Kleinbuchstabens S, erhalten
wir einen weiteren Würfel. Und diese sind verärgert, weil Offset, weil ich
die andere schon einmal verschoben habe. Testen wir also einfach unsere letzte
Option, die ein Kegel ist. Hervorragend. Da hast du es. Jetzt ist
die Summe also
etwas robuster. Wir haben mehr Möglichkeiten. Und das ist großartig. Du
hättest sogar drei Regalknöpfe machen können
und einfach
diese Variable ändern und schon
erhältst du die drei
verschiedenen Formen. Lassen Sie uns also ein wenig in den
Code eintauchen. Sobald ich feststelle,
dass wir
die if-Anweisung verwenden , um unsere Bedingung zu
validieren. Dies wird als Bedingung bezeichnet. Du bist, du
machst einen Vergleich. Sie sagen, wenn diese
Variable diesem Wert entspricht, erstellen wir ein Polygon. Andernfalls verwenden
wir
diese andere Funktion, wenn diese
Variable
diesem anderen Wert entspricht . Und am Ende haben wir, sagen
wir, eine leere
Else-Aussage. Wir haben keine
bestimmte Bedingung wir überprüfen, wie in dieser
anderen If-Aussage. Das heißt
im Grunde etwas
anderes, wenn etwas anderes passiert, aber das
ist jetzt nicht nötig. Sie können eine if-Anweisung für sich
alleine haben und es funktioniert, es funktioniert, es funktioniert gut. Dies gibt Ihnen nur
mehr Flexibilität, um zusätzliche Bedingungen oder eine
Art
Patentrechtsituation zu haben eine
Art
Patentrechtsituation , was in diesem
Fall das Andere ist. Großartig. Also habe ich erwähnt , dass dieser Code eine
Redundanz enthält. Und das ist diese Zeile hier. Wir erinnern uns also noch
einmal daran, wenn Sie den Befehl Poly Cube ausführen
und mich das einfach tun lassen. Wenn ich diese
Funktion einfach auswähle und ausführe
, wird das Ergebnis angezeigt. Maya gibt dir das Ergebnis. Das ist der Name des Knotens. Und dann
ist da noch diese
andere Form , die
den Würfel in diesem Fall konstruiert, aber
für diese Zwecke ist sie uns egal .
Aber so ist die Liste. Denken Sie noch einmal daran, dass die
Liste in Klammern steht. Und die Sache ist,
was uns wichtig ist das erste
Element in dieser Liste, in diesem Fall der Name des Knotens,
der erstellt wurde. Und darauf greifen wir
über diese Indexierung zu. In dieser Notation
beginnen wir also bei
Null zu zählen, wenn es
um Listen in Python geht. Also greifen wir auf den ersten Index zu, den Nullindex, und
weisen ihn dieser Variablen zu. Jetzt gibt es Redundanzen
, bei denen wir jedes Mal
dasselbe tun. Es spielt also keine Rolle. Es spielt keine Rolle
, welchen Befehl wir ausführen. Wir speichern dieses
Ergebnis immer noch in
demselben Variablennamen, oder? Wir müssen das also nur einmal machen. Lassen Sie uns also diesen Einzug entfernen und ihn aus den
if else-Anweisungen herausnehmen. Und jetzt brauchen wir
diese Zeilen hier nicht. Achte nun hier auf
die Einrückung. Einrückung
: Beachten Sie, dass diese Requisitenvariable unter dem if
eingerückt ist. Sonst, wenn Aussagen. Und der eigentliche letzte
Knoten, den wir bekommen, liegt außerhalb
dieser Anweisungen. Das ist wichtig. Denn noch einmal,
wenn wir hier einrücken, wenn wir dies einrücken, wird dies
jetzt nur
innerhalb der else-Anweisung ausgeführt. Und wenn wir, wenn wir
die if-Anweisung am
Anfang eingeben , werden
wir nie dazu kommen. Und wir könnten sogar einen Fehler bekommen. Lassen Sie uns das
aus diesen Aussagen herausnehmen. Und falls es
noch nicht offensichtlich war , sie haben, sie haben eine Aussage. Die if-else-Anweisungen
funktionieren wie ein Schalter. Sie die
Krankheit zum ersten Mal erkennen, Wenn Sie die
Krankheit zum ersten Mal erkennen, wird
sie dort aufhören, sie wird nicht zu den
nächsten paar Bedingungen übergehen. Wenn diese Bedingung nicht zutrifft, wird andernfalls versucht,
zur nächsten überzugehen. Also als nächstes, ansonsten
zum letzten 1 Balken, wenn du kannst, wenn die Bedingung in einem der
vorherigen Schritte erfüllt
ist , wird
es dort aufhören. Großartig. Lassen Sie uns das also nur ausführen, um sicherzustellen, dass wir den Code nicht gebrochen
haben. Da hast du es. Kegel. Noch einmal. Sphäre. Hervorragend, das
funktioniert wie erwartet. Lassen Sie uns nun sehen, was passiert,
wenn Sie Fehler gemacht haben. Und es besteht eine sehr
gute Chance, dass Sie es getan haben. Und wenn Sie das getan haben, ist es
erstaunlich, denn Fehler ermöglichen es Ihnen, viel schneller zu
lernen. Nehmen wir also an, dass Ihre Einrückung
hier ein bisschen war, oder das könnte tatsächlich in Ordnung
sein, weil es
dieselbe If-Aussage ist. Um diesen Punkt zu beweisen. Lassen Sie uns einige
gedruckte Aussagen hinzufügen. Hilfswürfel drucken. Lassen Sie mich das
hier auf das a cubed umstellen, also geben wir die IF-Anweisung ein. Wenn wir das jetzt eingeben, sollte
dort Grade
in einem Würfel gedruckt werden. Hervorragend. Um nun meinen Standpunkt
zu der Einrückung zu belegen, lassen Sie uns ein Leerzeichen
für diese Einladung entfernen. Beachten Sie nun, dass diese beiden
Codezeilen nicht aufeinander abgestimmt sind. Da hast du es, du
bekommst diesen Fehler. Das ist die Bedeutung
von Einrückungen. Immer wenn Sie
mehrere Codezeilen
hintereinander haben , muss
die Einrückung in ihnen übereinstimmen. Und im Allgemeinen
halten Sie sich einfach an vier Leerzeichen. Oder wenn Sie in
einem Codierungstexteditor arbeiten, was sehr bald der Fall
sein wird. Die Verwendung des Tabs
wird mehr als genug sein. Lass es uns wieder
auf den Normalwert skalieren. Hervorragend. Ich werde diese Leitung tatsächlich loswerden , weil wir sie
nicht wirklich brauchen. Und die andere Sache, die ich
erwähnt habe, war die Kolumne. Wenn Sie diese
Spalte aus irgendeinem Grund nicht haben, lassen Sie mich das Ausgabefenster löschen. Sie erhalten einen Syntaxfehler. Syntax bedeutet, dass
Sie nicht
die Syntax erhalten oder
die Zeichen eingeben , die
Python von Ihnen erwartet. Was ist großartig, und das
wird sehr nützlich sein. Beachten Sie, dass Sie all dies
haben. Dies wird als Stack-Trace bezeichnet. Stack verfolgt die Schritte, die zu dem aufgetretenen Fehler
geführt
haben. Und Maya gibt Ihnen sehr
bequem die Zeile, in der Ihr Code fehlgeschlagen ist. In diesem Fall ist es
Zeile für Zeile 13. Jetzt heißt es Zeile 13, aber es ist eigentlich die
Zeile kurz davor. Aber es sagt dir wirklich den, den Ort, an
dem es versagt hat. In diesem Fall wird es
das nicht immer tun, es ist sehr klar und es dir
nicht wirklich, was fehlt, aber es zeigt dir
den allgemeinen Bereich. können Sie also, Sie können zurückkommen und Ihren Code überprüfen
und versuchen, den Fehler zu finden. Das wird also sehr nützlich sein. Bevor wir das Video beenden, lassen Sie uns
noch etwas anderes
machen, das unseren Code ein
bisschen netter macht. Lassen Sie uns einige Kommentare hinzufügen. Also zum Beispiel hier in Zeile sieben, kurz bevor wir diesen Kreis
erstellen, das ist unser Kontrolltyp, das Rautenzeichen oder das
Nummernzeichen oder der Hashtag, wie auch immer Sie es nennen möchten. Und schreib einfach eine Notiz. Ich werde einfach
create control for break schreiben, zB das ist ein Kommentar. Dies ist kein Code,
der ausgeführt wird. Python ignoriert es im Wesentlichen. Dies ist nur für Sie
, um eine Notiz für sich selbst oder für die andere Person einzugeben, die Ihren Code
ausführen
wird. Nun, lassen Sie uns hier, nehmen wir an,
Create Geometry sollte sagen geo based on type wäre klar genug und rollen Sie hier runter. Hier erhalten wir den
eigentlichen Knoten, der erstellt wurde. Knoten wurde erstellt. Und hier sind es nicht, GEH ZUM Troll. Dann müssen wir auswählen. Ich werde das
ganz selbsterklärend auswählen. Ich würde sagen, dass Parent auch
sehr selbsterklärend ist, also macht mir
der andere Kommentar nichts aus, aber lassen wir es einfach dabei. Es gibt keine allgemeine Regel
, wenn es um Kommentare geht. Es liegt in Ihrem Ermessen. Der Wafercode kann
zu viele Kommentare enthalten. Aber keine Kommentare können es auch
schwieriger machen , zu verstehen, was in Ihrem Code
passiert. Finden Sie also Ihr eigenes Gleichgewicht , wenn es darum geht, Kommentare zu
schreiben. Manchmal benötigt unsere gut benannte
Variable, z. B. prototype, selbst
keinen Kommentarkosinus. Es ist sehr selbsterklärend, also dasselbe wie der Name des Steuerelements, der GO-Name ,
eine gut benannte Funktion, und wir werden
unsere eigenen Funktionen erstellen, die
sehr sicher sind, dass auch Kommentare vermieden werden, z. B. parent ist sehr
selbsterklärend. Wählen Sie aus. Sie müssen nicht sagen,
was Select
tun wird , da Sie genau wissen,
was es tun wird. Also ja, wir könnten
vielleicht noch ein paar hinzufügen, aber ich denke, das ist vorerst
gut genug.
12. Deep Dive - "if"-Anweisungen und Booleane: Lassen Sie uns über IF-Aussagen sprechen. Wenn Aussagen sehr
einfach sind und um sie vollständig zu
verstehen, müssen
Sie
mit zwei Konzepten vertraut sein. Eine davon sind Bedingungen, auch als
bedingte Aussagen bekannt. Und das ist die Grundlage
einer IF-Aussage, denn meine IF-Aussage
besagt im Grunde, dass, wenn diese Bedingung zutrifft, etwas
tun, andernfalls etwas anderes
tun. Was ist dieser Zustand
oder, oder tu
nichts, wenn du willst. Und worauf diese
Bedingungsaussagen
hinauslaufen , ist
ein sogenannter boolescher Datentyp, genannt Boolean, auch
bekannt als Schale. Es ist ein sehr einfacher
Datentyp, der entweder einen von zwei Werten
haben kann , entweder wahr oder falsch. Es wird ein Binärwert genannt, kann wie eine Null oder eine Eins sein, im Wesentlichen ein Ja- oder
Nein-Wert, wahr oder falsch. Stimmt. Achten Sie auf das große T. Das ist die Syntax
für Python oder falsch. Lassen Sie uns also ein Beispiel machen. Lassen Sie uns eine Variable erstellen, nur eine einfache Zahl,
num entspricht zehn. Nur um ein Beispiel zu nennen. Wir werden sagen,
wenn num
gleich zehn ist, werden
wir ja drucken, z. B. andernfalls werden wir drucken. Nein. Hervorragend. Lassen Sie uns einfach diesen Code ausführen.
Okay, tut mir leid, das war mein Fehler. Ich
drucke eigentlich nichts. Lass mich das reparieren. Da haben wir es. Da hast du es. Jetzt drucken wir. Ja. Nun, wenn wir
das auf
eine Neun oder Drucken umstellen und nein, ausgezeichnet. Lassen Sie uns also aufschlüsseln,
was hier passiert. Das ist dein
Zustand hier. Zahl ist gleich zehn. Beachten Sie nun, nun,
lassen Sie uns zunächst feststellen, ob hier
die Absicht besteht? Und im Falle dieses Fehlers wird mir
jedes Mal, wenn ich die Eingabetaste drücke, diese
Einrückung automatisch angezeigt. Aber denken Sie daran, dass Python
Überschwemmungen benötigt und normalerweise sind
es vier Leerzeichen. Oder im Fall meines
aktuellen Programmiereditors wird es ein Tab sein, was vier Leerzeichen
entspricht. Das ist sehr wichtig. Wenn wir das nicht haben, gibt
Python einen Fehler aus. Beachten Sie auch die Spalte
am Ende der Anweisungen if und else. Aber das ist sehr wichtig. Also jetzt zurück dazu. Das ist dein Zustand.
Was wir tun, ist zu sagen, im Grunde fragen wir, ist
die Zahl gleich? Nun gleich, gleich,
das ist ein Vergleich. Dies wird als Vergleich
oder pro Operator bezeichnet. Und ein einzelnes Gleichheitszeichen
ist ein Zuweisungsoperator. Das bedeutet im Grunde, dass ein einzelnes Gleichheitszeichen einer Sache,
in diesem Fall einer Variablen, einen Wert
zuweist . Und ein doppeltes
Gleichheitszeichen versucht, einen Vergleich zwischen
zwei verschiedenen Werten anzustellen. Hervorragend. Es gibt also verschiedene Arten
von Vergleichsoperatoren. Wir werden nicht
alle erwähnen , da der Schwerpunkt dieses Videos auf
If-Statements und Booleschen Werten liegen wird. Aber lassen Sie mich
Ihnen noch ein paar zeigen. Das Gegenteil von
Gleichem ist gleich nicht gleich. Das ist ein Ausrufezeichen. Und ein einziges
ist gleich heißt nichts gleich und es prüft
das Gegenteil. Es fragt also, ob
Zahl oder Num eine Variable nicht gleich zehn ist? Also, wenn Sie diesen Code ausführen, ja, neun ist nicht gleich
zehn, etwa 20. Es stimmt also, 20 ist nicht
gleich zehn oder zehn. Nun, das stimmt nicht,
weil zehn gleich zehn ist, also erfüllt es
diese Bedingung nicht. Hervorragend. Lassen Sie uns noch ein Beispiel
machen. Nehmen wir an, wir überprüfen
eine Reihe von Zahlen. Nehmen wir an, es gefragt, ob die Zahl kleiner als Null
ist. Nehmen wir an, wir möchten, dass
unser Bereich zwischen 0 und 100 liegt, wenn die Zahl kleiner als Null
ist. Zu niedrig, bringen wir zu niedrig. Wenn dies die spezifische Syntax l hat Sie damit nach einer anderen Bedingung
suchen können, L, wenn die Zahl
höher als 100 ist, wird
L, wenn die Zahl
höher als 100 ist, als zu hoch angezeigt. Andernfalls prüfen wir nicht ob
eine bestimmte
Bedingung vorliegt. Was wir sagen werden,
Zahl innerhalb von Rich, das ist eine, bei der ich
einen Syntaxfehler habe , weil uns hier die Klammern
fehlen. Hervorragend. Nummer in Reichweite bekommen. Was passiert, wenn wir auf 100 gehen? Zahl innerhalb des zulässigen Bereichs? 101? Hoch, und nur
der Vollständigkeit halber, minus fünf ist zu niedrig. Hervorragend. Denken Sie also daran, dass ich gesagt habe, dass bedingte Aussagen
im Grunde genommen auf einen booleschen Wert
hinauslaufen, entweder wahr oder falsch. Also lass uns, lass uns das sehen. Sehen wir uns das Beispiel an.
Lassen Sie mich das alles löschen. Und lassen Sie uns diesen,
diesen Vergleich, einer Variablen zuweisen . Wir nennen einen Druck a. Also, was sind wir, was
machen wir hier? Eigentlich
existiert es nicht mehr, also kann ich das nicht tun, weil
wir diese Variable gelöscht haben. Lass uns einfach etwas Einfaches machen , das wir am Anfang gemacht haben. Also fünf ist gleich fünf. Also weisen wir das Ergebnis
dieses Vergleichs dieser Variablen
zu. Versuche jetzt darüber nachzudenken,
was passieren wird. Es spielt das ab. Und es ist wahr. Fünf ist gleich fünf. Großartig. Nehmen wir an,
es sind fünf oder weniger oder gleich fünf. Es ist wahr. Fünf, weniger oder gleich sechs. Nun, nein. Nein, ist es. Es ist wahr. Es tut uns leid. Ja, es sind fünf, weniger oder gleich vier. Nein, das ist es nicht, dass es falsch ist. Beachten Sie also, wie wir
zu diesem Ergebnis kommen. Wahr oder falsch, wenn es um diesen Zustand
geht. Lassen Sie mich nun ein
wenig rückgängig machen, um zu unseren vorherigen
if-Aussagen
zurückzukehren. Das ist genau das, was hier
passiert. Aussage besteht also
im Grunde darin ,
diesen Zustand zu bewerten und ihn
entweder auf wahr oder falsch herunterzufahren. Jetzt wundern Sie sich vielleicht, können wir dann einfach wahr oder falsch
sagen? Und Sie haben Recht, wenn
wir sagen, ob wahr, drucken, ja. Andernfalls drucken,
nein. Da hast du es. In diesem Fall benötigen
wir also die
Variable num nicht mehr. In diesem Fall
wird wahr immer wahr sein. Großartig. Wie wäre es jetzt mit falsch? Falsch wird immer falsch sein. Also werden wir in diesem Fall
drucken. Lassen Sie mich Ihnen jetzt noch
eine Sache zeigen. Du kannst invertieren. Sie können auch Operationen
mit booleschen Werten ausführen. Du kannst sagen, du kannst das
Gegenteil tun, damit es nicht falsch ist. Und lassen Sie uns das tatsächlich
in einem isolierten Beispiel ausführen. Lass uns keine Eier drucken. Halten Sie
das Video jetzt noch einmal an und denken Sie für ein paar Sekunden an Ihr Ding, das gedruckt
wird. Lassen wir es jetzt wahr werden. Wenn wir nun nicht wahr sind, was wird dann falsch gedruckt? Weil nicht wahr
im Wesentlichen falsch ist. Großartig. Also werden wir sagen, wenn
nicht falsch, drucken Sie, JA. Ansonsten weiß ich, das könnte ein bisschen erfunden sein, ein bisschen verwirrend. Aber wenn man einmal darüber nachgedacht hat, macht
es durchaus Sinn. Nicht falsch ist wahr. Also werden wir ja drucken. Was ist, wenn ich sage, wenn nicht wahr, nicht wahr, nicht wahr ist falsch. Das kann also sein, dass die
Division nicht eingehalten wird. Das wird falsch sein. Also werden wir in dieser anderen Sache
landen. Dann. Da hast du es. Hoffentlich sind Aussagen, wenn
sie jetzt
etwas klarer sind, extrem aussagekräftig. Sie sind sehr einfach, aber Sie werden sie als
Schalter verwenden , um den
Fluss Ihres Codes zu steuern und Ihrem
Code zu ermöglichen, sehr
vielseitig und in gewisser Weise sehr
elegant zu sein .
13. Einführung in Funktionen: Ordnung, Sie haben also in
Ihrem ersten Projekt einen sehr langen Weg zurückgelegt. Und wirklich in sehr
wenigen Codezeilen können
Sie sehen, dass dies nur 31 Zeilen sind und dazwischen viel
Leerraum liegt. Sie haben einige sehr
mächtige und sehr nützliche Fähigkeiten erworben ,
Fähigkeiten, die es Ihnen
ermöglichen, einige Variablen-Sachen zu erstellen. Es ist
eine sehr gute Leistung, an diesen Punkt zu kommen. Du solltest stolz auf dich sein. Also herzlichen Glückwunsch dazu. Auch wenn einige davon immer noch
etwas verwirrend sind, beachten
Sie bitte, dass dies normal ist, dass dies in gewisser Weise erwartet wird, dass
dies eine Menge Informationen und machen Sie sich keine Sorgen, denn sind,
und machen Sie sich keine Sorgen, denn
wir werden
all dieses Wissen,
all diese Informationen, in
den nächsten Beispielen und
den nächsten Lektionen wiederverwenden all diese Informationen, in . Auch dies ist ein sehr guter Fortschritt und das
bedeutet, dass Sie
bereit sind, ein höheres Level zu erreichen. Was brauchen wir also, um unsere Programmierkenntnisse
zu verbessern? Eine Sache, die wir tun müssen, ist diese Gruppe
zu verlassen,
gespendet oder in Maya. Und ich meine, das
ist großartig genug. Es reicht aus,
Coordinate einzugeben , wie wir es
bisher getan haben. Aber wir
sollten wirklich einen Texteditor verwenden oder über Programmierkenntnisse verfügen,
Programmierfunktionen. Es ermöglicht Ihnen nicht nur, Code außerhalb von Maya zu
schreiben, sondern macht auch Ihr
Codierungserlebnis ein bisschen schöner und
unterhaltsamer. Und es wird der erste Schritt sein, um
zu lernen, wie Sie
Ihre eigenen Module oder
Ihre eigenen Bibliotheken erstellen Ihre eigenen Module oder , sodass
Sie Ihren eigenen Code importieren können, genau wie wir es mit der
minus eigenen CMBS-Bibliothek tun. Aber bevor wir dazu kommen, müssen
wir noch
ein Konzept lernen. Und dies ist eines der
wichtigsten Konzepte der sogenannten
objektorientierten Programmierung. Und es ermöglicht Ihnen, zu
lernen, wie Sie skalierbaren
und organisierten Code erstellen. Und es wird Ihnen wirklich die Möglichkeiten des
Programmierens eröffnen. Und das ist das
Konzept von Funktionen. Wir werden Maya für eine Sekunde verlassen, um über Funktionen zu sprechen. Und ich hoffe, es macht dir
nichts aus, wenn ich Farbe benutze. Ich weiß, es ist nicht das
beste Zeichenwerkzeug, aber es ist gut genug für
das, was wir gerade brauchen. Also Funktionen, es gibt zwei
Arten , über Funktionen nachzudenken. Eine von ihnen haben wir
bereits erwähnt, die
sie als Blackbox betrachtet. Lass mich einfach zeichnen. Ich habe versucht, hier eine Kiste zu machen. Es ist also eine mysteriöse Kiste
in dem Sinne, dass wir es nicht wissen und es uns
egal ist, was
darin passiert. Alles, was wir wissen und was uns wichtig
ist, ist, dass es eine Eingabe erfordert. Und es, naja, Eingaben
sind Funktionen. Nehmen Sie nicht immer eine Eingabe entgegen. Sehr oft tun sie das, aber
es ist nicht verpflichtend, aber sie geben immer, immer etwas
zurück. Und das ist ein Schlüsselwort. Rückkehr. Funktionen geben,
werden immer
einen Wert zurückgeben , der die
Ausgabe der Funktion ist. Und wie wir bereits gesehen haben, können
wir diesen
Wert in einer Variablen speichern. Wenn nun der Rückgabewert
einer Funktion nicht definiert ist, sie
Ihnen standardmäßig eine sogenannte Nonne, die im Grunde ein Nullwert ist. Das werden wir sehr bald
erfahren. Lassen Sie uns also
ein Beispiel durchgehen , das uns bekannt
sein sollte. Die Poly-Cube-Funktion. Also noch einmal, wir wissen es nicht
wirklich und es ist uns
egal , wie mein Auge diesen Würfel tatsächlich
kreiert, oder? Alles, was uns wichtig ist, ist, dass
es einige Eingaben erfordert, Beispiel wissen wir, dass es
einen Namen braucht , damit wir den Würfel benennen können. Verzeihen Sie meine Handschrift? Und anhand der Dokumentation wissen
wir auch, dass sie eine
beliebige Anzahl von Argumenten verwenden, die wir verwenden,
um die Ausgabe zu ändern. Und dann ist
das Ergebnis natürlich ein Würfel. Aber wie wir bereits gesehen haben, ist
der zurückgegebene Wert dieser
Funktion eigentlich eine Liste. Und diese Liste enthält
zwei Elemente. Einer von ihnen ist der Name
des Knotens und der andere ist
ein anderes Objekt, eine andere Form die die eigentliche Konstruktion
des Würfels darstellt. Aber bisher haben wir uns
nur
um den ersten
Punkt in dieser Liste wirklich gekümmert . Auch hier
denken Sie über eine Funktion nach
, wenn Sie sie verwenden. Die andere Art, wie Sie
darüber nachdenken, ist , wenn Sie die Funktion tatsächlich
erstellen. Und in diesem Fall wirst
du derjenige sein, der definiert was in
dieser blauen
Box, in dieser mysteriösen Kiste passiert. Und das ist einfach Code. Sehr ähnlich dem Code, den Sie bisher geschrieben
haben, mit ein paar
kleinen Ausnahmen, aber es handelt sich im Grunde um eine
Reihe von Anweisungen. Es ist im Grunde eine Sammlung von Schritten oder eine Sammlung
von Anweisungen die eine Eingabe annehmen oder auch
nicht, etwas mit der Eingabe
machen
und dann
demjenigen, der
die Funktion aufruft , einen Wert zurückgeben. Oder jetzt können sie dann in
einer Variablen speichern, wenn sie möchten. Lassen Sie uns zum Beispiel die sehr einfachen Beispiele durchgehen. Nehmen wir an, wir möchten
ein Kuchenrezept zum Laufen bringen. Kuchenrezept. Und nehmen wir an, wir
wollten die Anzahl der Personen erfassen. Sagen wir n. N bedeutet, dass die Funktion n für die Anzahl der Personen, für die wir
den Kuchen haben
wollen Personen, für die wir
den Kuchen haben
wollen,
annimmt, was eine Zahl ist. In diesem Fall ist es eine Ganzzahl. Eine Ganzzahl ist nur
eine ganze Zahl, wie wir bereits erwähnt haben. Und dann ermittelt es die Mengen und
die Zutaten und alles, was es tun muss, um ein Rezept für diese
Anzahl von Personen zu geben. Und dann sagen
wir zum Beispiel , dass es eine Zeichenfolge
zurückgibt, die nur der Text ist, also
die Texte, aber
das darin enthaltene Rezept. Wenn jetzt jemand diese Funktion
benutzt, ruft
er Kuchen auf. Kuchenrezept. Wir wissen, dass es n erwartet, was eine Ganzzahl ist. Jetzt bist n du, du, du entscheidest, was du nennen willst. Dies wird zu einer Variablen. Sie entscheiden, wie Sie es nennen,
aber wir wissen, dass es sich um eine Ganzzahl handelt, also braucht es eine Zahl. Nehmen wir an, wir wollen einen
Kuchen für vier Personen. Nun, wer auch immer diese Funktion
aufruft, kann einfach
sagen, er kann das
Ergebnis einfach in einer Variablen speichern. In diesem Fall nenne ich
das variable Rezept. Was
hier passiert, ist, dass wir die Funktion
wieder
als eine Box betrachten, von der die Funktion
wieder
als eine Box betrachten, von der wir nicht
wissen, was in Ihnen
als Entwickler
vor sich geht , Sie wissen natürlich, was in
Ihnen
passiert, aber jemand anderes,
der die Funktion benutzt aber jemand anderes,
der die Funktion benutzt, muss es
nicht wissen. Sie könnten sogar
die Anweisungen innerhalb
der Funktion ändern . Und sie rufen immer noch einfach Cake Recipe mit den Argumenten , dass Sie
die neue Funktion definieren. Was also passieren wird, ist Ihre Funktion
diese Eingabe akzeptiert. Es wird darin eine Art
Codierung vornehmen, um das Rezept zu verarbeiten
, und dann gibt es diesen Wert an
den Benutzer zurück , sodass entweder ignoriert oder
gespeichert werden kann, in diesem Fall in dieser
Variablen namens Recipe. Hoffentlich ist das
klar genug. Lassen Sie uns nun einige tatsächliche Funktionen
erstellen. Wenn Sie also eine Funktion
erstellen, heißt
das eigentlich Definieren. Eine Funktion. Typ
würde Tod bedeuten, Szene definieren plus in
Definition, D, E, F-Leerzeichen und dann den
Namen Ihrer Funktion. Lass uns etwas Einfaches machen. Nehmen wir an, lassen Sie uns eine
Funktion erstellen, die Hallo sagt. Also tippe, sag Unterstrich Hallo, öffne und schließe
jetzt Klammern. Und fangen wir einfach an. Lassen Sie uns eine Funktion haben,
die keine Argumente, überhaupt
keine Eingabe, akzeptiert. Und dann Doppelpunkt, drücken Sie die Eingabetaste. Sie werden feststellen, dass
mir mein automatisch diesen Einzug gegeben hat. Immer wenn Sie eine Funktion
erstellen, muss
alles, was in die
Funktion gehört, eingerückt werden. Denken Sie daran, dass das vier Leerzeichen sind. Oder im Fall des
Skript-Editors kann es ein Tab den gesamten Code sein,
alle Anweisungen,
die wir in
der Funktion haben möchten, werden,
wie bereits erwähnt,
auf , werden,
wie bereits erwähnt, die wir in
der Funktion haben möchten diese Weise
eingerückt. Also lasst uns eine Botschaft haben, und diese Botschaft
wird sehr einfach gehalten. Lass uns einfach Hallo sagen. Lassen Sie uns
jetzt
nichts zurückgeben, sondern
drucken wir einfach diese Nachricht aus. Hervorragend, also lass uns das
ausprobieren. Lassen Sie uns diesen Code ausführen. Keine Fehler, aber es ist nichts passiert. Wir haben gerade unseren Kodex
wieder verfassungsgemäß bekommen. Nehmen wir an, schreiben wir hier
eine Funktion auf. Nennen wir es jetzt noch nicht. Lass uns das einfach schreiben und
sehen, was passiert. Es passiert nichts. Lassen Sie uns nun die
eigentliche Funktion
ausdrucken , um sie ein wenig zu überprüfen. Interessant, wir
haben dieses komische Ding. Es sagt Funktion sagt Hallo an einer zufälligen, scheinbar
zufälligen Zahl. Was hier also passiert, ist, wie ich bereits erwähnt
habe, die Idee der
objektorientierten Programmierung erwähnt. Eine Funktion und fast alles in Python wird als Objekt bezeichnet. jetzt nicht zu viele Gedanken über diese Definition eines Objekts. Aber im Grunde wissen Sie, dass diese Funktion jetzt im Speicher
existiert, weshalb wir diese Nummer bekommen haben. Deine Funktion ist im Grunde in neuem Rum
gespeichert. sich auch hier nicht zu viele Gedanken über diese technischen Details. Aber wisse, dass diese
Funktion existieren wird, aber sie gibt uns ihren Wert
noch nicht , bis wir die Funktion aufrufen. Rufen wir also diese
Funktion auf und führen den Code aus. Hervorragend. Jetzt sagt es tatsächlich Hallo. Jetzt haben wir über
Rückgabewerte gesprochen. Lassen Sie uns also überprüfen, was diese
Funktion zurückgibt. Ich gebe result equals ein, sag Hallo, öffne und
schließe die Klammer. Jetzt speichern wir das
Ergebnis oder den Rückgabewert dieser Funktion in dieser
Variablen namens result. Lass uns das ausdrucken. Ergebnisse drucken. Hervorragend. Also sagen wir immer noch Hallo, wie Sie hier sehen können. Und wir haben dieses
Ding, das man keins nennt. Wie ich bereits erwähnt habe, ist
unbekannt, dass es sich um einen Nullwert handelt, quasi um einen leeren
oder leeren Wert. Sie können ein nicht dem Falschen
ähnliches Ungültiges behandeln, was in gewisser Weise
wie ein Falsch in einem booleschen Wert ist. Aber es ist eine eigene
spezielle Art von Wert. Es ist eigentlich sehr nützlich. Es
ist nicht nur leer, sondern auch sehr nützlich, um zu überprüfen,
ob Sie
einen Wert
aus einer Funktion zurücknehmen oder nicht einen Wert
aus einer Funktion zurücknehmen , wie
wir sehr bald sehen werden. Aber wenn Sie sich erinnern, habe ich gesagt, dass Funktionen immer einen Wert zurückgeben. Da wir nun nicht
explizit etwas zurückgeben, gibt Python standardmäßig unknown
zurück. Das ist also so, als würde man
explizit keine zurückgeben. Also lasst uns
das ein bisschen ändern. Und anstatt die Nachricht zu
drucken, geben
wir die Nachricht zurück. Beachten Sie nun, dass hier
keine Klammern stehen, es ist nur eine zurückgegebene
Leertaste. beachten ist nun, dass Return das Ende
der Funktion bedeutet. Es wird nicht nur
den Wert zurückgeben, sondern auch die Funktion
beenden. Oder wir werden
das in einer Sekunde sehen. Lass uns das ausführen. Ich werde
die Druckergebnisse vorerst loswerden. Und lassen Sie uns diesen Code ausführen. Lassen Sie mich zuerst das Ausgabefenster
löschen. Lassen Sie uns diesen Code ausführen. Nichts Ähnliches passiert. Warum nicht? Nun, der Grund ist, dass
wir nicht mehr drucken. Wir
geben die Nachricht einfach zurück anstatt sie anzuzeigen. Wenn wir nun das
Ergebnis, das wir hier haben, tatsächlich drucken , weisen
wir dieser
Variablen namens result erneut den Rückgabewert der den Rückgabewert der Funktion zu. Lassen Sie uns den Code ausführen. Jetzt das Wort Drucken
etwas Exzellentes. Jetzt sagen wir Hallo. Großartig. Lassen Sie uns also die Funktion erweitern. Aber bevor wir das tun, wollte
ich
Ihnen zeigen , wie die Rückgabe
das Ende der Funktion bedeutet. Lass uns nach der Rückgabe etwas drucken. Sagen wir einfach nach der Rückkehr. Und lassen Sie uns einfach diesen Code ausführen. Sie sehen, dass wir
immer noch Hallo drucken, aber das sind wir nicht wirklich, wir kommen
nicht an diesen Punkt, auch hier liegt das daran, dass
returned das Ende
der Funktion bedeutet und diesen Wert zurückgeben
wird. Nur um das
noch klarer zu machen,
was passiert, wenn
ich,
anstatt eine Nachricht zurückzugeben, eine Nummer zurückgebe. Lass uns 100 zurückgeben. Jetzt. Machen Sie eine Pause und stellen Sie sich vor,
was hier passieren wird. Aber ich denke, es ist sehr klar. Es wird
100 drucken und wir ignorieren
diese Meldung hier oben
völlig. Großartig. Gehen wir also zurück zur
Rückgabe der Nachricht. Und lassen Sie uns diese
Funktion ein wenig erweitern. Lassen Sie uns es jetzt ein
bisschen ausgefeilter machen. Und lassen Sie uns ein
Argument hinzufügen. Nehmen wir an, wir wollten jemandem Hallo
sagen. Sagen wir, nun,
Sie würden eine Variable oder ein Argument namens name eingeben und
wir möchten dem Namen Hallo sagen. Nun, wir gehen davon aus, dass der
Name eine Zeichenfolge ist, genau wie dieser Kerl hier. Wenn Sie also zwei Zeichenketten haben, können
Sie sie
zusammenfügen, indem Sie einfach Plus sagen, wir können Hallo plus Name sagen. Lassen Sie uns diesen Code erneut ausführen. Oh, großartig, wir haben,
wir haben einen Fehler. Warum er, lass uns sehen,
was dort passiert. Error say hello, benötigt
genau ein Argument, genau
Null angegeben, weil wir jetzt ein Argument
erwarten. Lassen Sie uns also einen Namen weitergeben. Sagen wir Adam. Und ich wiederhole, wie gesagt, der Name wird
eine Zeichenfolge sein. Also jetzt Name. Sobald wir das ausgeführt haben, beachten Sie, wie der Name
in Form von Anime aussehen wird. Wir sagen im Grunde, okay, dann wird diese Variable namens
Name Adam sein. Also sollten wir jetzt Hallo
und Adam sagen. Lassen Sie uns das jetzt ausführen
und sehen, was passiert. Hervorragend. Es fehlt ein Leerzeichen. Fügen wir einfach das Leerzeichen nach Hello
hinzu und führen den Code erneut aus. Wunderschön. Das ist ausgezeichnet. Zu beachten ist
auch, dass diese Variable hier nur im
Rahmen dieser Funktion existiert. Nun, es gibt ein anderes bestimmtes
Wort, das ich verwende. Ich benutze es mit Absicht. Geltungsbereich. Gültigkeitsbereich bedeutet, dass diese
Funktion, sorry diese Variable, entweder die
Namensvariable oder sogar diese
Nachrichtenvariable. Dies wird nur im Rahmen
der Funktion existieren. Sie leben im Grunde so
lange, wie die Funktion läuft. Also, nur um diesen Punkt zu verdeutlichen, um den Punkt zu verdeutlichen,
lassen Sie uns den Namen
in das, was passiert, hineindrucken. Wir haben einen Fehler
, weil der Name nicht
definiert ist , weil named außerhalb der Funktion nicht
existiert . Sobald wir uns wieder daran erinnern,
lebt
alles, was innerhalb
der Funktion ist, nach dieser Einrückung weiter. Sobald wir
diese Vertiefung verlassen haben, sind wir fertig. Darauf haben wir keinen
Zugriff mehr. Nun, wenn ich
diesen Ausdruck in die
Funktion einfügen würde , was passiert dann? Jetzt drucken wir
hier Atom, so der Name. Und wenn wir den Namen auch
hier ändern, wie George, z. B. drucken wir
jetzt George. Hervorragend, also lassen Sie uns
das noch ein bisschen erweitern. Und lassen Sie uns ein zweites Argument finden. Nehmen wir an, wir
wollten dem,
dem vollen Namen der Person Hallo sagen . Fügen wir eine weitere Variable hinzu. Nennen wir das LastName.
Lass uns das ausführen. Jetzt haben wir einen weiteren Fehler , weil zwei Argumente benötigt werden. Wir geben nur einen weiter. Das ergibt absolut Sinn. Sagen wir George Smith, sehr gebräuchlicher Nachname. Also geben wir
diesen Nachnamen weiter. Und lass uns, lass uns diesen ausführen. Das einzige Hallo zu George ist
natürlich, weil wir den Nachnamen nicht hinzugefügt
haben. Nun, wir könnten das machen, wir könnten plus LastName machen. Und das wird funktionieren. Aber auch hier
haben wir keinen Platz. Wir könnten
eine weitere Zeichenfolge mit nur einem Leerzeichen
erstellen eine weitere Zeichenfolge mit nur einem Leerzeichen und dann immer wieder ein Plus
hinzufügen. Das wird funktionieren. Aber das wird ein
bisschen wortreich. Das ist zu viel Tippen. Lassen Sie uns also eine andere
Art lernen, Fäden zusammenzusetzen. Lassen Sie mich all
diese Plus-Variablen loswerden. Geben Sie jetzt mit mir hier ein, wir sagen Hallo,
Leerzeichen, öffnen und schließen Sie
geschweifte Klammern. Um das zu verdeutlichen,
diese geschweiften Klammern, sind keine Klammern, sind geschweifte
Klammern, Art von Leerzeichen. Und dann wieder geschweifte Klammern. Jetzt sagen wir am Ende
der Zeichenfolge, wir werden das Punktformat sagen. Klammern öffnen, schließen,
wir sagen Name, Komma, Nachname, Nachname. Nehmen Sie sich also eine Sekunde , um eine Pause einzulegen und sich vorzustellen, was hier passieren
wird. Es könnte ein
bisschen verwirrend sein oder es könnte sehr klar sein. Aber was passieren wird,
ist, dass diese geschweiften
Klammern, also diese geschweiften Klammern zu
Platzhaltern werden , wenn wir
diese Punktformatfunktion verwenden.
Python weiß, dass etwas diese Breite der geschweiften
Klammern ersetzt. In diesem Fall gibt es
zwei geschweifte Klammern und zwei Variablen. Also der Name, sind diese geschweiften Klammern
werden durch den Namen ersetzt, und diese zweite farbige Klammer wird durch den Nachnamen ersetzt. Lass uns einfach unsere Botschaft
ein bisschen verbessern. Hallo zu Vor- und
Nachnamen sagen. Hervorragend. Jetzt
heißt unsere Nachricht oder unser Ergebnis Hallo zum Urteil. Großartig. Hoffentlich ist es soweit klar, aber um es noch
ein bisschen klarer zu machen, lassen Sie uns ein
anderes Beispiel durchgehen. Ich habe über etwas nachgedacht, das
nichts mit
Animation zu tun hat, um zu versuchen, es
ein bisschen interessant,
unterhaltsam und vielleicht übersichtlicher zu gestalten .
Lass uns etwas tun, das mit deinen Finanzen zu
tun hat. Wenn Sie von dieser
Zahlungsbewegung namens Fire gehört haben, was finanzielle
Unabhängigkeit bedeutet, sollten Sie vorzeitig in Rente gehen. Das ist natürlich, wir
werden nicht über Finanzen sprechen. Ich bin kein Finanzexperte. Das ist keineswegs
irgendein Ratschlag. Das ist nur ein bisschen
ein lustiges Beispiel. Es gibt diese Art
von Berechnung, dass diese Leute, die in Beschlag sind,
die im Grunde sagen, okay, wenn Sie wissen wollen, wie viel
Geld Sie investieren müssen, um vorzeitig in Rente zu gehen oder
irgendwann in Rente zu gehen, sagen sie im Grunde, nehmen Sie, was auch immer Ihre
jährlichen Ausgaben sind, und machen Sie daraus die vier Prozent Ihrer Investitionen
oder Sie sparen. Die Idee dahinter ist
, dass der Markt im Allgemeinen, wie die Börse oder so
etwas wie Anleihen oder irgendeine Art von Anlagen,
Ihnen jedes Jahr
eine Rendite von 4% bringt. Wenn Sie also von
dieser jährlichen Rendite von 4% leben können, können
Sie im Grunde
einige Jahre von
diesen Investitionen leben . Nehmen wir zum Beispiel an, dass
Ihre jährlichen Ausgaben 40.000$
betragen, z. B. nun, 40.000$ sind
4% von 1 Million $. Das ist eine Menge Geld. Aber auch hier handelt es sich nicht
um eine Finanzklasse. Das bedeutet, dass Sie 1 Million $
investieren
müssen und jedes Jahr
4% davon erhalten, was Ihren
40.40.000 USD entspricht, die Sie benötigen, Ihre Ausgaben
zu decken,
unabhängig davon, wie hoch Ihre Ausgaben sind. Schreiben wir diesen
Rechner also nur als Beispiel. Geben Sie erneut mit mir Definition
def ein und
finden Sie den Funktionsraum. Und nennen wir die Funktion, sagen
wir Feuer, Unterstrich, Unterstrich, Taschenrechner, offene Klammer, Klammer
schließen. Hervorragend. Also, was
wollen wir nun mit unserem Input machen? Wir wollen Ausgaben, oder? Wir möchten berechnen, wie
viel Investition Sie benötigen. Meine Güte, wir werden
die Ausgaben erhalten und wir werden
zurückzahlen, wie viel Geld Sie investieren
müssen, um von den 4% aus diesen
Investitionen leben
zu können, oder? Nehmen wir an, der
Betrag ist gleich und dies sind die
Berechnungskosten geteilt durch 4/100. Und lassen Sie uns diesen Betrag zurückgeben. Lassen Sie uns also einfach das
Ergebnis dieser Funktion drucken. Jetzt müssen
wir die Ausgaben natürlich durch eine Zahl ersetzen
. Das werden 40.000 sein. Und lassen Sie uns einfach diesen Code ausführen. Wir haben 100. Das ist jetzt eindeutig falsch. Mal sehen warum. Das ist eigentlich der Gründe, warum ich ein
Beispiel mit Zahlen
wollte , um Ihnen einen weiteren
besonderen Aspekt dieser Version
von Python zu zeigen . Lass mich einen neuen
Tab öffnen und lass es uns machen. Lassen Sie uns diese
Berechnung zusammen durchführen. Nehmen wir an, wir
teilen vier durch 100. Wir sagen, speichern Sie diese
einfach in einer Variablen namens R.
Lassen Sie uns das Ergebnis drucken. Oh, tut mir leid, das ist
keine Division. Ein Charakter, der mein Fehler
war , ist der
Schrägstrich zum Teilen. Großartig. Also nochmal, das ist eindeutig falsch. Was erwarten wir also von dieser Division, wenn Sie vier durch 100
teilen, oder wir erwarten 0,04, oder? Was hier also passiert
, ist , dass wir
zwei ganze Zahlen dividieren. Und jetzt erhalten Sie
jederzeit für jede Version unter einer
Python-Version unter Python drei, wenn Sie zwei Ganzzahlen dividieren, wenn Sie zwei Ganzzahlen dividieren,
eine Ganzzahl zurück, was bedeutet, dass der Wert gekürzt
wird. Was bedeutet das,
wenn ich 1,5 habe z. B. denk daran, dass ich
davor eine Ganzzahl gesagt habe. Im Grunde eine ganze Zahl, die keine Dezimalstellen hat. Da wir also
zwei ganze Zahlen dividieren, diese Zahl gekürzt,
wenn das Ergebnis 1,5 wird
diese Zahl gekürzt,
wenn das Ergebnis 1,5 wäre und wir haben nur die eine. Wir haben im Grunde nur die Dezimalzahlen
entfernt. Jetzt, wo es
schwierig ist, wenn Sie
einen Dezimalpunkt haben , der als Float bezeichnet
wird. Nun, wieder einmal, das ist int, ist nur eine ganze Zahl. Und ein Float hat Dezimalzahlen. Was müssen wir also tun,
um dieses Ergebnis zu erzielen? Nun, wir müssen
eine Ganzzahl durch schwimmend dividieren. Da hast du es. Das entspricht
eher dem, was wir erwarten. Das funktioniert auch
andersherum. Übrigens können wir
eine Gleitkommazahl auch durch eine Ganzzahl teilen ,
solange eine der
Zahlen schwimmend ist, Python Ihnen
den richtigen Wert gibt. Aber wenn es kein Float ist, noch
einmal, wenn es
nur eine Ganzzahl ist, dann wird es gekürzt, es gibt Ihnen
tatsächlich dieses Ergebnis. Und dann
kürzt es es, weil es denkt, dass Sie
nach einem Ganzzahlraster fragen. Das ist also eine
wichtige Besonderheit , die Sie in Python finden werden. Und wenn Sie
versuchen, Berechnungen durchzuführen und auf dieses Problem stoßen, kann
es extrem verwirrend sein,
aber wissen Sie , dass es normalerweise
eine gute Idee ist , einfach 0,0 zu um eine Zahl in eine Float umzuwandeln, dann vermeiden Sie dieses
Problem vollständig. Also noch einen, von dem wir wissen, dass wir ihn brauchen. Das ist der tatsächliche
Wert, den wir benötigen. Lass es uns einfach hier ersetzen. Nochmals, das ist
nur Mathe und du musst nicht wirklich viel
Mathe lernen oder was müssen wir tun? Machen Sie sich also keine Gedanken über
die Einzelheiten. Wisst nur, dass wir
im Grunde berechnen was das, was das ist. den vier Prozent der ausgezeichneten
Ausgaben geteilt durch 0,40, 0,04 erhalten wir den
endgültigen Betrag, den wir benötigen. Und das sind 1 Million $. Und beachten Sie, dass wir hier einen
Floß haben, was großartig ist. spielt es keine Rolle, ob es sich In diesem Fall spielt es keine Rolle, ob es sich
um eine Gleitkommazahl und eine Ganzzahl handelt. Lass es uns noch einmal testen. Nehmen wir an, Sie benötigen 80.000$
, um ein ganzes Jahr zu überleben. Dann bräuchtest du natürlich 2 Millionen $. Da hast du es. Auch hier handelt es sich nicht
um eine finanzielle Diskussion. Dies ist nur ein Beispiel. Aber ich wollte dir
diese eigenartige Seite von Python zeigen. Wir sind zahlreich und ganzzahlige Divisionen können ein
bisschen knifflig sein. Bevor wir weitermachen, möchte ich
noch über eine letzte
Sache sprechen, und die ist äußerst wichtig. Und es gibt eine
Dokumentation, die ich bereits
erwähnt habe , in der es keine
andere gibt, um Zeichenketten zu erstellen. Sie können
einfache Anführungszeichen, doppelte Anführungszeichen oder dreifache Anführungszeichen verwenden. Nun habe ich auch erwähnt,
dass dreifache Anführungszeichen für
sogenannte Docstrings
reserviert sind . Docstrings ist im Grunde eine
Dokumentation für eine Funktion. Was meine ich damit? Typ würde
dreifache Anführungszeichen bedeuten, 123. Das sind übrigens drei
doppelte Anführungszeichen. Und dann geben wir eine Nachricht ein. Nehmen wir an, damit wird
berechnet, wie viel Sie für die Berechnung des
Rentenbetrags benötigen, z. B. Rentenbetrag. Geben Sie nun drei weitere Anführungszeichen ein, 123, aber drei doppelte Anführungszeichen.
Und lassen Sie uns diesen Code ausführen. Das gleiche Ergebnis. Das ist also nur eine Zeichenfolge
und das
wirkt sich in keiner Weise auf Ihren Code aus. Aber es ist äußerst nützlich für etwas, das
wir schon einmal gesehen haben. Erinnern wir uns jetzt an
diesen Hilfebefehl. Wir haben gesehen, dass diese Hilfe funktioniert. Lassen Sie uns unsere Funktion innerhalb
dieser Hilfefunktion ausführen. Also jetzt noch einmal aufgepasst, ich
rufe diese Funktion nicht auf. Ich öffne und schließe nicht die Klammer und
schreibe einfach den Namen
der Funktion. Lassen Sie uns also diesen Code ausführen. Hilfe beim Öffnen der Klammer, beim
Fernrechner, beim Schließen der Klammer. Und du siehst, es heißt, hilf ihnen , für einen Taschenrechner
im Hauptmodul zu arbeiten. Das bedeutet nur, dass du dabei bist. Wann immer Sie kein Modul haben , das im Grunde
eine Python-Datei ist, werden
wir
das sehr bald sehen. Es nennt es einfach gemein, also mach dir über
diesen Teil nicht zu viele Gedanken, aber es sagt
dir im Grunde den Namen der Funktion. Und du kannst hier sehen, es zeigt dir diese
kleine Hilfe. Wenn also jemand Ihre
Funktion benutzt, kann
er Hilfe dazu ausführen. Und sie können eine
kleine Nachricht von Ihnen, dem Entwickler, erhalten, die ihnen sagen, was zu tun ist oder was die
Funktion tut. Nun noch etwas, das sehr
wichtig ist , wenn es um Docstrings
geht. Und das
werden wir benutzen. Wir werden
das von nun an tun, sagt R, dass sie erwähnen, was in dieser Eingabe
erwartet wird. Denken Sie jetzt
noch einmal daran, dass
diese oder diese
Variable aufgrund des Gültigkeitsbereichs nur
innerhalb der, innerhalb der Funktion existiert . Und weil es Python ist, könnten
wir diese Funktion weitergeben und alles, was wir
wollen, befestigen. Daher ist es wichtig, in
der Dokumentation zu erwähnen , was erwartet
wird,
unabhängig davon, was diese Funktion
erwartet. Dazu könnten Sie einfach Ausgaben oder Burn
sagen, Klammern
schließen und den Text eingeben
, der diesen Fall erhalten
soll, sagen
wir, es handelt sich um eine Ganzzahl. Eigentlich gibt es verschiedene
Arten, das zu schreiben. Ich werde mich
an einen halten, der heißt,
es ist ein konventioneller
Standard von Google. Und was sie tun, ist args zu sagen, was ein Argumenten-Doppelpunkt war. Und dann werden wir das auf den Argumenten
einrücken. Wir werden noch einmal die
Ausgaben aufschreiben. In Klammern. Wir werden den
Typ dieser Variablen schreiben, und das wird eine Ganzzahl sein weil wir
eine Zahl erwarten, oder? Dann schreiben wir
einen kleinen Kommentar dazu. Sagen wir Ihre jährlichen Ausgaben. Nochmals, all dies
ist nur Dokumentation, aber es hilft jedem
, der diese Funktion verwendet, was
in ein paar Monaten Sie selbst sein könnten, zu
wissen, was erwartet wird. Jetzt wird noch
etwas Nützliches erwähnt, was
der Rückgabewert ist. Wir
geben den Rückgabepunkt ein. Und dann gebe ich
den Wert ein, der zurückgegeben
wurde. In diesem Fall wissen wir,
dass es sich um einen Float handelt. Lass uns das noch einmal ausführen. Großartig. Auch hier gibt uns die
Hilfefunktion all diese Informationen
. Sobald du die Hilfe
von jemandem benutzt, deine Funktion benutzt, weiß
es, okay, sie hat eine Variable, die eine Ganzzahl
erwartet. Und ich kann mit einem Float als
Gegenleistung rechnen , was den Rückgabewert
angeht. Hoffentlich hilft das, etwas mehr
zu verdeutlichen, welche Funktionen
es gibt. Dies war nur eine kurze
Einführung in sie. Lassen Sie uns nun unseren
Code in eine Funktion umwandeln.
14. Code in eine Funktion verwandeln: Okay, zurück zu unserem Code. Lassen Sie uns nun all
diesen Code in eine Funktion umwandeln, damit er ein
bisschen wiederverwendbarer ist. Jetzt, da wir wissen, was Funktionen
sind und wie sie erstellt werden, können
wir
diesen Code sehr einfach in eine von ihnen umwandeln. Es mag nach viel erscheinen, aber es ist eigentlich sehr einfach, all das
in eine Funktion
umzuwandeln. Aber lassen Sie uns zuerst nachdenken, wofür
wir die Funktion benötigen? Fangen wir mit den
Argumenten an,
die die Eingabe sind Wie soll
die Eingabe aussehen? Wir wollen wahrscheinlich denjenigen,
der die Funktion benutzt, zur Seite stellen
lassen der die Funktion benutzt, zur Seite welche Art von PrEP er machen
möchte, oder? Ich kann mir vorstellen, dass wir vielleicht
auch möchten, dass sie den Namen des
Steuerelements und die neue Geometrie
festlegen. Aber lassen Sie es uns vorerst
einfach halten. Nehmen wir an, wir treffen die Entscheidung der Geschäftsleitung, einfach
zu gehen ihnen die Kontrolle über
die Art des Requisitengriffs zu
geben. Lass uns das machen. Nehmen wir an, wir erstellen erneut eine
Funktion, um mit der
Definition einer Funktion zu beginnen , die
Sie def space eingeben. Lassen Sie uns nun die Funktion nennen, die ich benennen
werde . Sie
erstellt Unterstrich, Unterstrich, Reg, offene
und geschlossene Klammern. Lass mich das ein
bisschen größer machen. Jetzt brauchen wir die, die Eingabe. Nun, es ist sehr einfach. Wir können
diesen Namen hier einfach wiederverwenden. Weil wir es sind, da
wir diese Namen bereits im gesamten Code
verwenden. Hier unten. Was wir tatsächlich hören
, sind Aussagen. Warum das nicht einfach wiederverwenden und es uns einfach
machen. Requisitenunterstrich. Und dann schließen wir
Klammern und dann einen Doppelpunkt. Und jetzt wissen wir, dass diese Befehle Teil
der Funktion sein sollen, wir müssen sie einrücken. Wie schaffen wir, wie
schaffen wir diese Einbuchtung? Wir können den gesamten Code markieren und einfach die Tabulatortaste
drücken. Da hast du es. Das ist alles. Das ist alles was du brauchst. Wir haben das alles
gerade in die Praxis umgesetzt. Großartig. Was machen wir damit hier oben? Wir brauchen es wirklich nicht
mehr, also können wir es löschen. Jetzt befindet
sich dieser ganze Code in einer Funktion, also lassen Sie uns ihn einfach ausführen und
sehen, was passiert. Nun, es
passiert nichts und es tut mir leid, das wird ein bisschen
schwer zu lesen, weil der Code wächst,
aber es ist großartig weil du mehr Code
schreibst. Es ist also nichts wirklich passiert. Das ist eine, das ist alles nur die
Definition unserer Funktion. Denken Sie daran, dass wir
diese Funktion aufrufen müssen ,
um sie verwenden zu können. Nun, lass uns das hier unten
machen. Rufen wir es hier an. Entsprechendes erstellen,
lassen Sie mich einfach tippen, das erzeugt Rig offene und
geschlossene Klammern. Und jetzt denk daran, dass
wir eine Eingabe erwarten. In diesem Fall
wird es als Requisitentyp bezeichnet. Wir erwarten eine
Zeichenfolge und
lassen Sie uns tatsächlich ein wenig
Dokumentation für
unsere Funktion über Doc-Strings schreiben . Einmal kann ich mich an
dreifache Anführungszeichen erinnern. Das können übrigens auch
einfache Anführungszeichen sein. Dreifache einfache Anführungszeichen, einfache Anführungszeichen oder
drei doppelte Anführungszeichen. Ich bevorzuge die doppelten. Schreiben wir einfach ein
Empfehlungsschreiben. Geh ohne Kontrolle. Also
schreibe ich einfach, erstelle ein Stück Geografie mit Kontrolle darin. Jetzt schreiben wir in die Argumente, dass es Argumente
braucht, Doppelpunkt. Und dann
erwarten wir den Requisitentyp. Wir wissen, dass dies eine Zeichenfolge ist. Und wir wissen, dass
es ein Würfel, eine Kugel oder
ein Kegel sein kann . Noch einmal, das ist alles
nur Dokumentation. Dies ist nur für
alle,
die die Funktion verwenden müssen, um ein
bisschen Hilfe zu erhalten. Der Code muss nicht unbedingt
funktionieren, aber er ist äußerst nützlich. Und ich würde sagen, dass es eine sehr, sehr nützliche Angewohnheit
ist, weil er Ihnen das Beschichten so viel einfacher
macht. Sobald Sie eine Dokumentation haben, unterscheidet Sie
sich ehrlich gesagt von allen, von vielen Leuten, dass Code so
nützlich ist und
von anderen Programmierern sehr geschätzt wird. Ich empfehle Ihnen, sich
das zur Gewohnheit zu machen. Manchmal kann es frustrierend sein, manchmal ist es zusätzliche Arbeit. Aber auf lange Sicht
lohnt es sich sehr. Und zurück, naja, wir haben noch nichts
wirklich zurückgegeben. Also lasst uns den
Rückgabewert jetzt nicht hinzufügen. Lassen wir es einfach so wie es ist. Großartig. Wir wissen also, dass wir
eine Saite erwarten und wir wissen, dass
wir die folgenden Optionen haben
: Würfel, Kugel oder Kegel. Lassen Sie uns eigentlich tippen, tut uns leid, wir wissen, dass wir standardmäßig Würfel verwenden. Also fügen wir das einfach hinzu, wenn wir den Docstring
hören. Geben wir Cube ein, z. B. lassen Sie uns einfach diesen Code ausführen. Da hast du es. Hervorragend. Hervorragend. Lassen Sie uns jetzt etwas anderes
erstellen. Jetzt siehst du, wie schön
es ist, eine Funktion zu haben. Sie müssen den gesamten Code nicht
kopieren und einfügen. Sie können
diese Funktion einfach kopieren und in die folgende Zeile
einfügen. Nehmen wir nun an, wir
wollen
auch einen Kegel haben . Das ist alles was wir tun müssen. Führe einfach den Code aus. Jetzt hast du einen Würfel, jetzt hast du einen Kegel. Hervorragend. Das ist alles was du tun musst. Sie haben eine Funktion
und können Ihren Code jetzt ganz einfach
wiederverwenden. Sagen wir, nur um
der Sache willen,
lassen Sie uns
auch eine Kugel erstellen. Weil warum nicht? Weil wir es schaffen können. Los geht's, Kugel, Würfel und Zähler. Wunderschön. nun der bevor
wir weitermachen Vollständigkeit halber und aus Neugier diesen Code noch einmal ausführen, mich nun der
Vollständigkeit halber und aus Neugier diesen Code noch einmal ausführen,
bevor
wir weitermachen. Es wird ein
bisschen chaotischer. Ich mag es, wenn Sie eine Sonde erstellen ,
die sich nur
über die vorherige überlappt. Was wäre, wenn wir uns
einfach ein bisschen organisieren könnten? Jetzt siehst du, wir haben
diese Move-Funktion. Lassen Sie uns, lassen Sie uns zu den Eingabeaufforderungen übergehen,
während wir sie erstellen. Also nehmen wir das und verwandeln
es ganz schnell in Python. Ich weiß, dass das
viele Argumente sind. Noch einmal, so wie Maya es
uns gegeben hat, hol den Malloc-Befehl. Ich werde ein bisschen
improvisieren. Ich verwandle das einfach
in einen Python-Befehl. Aber bevor wir das tun, müssen
wir wissen,
was wir bewegen, oder? Was bewegen wir? Die Kontrolle? Nun, das haben wir nicht, wir
geben die Kontrolle nicht wirklich zurück. Wenn ich das z. B. in
einer Variablen namens Cube speichere, lassen Sie mich die Conan-Kugel,
diesen einfachen Druckwürfel, loswerden . Keine, natürlich ist
sie unbekannt , weil wir nichts
zurückgegeben haben. Was wäre eine gute
Sache, zurückzukehren? Ich denke, sie kontrollieren den Namen des Controllers,
der
erstellt wurde, wäre gut er zurückgegeben würde, sodass der Benutzer, sobald
der Brick erstellt ist, weiß, was die Controller sind, damit er ihn manipulieren
kann. Das ist eine Anpassung, die ich gerade
mache , während wir weitermachen. Was wir also zurückgeben wollen, ist eigentlich der Knoten des
Controllers, den West erstellt hat, oder? Also Kontrollknoten, gib
den Kontrollknoten zurück. Bevor wir es vergessen, da
wir das zurückgeben, fügen
wir es
der Dokumentation hinzu. Kehren Sie zurück und wir
kehren tatsächlich zurück. Fügen wir also einfach hinzu, dass der
Typ zurückgegeben wird. Wir wissen, dass das der
Name der Kontrolle ist. Das ist also ein Zeichenkettenname
des erstellten Kontrollknotens. Dies ist nur ein Hinweis, um
es ein bisschen offensichtlicher zu machen. Hervorragend. Lassen Sie mich also diese
beiden Strahlen hier löschen. Lassen Sie uns diesen
Code noch einmal ausführen. Steuerung. Ich fühle mich, als ob ich
wieder renne, kontrolliere einen. Da hast du es. Also bekommen
wir jetzt den Namen dafür,
diese Kontrollen. Lassen Sie mich jetzt etwas expliziter sein. Lassen Sie mich diese
Variable Cube umbenennen. Lassen Sie mich es in Kube, Control umbenennen. Großartig. Jetzt können wir die
Move-Funktion verwenden. Also nehmen wir das
und fügen es hier ein. Wenn das verwirrend wird, versuchen
Sie bitte, dem zu folgen. Ich improvisiere hier, aber ich weiß, dass wir dieses
Objekt bewegen könnten, wenn es einmal erstellt ist. Nehmen wir also an, wir nehmen an, dass sich der S-Punkt bewegt. Das scheint richtig zu sein.
Es ist hier hervorgehoben. Was bewegen wir jetzt? Nun, lassen Sie uns
die Kube-Steuerung bewegen. Lassen Sie uns das also
als erstes Argument angeben. Kube-Steuerung, kein Leerzeichen. Also sie, der Wert, es bewegt wird, ist
dieser, dieser hier. Lassen Sie uns einfach dieses Argument verwenden
und sehen, was passiert. Wir werden diesen Strich
r
loswerden. Ich werde diesen Strich 0 S
loswerden.
Ich werde dieses W, D verwenden Ich bin mir nicht ganz sicher, was es ist. Aber denken Sie daran, dass wir lange
Namen und Kurznamen haben, also gehe ich einfach davon aus, dass dies der
Kurzname eines Arguments ist. Ich werde
den Strich darin entfernen. Und denken Sie daran, dass
wir in Python Gleichheit verwenden, also sagen
wir w d ist gleich. Und wie wir bereits gesehen haben, sind dies drei Werte. Was tun wir, wenn
wir drei Werte sehen? Nun, wir gehen davon aus
, dass es sich um eine Liste handelt. Und eine Liste ist eine Gruppe von Elementen, die wie wir bereits durch
ein Komma getrennt sind. Also wenden wir diese und
diese Zahl durch ein Komma an. Und dann wird die nächste
Zahl ein Komma sein. Ich stellte mir vor, das
sind, das sind die Achsen, das sind X, Y und Z, oder Z, Koma, Koma. Und dann schließe die Liste. Wir brauchen das Semikolon nicht. Jetzt müssen wir die
Funktion schließen, damit wir sie aufrufen können. Hervorragend. Also bewege dich um diesen Betrag. Hab einfach Geduld mit mir,
während ich das improvisiere, aber das ist gut, deins. Du siehst, wie ich Dinge ausprobiere, gewissermaßen das Leben. Ich werde den Abdruck
loswerden. Lassen Sie uns einfach dieses Lag erstellen, ein
boolesches Argument übergeben werden
muss. Okay, interessant. Nehmen wir an, w d entspricht wahr. Eigentlich, lass mich,
lass mich das entfernen. Wie gesagt, ich habe improvisiert. Lassen Sie uns dieselbe Funktion
ohne eines dieser Argumente ausprobieren . Lassen Sie uns einfach drei
Werte an diese Funktion übergeben. Mal sehen, was passiert. Ich werde diese Werte übergeben
, ohne dass es sich um eine Liste handelt. Es sind im Grunde nur
drei Argumente. Als entferne das. Da hast du es. Das funktioniert. Okay. Also habe ich mich völlig geirrt. Ich entschuldige mich dafür und entschuldige mich, falls das ein
bisschen verwirrend war. Ich habe das nicht im Voraus ausprobiert, aber ich denke, es war
gut für dich dass ich
all das Leben lang ausprobiert habe, weil es Teil deiner Erfahrung sein
wird Dinge
auszuprobieren,
bis sie funktionieren. Manchmal
mag etwas ein bisschen, vielleicht offensichtlich erscheinen, aber
wie Sie in diesem Fall gesehen haben, war
es eindeutig nicht offensichtlich. Ja. Also diese Move-Funktion, so wie sie funktioniert, sie
arbeitet an der letzten
Sache, die wir ausgewählt haben. Jetzt wissen wir, dass wir
diesen Kontrollknoten ausgewählt haben ,
bevor er erstellt wurde. Es tut mir leid, nachdem es erstellt wurde. Das wurde also ausgewählt. Wir sagen also nur,
das ausgewählte Objekt zu bewegen ,
was auch immer es ist. Und diese Bewegungsfunktion wird
in diesen drei Werten verwendet
, also x, y und z. Wie wir gesehen haben,
lassen Sie mich das
natürlich noch einmal machen, nur um es zu zeigen. Es hat mehr, mehr Argumente. Das bedeutet wahrscheinlich relativ. Das, ich bin mir nicht sicher, was es ist, aber es ist momentan nicht
wichtig. Also nehmen wir einfach, bleiben wir
einfach dabei. Lass mich das zu
einer schönen Sechserrunde machen. Wir wissen, dass es funktioniert. Nehmen wir an, wir
wollten einen Würfelkegel erstellen. Lass uns einen Kegel erstellen. Und Sie
denken wahrscheinlich, wenn wir diese Steuerung nicht mehr
verwenden, brauchen
wir sie nicht mehr. Das ist richtig. Das ist richtig. Wir brauchen es nicht mehr
wirklich, also werde ich das loswerden. Aber ich denke, es ist immer noch
eine gute Idee,
den Rückgabewert so zu belassen,
dass sie die Kontrolle haben. Aber wie dem auch sei, das ist dein Tool,
das ist deine Funktion. Also zögern Sie nicht,
dies so zu ändern, wie Sie es möchten. Am Ende des Tages
haben Sie die volle Kontrolle über
all das, was Sie brauchen, um einen Würfel zu erstellen. Lass uns einen Kegel erstellen. Es sei denn, es bewegt den Würfel
nicht. Wir werden sie loswerden. Bewege dich auf dem Würfel. Wir werden einen Kegel erstellen, werden den Kegel bewegen. Das einzige, was wir wollen, ist
Abstand zwischen ihnen. Und dann erstellen wir eine Kugel. Und lasst uns diese Angst
doppelt so weit bewegen wie den Kegel. Verschieben wir es also um 12 Einheiten,
negative 12. Einheiten. Okay, wir werden damit
fertig sein. Lassen Sie uns diesen Code ausführen. Und da hast du es. Würfel, Kegel, Kugel,
alles weit voneinander entfernt. Hübsch präsentiert, bereit, von Ihnen oder jemand anderem
animiert zu werden. Großartig. Nochmals vielen Dank, dass Sie mich bei all
diesen Experimenten begleitet haben. Hoffentlich war das für dich
nützlich, und wir sehen uns in
der nächsten Lektion. Danke.
15. PyCharm - Installieren und Setup: Ich werde Ihnen zeigen, wie man
Unsettled by Charm installiert ,
denn
Sie werden
sehen, wie ich das für den
Rest dieses Kurses verwenden werde . Natürlich können Sie
jede andere IDE oder jeden beliebigen
Texteditor verwenden . Wenn Sie Sublime verwenden möchten, seien Sie VS Code Note, aber wenn Sie möchten, sind das alles Tools. Sie alle liefern
dieses Endergebnis. Ich empfehle PyCharm. Es ist ziemlich nett für
Python und wurde wirklich für
Python-Entwickler gemacht. Ihre Website
wird jet,
brains.com, Dash
Pie, Same PY, Charm sein. Ich werde natürlich einen
Link dazu bereitstellen. Oder auch sehr einfach. Du kannst
PyCharm einfach nochmal googeln, PY Charm. Und der erste Link, den
du bekommst, sollte da sein. Das gleiche Ergebnis auf
der Titelseite. Klicken Sie auf die Schaltfläche Herunterladen. Du wirst zwei Möglichkeiten haben. Wählen Sie die Community-Version. Es gibt eine professionelle
Version, für die Sie bezahlen können. Aber ehrlich gesagt
ist die
Community-Integration mehr als genug. Also laden wir das herunter. Sobald die Datei heruntergeladen ist, klicken Sie
einfach darauf. Dadurch wird das Installationsprogramm geöffnet. Klicken Sie nun auf Weiter. Als Nächstes. Ich empfehle, eine Abkürzung zu erstellen, und ich empfehle,
diese Verknüpfungen zu erstellen. Dot p-y ist einfach die
Erweiterung für Python-Dateien. Ich empfehle also, das zu verwenden. Sie können alles
andere deaktivieren. Klicken Sie auf Weiter. Installiere. Okay, und am Ende der Installation haben
Sie dieses Fenster. Klicken Sie auf PyCharm Community
Edition ausführen und klicken Sie auf Fertig stellen. Wenn Sie dieses Fenster haben, erhalte ich es, weil
ich eine vorherige Version hatte, aber ich werde einfach klicken, Einstellungen
nicht importieren. Klicken Sie auf OK. Und wir sollten Pycharm jetzt
öffnen lassen. Sobald PyCharm geöffnet ist, werden
Ihnen diese Fenster angezeigt. Sie können damit einfach
Dateien öffnen. Aber ich empfehle
, ein neues Projekt ins Leben zu rufen , weil es in der Regel
dafür gemacht ist, mit Projekten zu arbeiten. Sie empfehlen jedoch auch diese
Einkaufstour zu
machen, wenn Sie möchten. Im Moment werden
wir die Grundeinstellungen vornehmen. Also lasst uns auf neue Projekte klicken. Ihr Standort. Ich empfehle Ihnen,
den Ordner Maya Scripts zu verwenden. Das wird also unter
UC Drive, Ihrem Benutzerordner, sein. Sehen Sie sich erneut Benutzer Ihren Benutzernamen an und Sie
können hier
den Pfad verfolgen, dem ich folge,
und dann zu Dokumenten gehen. Jetzt wird anstelle von
Dokumenten Ihr Maya-Ordner angezeigt. Und dann
gibt es in diesem Ordner einen Skriptordner. Das werden
wir ziemlich oft benutzen. Also klicken wir darauf auf Okay. Hier unten haben Sie noch
ein paar Optionen. Wählen Sie eine neue Umgebung
mit virtueller, virtueller ENV. Dies ist eine virtuelle Umgebung, aber machen Sie sich
darüber keine Sorgen. Das ist etwas, das
Pycharm erstellen wird, aber wir
werden es jetzt nicht wirklich verwenden. All das
hinterlässt uns also eine Serie. Entschuldigung, das
wollte ich nicht überprüfen. Lass
alles andere übrig. Die Serie unten. Erstellen Sie das Haupt-PY, das Willkommensskript. Ich werde dieses Kästchen
ankreuzen, damit Sie
etwas sehen können , sobald wir
ein Projekt gestartet haben. Klicken Sie auf Erstellen. Und PyCharm wird damit beginnen, ein paar
Dinge für Sie vorzubereiten. Es kann ein paar Minuten dauern. Gib ihm einfach etwas Zeit. Sobald es fertig ist, sehen
Sie sich diesen kurzen Überblick über das, was
Sie sehen werden. Das hier ist Ihr
Projektfenster. Und das ist wirklich der Ordner , in dem Ihr Projekt gespeichert werden
wird. Lass mich dir zeigen,
was, was hier passiert. Wenn Sie in Ihren Datei-Explorer gehen, wenn Sie zu Ihrem Ordner
Dokumente gehen, gehen Sie zu Maya und dann zu Skripten. Das ist es, was Sie hier oben
sehen, das ist das gleiche
Ordnerkreisdiagramm und Sie haben diesen Ordner
namens Idea Dot Idea erstellt. Das kannst du ignorieren. Es hat auch diesen
v, v ENV-Ordner erstellt. Das kannst du ignorieren. Sie können es tatsächlich
löschen, wenn Sie möchten, aber im Moment stört es uns nicht
wirklich, also können wir es dort lassen. Und weil wir
das letzte Kästchen angekreuzt haben, haben
wir diese Datei main.py. Der einzige Grund, warum ich das überprüfe, ist nur, um eine
Python-Datei zu erstellen, die Sie sich ansehen können. Aber das werden wir sehr bald
löschen. Auch dies befindet sich im Maya-Skriptordner
Ihrer Dokumente. Sie können dieses
Projekt erstellen, wo immer Sie möchten. Da wir
jedoch sehr bald
in diesem
Skriptordner arbeiten werden , empfehle
ich, diesen Speicherort zu verwenden. Auch dies ist
im Grunde Ihr Dateibaum. Es soll dir nur beim Navigieren helfen. Dies ist eine Python-Datei, die
wir sehr bald löschen werden
, weil wir sie nicht wirklich benötigen. Lassen Sie uns also ein paar
Einstellungen einrichten, bevor wir beginnen. Gehen Sie zum Menü Datei und dann zu den Einstellungen. Sie können auch Strg-Alt und
Alt S drücken, um das
Einstellungsfenster zu öffnen. Jetzt gibt es zwei Einstellungen, die
wir aktualisieren möchten. Wir werden es einfach halten. Der erste befindet sich
im vorherigen Abschnitt. Erweitere das auf ihren General. Das erste Kontrollkästchen, das Sie sehen Schriftgröße zu
ändern, würde diese Modi
steuern. Wir kreuzen einfach das Kästchen an. Das dient nur dazu,
die Funktionalität nachzuahmen ,
bei der wir die
Schriftgröße erhöhen
oder verkleinern und mit der
Steuerung und dem
Mausrad ausschalten können die
Schriftgröße erhöhen
oder verkleinern und mit . nun zur nächsten Einstellung Gehen Sie nun zur nächsten Einstellung zum Abschnitt Tools, erweitern Sie ihn und
scrollen Sie dann nach unten zu den
integrierten Python-Tools. unten
gibt es nun das Gerücht
im Docstring-Abschnitt, dass ein Docstring eine Zeichenfolge ist
, die wir in
eine Funktion einfügen können , die
als Dokumentation dient, daher der Name Docstring. Unter dem Docstring-Format
wähle ich Google. Das ist ein Standard
, den ich gerne verwende. Noch einmal, es ist
immer deine Wahl. Sie können ein anderes
Format wählen, wenn Sie möchten, aber ich werde dieses
für den Rest dieser Beispiele verwenden . Sobald Sie
das ausgewählt haben, klicken Sie auf Anwenden, klicken Sie auf Okay oder senden Sie
das, was wir geändert haben. Lass es uns testen. die Steuerung des Rades und Durch die Steuerung des Rades und
der Mausstufen wird es größer und kleiner,
was sehr nett ist. Lassen Sie mich den ganzen Code löschen , weil wir ihn nicht wirklich brauchen. Es ist nur zum Beispiel, lass uns eine Funktion
erstellen, nur eine Beispielfunktion, Beispiel für ein
def-Leerzeichen,
offene Klammern. Fügen wir zwei Argumente hinzu. Nur weil ich
dir zeigen wollte , was die Docstrings tun werden. Also argumentierte ein, nur
für das Beispiel, oder zwei, z. B. in Klammern schließen. Beachten Sie nun, dass
Pycharm die zweiten Klammern vervollständigt hat,
sobald ich eine
Klammer öffne , was großartig ist. Es macht einen Großteil
dieser Arbeit für mich. Also lass uns das nochmal bei
ein oder zwei Doppelpunkten machen , ich
präsentiere noch einmal,
beachte, dass Python
mir diese Einrückung
automatisch gibt , was auch ganz nett ist. Nun, da die Docstrings
bereits erwähnt wurden, gebe ich drei
doppelte Anführungszeichen ein, 123. Beachten Sie, dass PyCharm das auch für mich
automatisch vervollständigt. Wenn ich die Eingabetaste drücke, wurden diese
Argumente
automatisch für mich vervollständigt. Es gibt mir Platz für meine Argumente und einen
Abschnitt für meine Rücksendungen und
hier auch ein bisschen Platz für unsere Beschreibung,
was großartig ist. Geben Sie mir also eine Beschreibung
dieser Beispielfunktion. Wir müssen die
Typen manuell hinzufügen. Pycharm ist momentan nicht schlau genug,
um das zu wissen. Also noch einmal, das ist nur
eine Konvention, der ich folge. Ich werde sagen, dass
dies eine Zeichenfolge ist. Nehmen wir eine Beispielzeichenfolge an. Nehmen wir an, es ist eine Ganzzahl und ein Beispiel für eine Ganzzahl. Und sagen wir einfach, dass
es einen booleschen Wert zurückgeben wird. Nur, nur ein Beispiel. Das ist nicht wirklich etwas, das
wir verwenden werden. Beachten Sie, dass es auch eine
Syntaxhervorhebung gibt. Die Farben sind
anders als in Maya, aber es ist trotzdem schön, auf
einen Blick zu sehen , was
passiert. In diesem Fall. Beachten Sie, dass diese
Argumente grau sind. Sie könnten sogar ein
bisschen schwer zu sehen sein. Das liegt daran, dass PyCharm Ihnen
mitteilt, dass Sie sie nicht verwendet
haben. Pycharm macht viele sehr
intelligente Dinge für Sie, die Ihnen
helfen, Ihren Code zu überprüfen. Wie Sie hier unten sehen,
haben Sie
am Tag auf der rechten Seite diesen Marker. Es ist wie eine Warnung. Und auch hier oben sagt
es dir, dass
es zwei Warnungen gibt. In den meisten Fällen solltest du dir
darüber im Moment keine allzu großen Gedanken machen , aber manchmal ist es schön
zu sehen, was passiert. Es sagt Ihnen einfach
, dass Sie
diese Argumente nicht verwendet haben .
Also lasst uns das reparieren. Lassen Sie uns einfach einen von
ihnen ausdrucken, um ihn zu verwenden. Jetzt siehst du, dass es nicht
mehr ausgegraut ist. Und auch wenn Sie bemerken, dass
PyCharm
mir einen Vorschlag macht,
sobald ich anfange zu tippen . In diesem Fall ist es
das andere Argument , das ich nicht verwendet habe. Also, wenn ich die Eingabetaste drücke, los
geht's. Es macht es für mich,
was großartig ist. Es füllt das Formular automatisch aus. Da haben wir es. Das Gleiche wie zuvor. Es schließt die
Klammern für mich. Das Tippen in PyCharm
wird also viel schneller sein. Lass uns hier einfach
etwas zurückgeben. Sobald ich anfange, F zu tippen, weiß
ich, dass ich einen booleschen Wert haben möchte, also werden mir die Fehler angezeigt
oder wenn ich anfange, t zu tippen wird
er true
als Vorschlag zulassen. Hervorragend. Ich werde nicht zu sehr auf PyCharm
eingehen. Es gibt viele
Funktionen, die Sie erkunden
können, oder es
gibt viele Tutorials, eine Menge Dokumentation im
Internet. Aber für das, was wir gerade brauchen, sollte
das mehr als genug sein. Bevor wir gehen, lassen Sie uns ein
bisschen aufräumen. Wie ich bereits erwähnt habe, ist
diese Datei main.py nur ein Beispiel. Wir brauchen es nicht wirklich, also lasst es uns loswerden. Sie können es entweder aus
Ihrem Dateibrowser löschen oder einfach hier klicken. Wenn dieser Explorer
hier auf der Seite auf die Löschtaste
klickt, die Löschtaste
klickt, werden
Sie gefragt, ob
Sie zu kurz sind, Sie können Ja sagen, los geht's. Wir haben eine saubere Weste. Lassen Sie uns also fortfahren und einige Python-Dateien
erstellen.
16. Ein Modul erstellen: Lassen Sie uns über
Bibliotheken und Module sprechen. Wie bereits erwähnt, ist
ein Modul eine Verbindung, eine Sammlung von Funktionen, und eine Bibliothek ist eine
Sammlung von Modulen. Ein Modul ist wirklich der Kern
davon, ist nur eine Datei. Es ist eine Datei, die Code enthält, wie wir ihn bisher
geschrieben haben. Wir können unsere eigenen erstellen und importieren, genau wie wir
es mit meinem eigenen CMBS tun. Also lasst uns weitermachen und das tun. In einem Dateibrowser. Navigieren Sie zu Dokumenten, Maya und Ihrem Skriptordner. Wir verwenden dasselbe, um
denselben Speicherort für das PyCharm-Projekt zu
erstellen. Das solltest du also schon
aus dem vorherigen Video haben. Innerhalb von hier
können wir also unsere Module erstellen. Maya weiß, wie man Code
von diesem Ort aus liest. Woher weiß er das? Lassen Sie uns das zuerst herausfinden, um zu wissen, woher meine Daten
den Code beziehen Wir können ein Modul namens Sits,
SAS, wie im System verwenden . Und im System gibt es eine Listenvariable, die eigentlich
eine Liste ist und als Pfad bezeichnet wird. Und das enthält alle
Verzeichnis - oder
Ordner-Pads für mich. Python bezieht für
diese Maya-Sitzung im
Allgemeinen den Code von. Also lassen Sie uns das einfach ausdrucken. Großartig. Sie erhalten also diese
Liste mit vielen Zeichenketten, die nur Verzeichnispfade
zu Ordnern sind , die
auf Ihrem Computer existieren. Sie werden
für dich anders aussehen, weil ich einige Plugins
habe, die
du vielleicht nicht hast, aber viele davon
werden gleich sein. ZB dieser, Maya 2020. Dies ist ein Ordner, der nur
für die Maya, Maya-Version, bestimmt ist. Also, wenn Sie Code haben
, der nur in einer bestimmten
Version von Maya
verwendet werden soll . Sie können es hier platzieren, z. B. verwenden
wir einen
allgemeineren Ort weil unser Code allgemeiner sein
soll. Es soll wirklich von
all meinen Abneigungen benutzt werden. Das verwenden wir also am Ende, hier
haben wir diesen Pfad. Versuchen wir, das ein
bisschen lesbarer zu machen. Wir können unser Modul
namens Pretty Print verwenden. Es heißt eigentlich Pwd Print. Wir werden sagen, Entschuldigung, lassen Sie mich das von Pip
print, import p, print rückgängig machen. Es ist ein bisschen überflüssig,
aber so haben sie beschlossen, es Bright Star zu nennen. Es steht wieder
für Pretty Print. Es liefert Ihnen lediglich ein für Menschen lesbareres Ergebnis. Lassen Sie uns also diesen Code ausführen
, der viel netter ist. Anstatt diese
lange Liste zu haben, für die wir scrollen müssen, um sie zu sehen, bekommen wir sie einfach. Es ist immer noch eine Liste,
immer noch das gleiche Ergebnis. Es ist nur so gedruckt, dass es für Menschen
besser lesbar ist. Auch hier können Sie
Module überall
in jedem dieser Pfade erstellen . Aber vorerst werden wir uns an Dokumente
halten,
Maya-Skripte. Sie fragen sich vielleicht,
was wäre, wenn ich
einen separaten Ordner verwenden möchte ,
damit andere Personen, sagen
wir in Ihrer
Pipeline oder in Ihrem Team, sagen
wir in Ihrer
Pipeline oder in Ihrem Team, auf
Ihren Code zugreifen
können. Das können wir machen. Wir können diese Liste bearbeiten und weitere Teile
hinzufügen. Es heißt Pfade anhängen. Aber darauf werden wir in einer anderen Lektion eingehen.
Lass uns hierher zurückkehren. Skripte, Maya-Dokumente,
Maya-Skripte. Lassen Sie uns eine Datei erstellen. Rechtsklick. Gehen Sie zu Neu und erstellen Sie
ein neues Textdokument. Geben wir ihm jetzt einen
Namen, der Sinn macht. In diesem Fall wollen wir zB prop underscore reg. Jetzt ist das Format für diese
Datei standardmäßig TXT, aber wir möchten, dass es Punkt p-y ist, wie in Python Punkt p-y. Windows wird fragen, ob wir die Erweiterung
ändern möchten, wir wollen ja sagen, ausgezeichnet. Jetzt könnten Sie diese Datei
öffnen, wenn ich rechten Maustaste klicke und sie mit Notepad
öffne, wir können Code direkt schreiben. Beachten Sie, dass dies
nur eine Textdatei mit einer anderen Erweiterung ist. Aber wir haben PyCharm bereits
eingerichtet, also werden wir das verwenden. Wenn wir jetzt zu
pi term navigieren, weil wir denselben Ort
für unser Projekt
verwenden. Die Datei wird hier angezeigt. Sie sollten also die Datei sehen,
die natürlich leer ist.
Lassen Sie uns fortfahren und eine
Funktion erstellen, nur um sie zu testen. Also würde Typ auf Gehörlose treffen. Leertaste, Test,
Klammer öffnen, schließen, Doppelpunkt. Ich werde
die Docstrings
vorerst überspringen , da dies
nur ein kurzer Test ist. Lassen Sie uns einfach eine Zeichenfolge zurückgeben. Es heißt nur, das ist ein Test. Schreiben Sie das groß. Hervorragend. Also, wie verwenden wir das? Lassen Sie uns diesen Code löschen. Lassen Sie mich das Ausgabefenster leeren. Geben wir einfach
dieses wichtige Rig ein. Lass uns das ausführen. Mal
sehen, was passiert. Keine Fehler. Das ist großartig. Das sind gute Neuigkeiten. Lassen Sie uns das einfach ausdrucken. Schau, was passiert. Druck, Requisite Break. Hervorragend. Ich verkaufe Ihnen also
entsprechende Verwendung eines Moduls, das aus Dokumenten,
Manuskripten stammt . Das richtige Eierproblem dort heißt Rig Dot P-Y. Hervorragend, das ist unser Modul. Wie verwenden wir es? Für? Nun, wir wissen, dass wir da
eine Funktion haben, die Test heißt. Also lass uns einfach einen Punktetest machen. Und
rufen wir einfach die Funktion auf. Wir wissen, dass es einen Wert
zurückgibt. Also speichern wir diesen Wert vorerst
in einer Variablen und nennen ihn
einfach t. Lassen Sie uns drucken. Da hast du es. Dies ist ein Test,
der der Wert ist, den wir von unserer
Funktion in unserem Modul
erhalten. Hervorragend,
herzlichen Glückwunsch, Sie haben Ihr allererstes Modul
gemacht. Wie Sie sehen können, ist es sehr einfach. Module haben noch mehr zu bieten. Worauf wir sehr bald
kommen werden. Als Nächstes müssen wir etwas erstellen, das
wir tatsächlich benötigen, unseren
richtigen Code in ein Modul umzuwandeln, was bedeutet, dass Sie
sagen werden, dass es so einfach sein wird wie
das Kopieren und Einfügen in unser Modul. Also lasst uns, lasst uns das tatsächlich
tun. Lassen Sie mich alles von der Import-Anweisung oben bis zum
Ende meiner Funktion übernehmen. Ich drücke Strg
C. Gehen wir zu unserem
Stoffmodul. Lassen Sie uns diesen Code löschen. Und ich werde das
hier einfügen. Hervorragend. Wir haben also Bromidionen vorhanden. Ja, Sie stellen fest, dass PyCharm
mir eine Fehlermeldung ausgibt. Wenn ich den Mauszeiger darüber
bewege, werde ich
die Fehler hier überprüfen. Es sagt mir einen ungelösten
Verweis auf Maya, einen ungelösten Verweis auf CMBS. Das ist in Ordnung. Das liegt daran, dass
PyCharm nichts
über die CMBS-Bibliothek weiß . Es gibt Möglichkeiten, dies zu
umgehen und fungiert
tatsächlich als
Code außerhalb von Maya, aber das brauchst du nicht wirklich. Sie können diese Bereiche
also vorerst ignorieren. Alles andere ist genau
das Gleiche wie zuvor. Wir haben es einfach buchstäblich kopiert und in dieses Modul
eingefügt. Gehen wir zurück zu Maya. Und lass uns hierher gehen. Also sagen wir, lassen Sie mich diesen Code
löschen. Lassen Sie uns einfach
ein Rig erstellen, sagen wir Requisite, unterstreichen Sie das Rig, erstellen wir ein Crop Rig. Lassen Sie uns das
direkt ausdrucken und sehen, was passiert. Wir haben einen Fehler, ein interessantes
Attributfehlermodul,
was bedeutet, dass Propp Rick nicht das Attribut
create prop brick hat. Warum ist das so? Das liegt daran, dass wir das Modul
bereits importiert haben und es
nach dem Import geändert Nachdem wir es importiert
haben, haben wir all dies hinzugefügt. Dieser Code ist nicht deine
Funktion, nachdem wir ihn bereits in Maya importiert haben. Maya, obwohl wir es wieder
importieren, versucht
Maya schlau zu sein
und es speichert
das Modul sozusagen in seinem Speicher
und verwendet es einfach wieder. Wie sagen wir
Maya also, dieses
Modul zu
aktualisieren, zu aktualisieren oder neu zu laden? Ganz einfach. Wir können einfach tippen, es gibt
eine Funktion namens Reload. Typ würde also auf
Reload treffen, richtiges Rig. Aber
es wird passieren, dass Maya gezwungen wird, die Datei erneut
zu lesen. Und sobald ich zwischenspeichern kann, klicke auf
Speichern, es ist der
Inhalt im Speicher. Wir müssen also wirklich nur
einmal neu laden , wenn wir eine Änderung vornehmen. Lassen Sie uns also diesen Code ausführen. Und jetzt lassen Sie mich diese gedruckte
Erklärung noch einmal ausführen. Hervorragend. Also hat es eine
kleine kryptische Funktion gedruckt, Probabilistik
erstellen, eine Zufallszahl
hinzufügen. Das sind gute Neuigkeiten. Das bedeutet , dass es weiß, dass
es eine Funktion gibt. Lass es uns tatsächlich benutzen. Ich weiß, dass ich das ein bisschen
langsam durchgehe, aber lassen Sie uns einfach einen Stammtisch
erstellen. Wir wissen, dass wir einen
dieser drei Werte brauchen. Lassen Sie uns also weitermachen und sagen, nennen
wir diese Funktion. Und wenn wir den Wert übergeben
, von dem wir bereits wissen , dass
er erwartet wird, erstellen wir einen Würfel. Ich werde einfach
diese Codezeile ausführen. Hervorragend. Das ist dir alles sehr
vertraut. Hat einen Cube in erstellt und Ihnen den Namen des
Steuerelements
gegeben, das erstellt wurde. Lass uns etwas
anderes erstellen, indem wir einen Kegel erstellen. gleiche Deal gab Ihnen die
Variable, die erstellt wurde, nämlich kontrollierter Wein,
und er schuf einen Kegel. Und jetzt
leben all diese Dinge außerhalb meines. Ja, wir schreiben diesen ganzen
Code nicht im Skript-Editor. Sie haben Ihr eigenes Modul, das von Ihrem Dateisystem
gesichert wird. Es ist so viel einfacher, damit zu arbeiten. Und jetzt müssen Sie nur noch tun, wir müssen jetzt nicht
neu laden , da wir keine
Änderungen vornehmen. Alles, was Sie tun müssen, um Ihre Funktionen
aufzurufen diese vier Codezeilen, sauber, einfach und
sehr, sehr skalierbar. Herzlichen Glückwunsch, Sie sind
mit Ihrem ersten Projekt fertig. Hoffentlich machen Module Sinn. Wir werden das in Zukunft
viel mehr nutzen. Wir werden weiterhin Module
verwenden, weiterhin PyCharm verwenden, Sie werden weiterhin Funktionen
erstellen. All dies wird Ihnen also
noch vertrauter werden. Nochmals herzlichen Glückwunsch. Gehen wir zum nächsten Schritt über.
17. Deep Dive - Funktionen: Lassen Sie uns ein wenig
tiefer in die Funktion eintauchen. Ich habe bereits gesagt, dass
Sie
eine Funktion als Container betrachten können . Ein Behälter mit was? Lass uns einfach ganz schnell einen
Container zeichnen. Es handelt sich um einen Container mit
Anweisungen, wobei Anweisungen Code sind,
der innerhalb dieser Funktion
ausgeführt wird . Da es sich um einen Container
handelt, bedeutet das auch, dass
es einen Anwendungsbereich gibt. Das ist ein wichtiger Begriff. Umfang bedeutet im Grunde
die Grenzen , wo etwas existieren kann. Und das wird besonders
wichtig sein , wenn es um Variablen
geht. Es gibt Variablen
, die
außerhalb des Gültigkeitsbereichs
der Funktion liegen, und Variablen, die
innerhalb des Gültigkeitsbereichs
der Funktion liegen. Das kann für die Leute
manchmal verwirrend sein, aber wir werden uns gleich ein
Beispiel ansehen. Die Hauptsache, die Sie über Funktionen wissen
möchten,
ist also , was sie tatsächlich tun. Wie bereits erwähnt, kann
eine Funktion also optional eine Eingabe
aufnehmen. Stellen Sie sich also vor,
dass dies
nur ein Container ist, der eine Reihe von
Anweisungen ausführt und
eine Eingabe benötigt. Optional benötigt nicht jede
Funktion eine Eingabe, aber Sie können Ihre
Funktionen so einrichten, dass sie eingeben können. Noch wichtiger ist, dass es immer,
immer eine Ausgabe
gibt ,
und diese Ausgabe ist, wenn sie nicht explizit definiert ist, ein Wert namens None. Keines ist wie ein Nullobjekt. Sie können
es aber auch verwenden, um zu überprüfen ein gültiger Wert existiert, z. B. aber
immer, immer wird eine Funktion mindestens
keinen oder etwas
zurückgeben, das explizit
als ihr Rückgabewert gesetzt
wurde. Als Eingabe
werden also wie das richtige Vokabular Argumente verwendet. Die Argumente sind die Eingabe und die Ausgabe ist ein
Rückgabewert. Also, wenn Sie eine Funktion
aufrufen und wir werden das sehr bald im Code sehen
. Ich zeichne gerade, das
wird einen kleinen Überblick geben, wie
eine
Ansicht von oben nach unten, was Funktionen tun. Nehmen wir an, Sie haben
eine Funktion aufgerufen, nennen
wir sie meine Funktion. Nur zum Beispiel, um eine Funktion auszuführen, ruft
es die Coef-Funktion auf. Das ist der Name der Ausführung
einer Funktion, von der Sie sagen, dass
sie eine Funktion aufrufen würde. Wir müssen Klammern verwenden. Und statt dieser
Klammer wird eines dieser
Argumente verschwinden. Wenn es irgendwelche Argumente gibt,
wenn es eine Eingabe gibt, dann enthalten die Klammern diese Eingabe. Sobald Sie die Funktion ausgeführt
haben, erhalten Sie einen Rückgabewert. Das ist manchmal verwirrend
für die Leute, weil die, wie die Funktionen einen Wert
zurückgeben. Nun, sobald
Sie eine Funktion aufrufen indem Sie diese Klammer
angeben, erhalten Sie
einen Wert als Gegenleistung. Und normalerweise
möchten Sie das
in einer Variablen speichern, es sei denn Ihnen egal,
was zurückgegeben wurde, es
sei denn, Sie möchten nur, dass die
Funktion ausgeführt wird. Die Anweisungen sind
eine Reihe von Funktionen und dann vergiss es. Aber normalerweise möchten Sie das in einer Variablen
speichern. Ein Freund von mir erzählte mir, dass man sich
leicht vorstellen kann, wir am
Ende der Hinrichtung eine Münze bekommen. Stellen Sie sich vor, Sie
führen die Funktion aus. Und dann bekommst du eine Münze, Art Licht, wenn
du Mario Bros spielst, bekommst du eine kleine Münze. Wir haben versucht, Münzen zu werfen. Also eine sehr hässliche Münze, aber ich habe mir vorgestellt, dass Sie diese Münze als Ergebnis
bekommen. Und dann können Sie diese
Münze in Ihre Variable einzahlen. Auch hier sind Variablen
einfach Container eines Werts. Sie können sich
das also vorstellen. Wenn es Ihnen hilft, erhalten
Sie diese kleine Münze, sobald
Sie die Funktion ausführen. Und das kann verwendet werden,
wie Sie möchten, normalerweise als Wert, der in dieser Variablen
gespeichert werden soll. Lassen Sie uns also eine Funktion erstellen. Lassen Sie uns eine Funktion
namens example erstellen. Das Erstellen einer Funktion in Python wird als Definition einer Funktion bezeichnet. Und
das geht, indem Sie
def D-E-F, define space eingeben . Sie können die Funktion aufrufen,
wie Sie wollen. Und wir werden mein Beispiel
nennen, Klammern
öffnen und schließen. Moment lasse ich
meine Funktion keine Im Moment lasse ich
meine Funktion keine
Argumente oder Eingaben annehmen,
dann einen Doppelpunkt und
dann die Eingabetaste drücken. Beachten Sie jetzt, wie ich zu
dieser Einrückung gekommen bin. Das sind im Grunde vier Leerzeichen. Das ist sehr wichtig. Diese
Einrückung bestimmt was innerhalb
der Funktion enthalten ist. Also schreibe ich
vorerst einfach Pass. Pass sagt im Grunde, überspringe jede Ausführung
oder tu nichts. Und ich werde eine Variable
schreiben. Ich werde hier
etwas drucken. Anstatt das zu schreiben
, sagst du eigentlich etwas. Dies liegt außerhalb des
Funktionsumfangs. Dieser Pfad liegt im
Geltungsbereich der Funktion. Jetzt haben wir über den
Umfang von vier Variablen gesprochen. Lassen Sie uns das anhand eines Beispiels etwas
klarer machen. Lass uns gehen, lass uns
eine Variable namens bar erstellen. Und ich werde ihm eine Nummer
zuweisen. Sagen wir zehn. Und lassen Sie uns
eine weitere Variable erstellen. Nennen wir das inside, weil es innerhalb
der Funktion ist. Und lassen Sie uns
die Zahl Drei,
das Absolute, einer beliebigen Zahl zuweisen , aber das ist nur ein Beispiel. Lass uns var drucken. Großartig. Wir haben also die Ausgabe von zehn erhalten, was genau
dem Wert von bar entspricht. Das ist großartig. Das liegt daran, dass dies außerhalb
des Funktionsumfangs liegt . Was passiert nun, wenn wir
versuchen, diese Variable hier zu drucken? Wir bekommen den Namensfehler. Es heißt, der Name im Inneren
ist nicht definiert. Es ist nicht definiert, weil es
sich in dieser Variablen, dieser Funktion, befindet, und lassen Sie uns
es innerhalb der Funktion drucken. Lassen Sie uns diesen Druck innen ausdrucken. Lassen Sie mich diese Zeile löschen. Jetzt ist nichts passiert. Das liegt natürlich
daran, dass wir die Funktion nicht
wirklich kalt gestellt haben . also noch einmal
daran, eine
Funktion auszuführen, Sie müssen sie aufrufen. Würden sie Klammern öffnen und
schließen? Lass uns das machen. Da hast du es. Jetzt drucken wir
den Wert drei, der die Variable aus
der Variablen innerhalb
dieser Funktion ist . Wenn Sie jetzt neugierig sind, möchten
Sie sehen, was passiert. Wenn Sie die
Funktion einfach drucken, ohne sie aufzurufen. Das kannst du machen. Und das ist dasselbe. Python wird dir sagen
, dass es sich um eine Funktion handelt. Es heißt Beispiel
und es lebt in diesen zufälligen, scheinbar
zufälligen Zahlen. Dies wird als
Zeiger auf den Speicher bezeichnet. Sie sagen, die Funktion sich derzeit in keiner
Datei,
sondern befindet sich nur im Speicher für diese Sitzung, mit der
Sie arbeiten. Mach dir darüber nicht zu
viele Sorgen. Es ist ein etwas
technischeres Detail. Aber wisse, dass du es kannst, du kannst diese Funktion so verwenden, wie
sie ist, aber ich nenne sie. Aber um den Wert daraus zu ziehen, muss
man es aufrufen. Jetzt habe ich erwähnt, dass
Funktionen immer, immer einen Wert zurückgeben. Lassen Sie mich
diesen Wert also in
dieser Ausgabevariablen speichern . Lass uns das ansprechen. Da hast du es. Diese drei sind also aus dieser gedruckten
Erklärung hier unten. Lassen Sie mich also
die gedruckte Aussage entfernen , um sie
etwas weniger ausführlich zu machen. Da hast du es. Also
drucken wir das Ergebnis der Ausgabe. Und das ist keiner. Das liegt daran, dass
wir
keine Rückgabewerte
der Funktion definieren . Und keiner ist der
Standardwert. Wie ich bereits erwähnt habe. Nehmen wir nun an,
anstatt nichts zurückzugeben, möchten
wir diesen Wert hier
zurückgeben. Nehmen wir an, wir möchten
diese Variable darin zurückgeben. Jetzt können wir entweder drei direkt
zurückgeben, was im Grunde diese
Variable hier
ignorieren würde . Oder Sie können diese Variable zurückgeben. Vorerst. Machen wir es einfach
und geben diesen Wert drei zurück. Da hast du es. Jetzt drucken wir drei
aus dieser Ausgabevariablen. Nochmals, das heißt, wie ich schon sagte, wie
meine Freunde sagten, es hilft,
sich vorzustellen ,
dass Sie diese kleine Münze bekommen und diesen Wert oder diese
Münze in eine Variable
einzahlen. Das ist es, was hier passiert ist. Du bekommst wenig Wert, den
ich in die Leistung stecke. Sie
müssen diese Barriere nicht unbedingt setzen, sondern diesen Wert in einer Variablen
speichern, wie ich bereits erwähnt habe, Sie können ihn einfach direkt
drucken. Also lass uns das machen. Beachten Sie, wie ich die Funktion
aufrufe. Und darauf weise ich nur direkt
hin. Und es ist genau
das gleiche Ergebnis. Das liegt daran, dass
wir diesen Wert erhalten werden. Das ist
im Grunde gleichbedeutend damit, dies zu tun. Geben Sie drei aus, da
in diesem Fall
drei der Wert ist, der von dieser Funktion
zurückgegeben wird. Hoffentlich ist das klar. Lassen Sie uns jetzt
etwas Komplexeres machen. Lassen Sie uns dieser Funktion Argumente
oder Eingaben hinzufügen. Fügen wir ein Argument namens
a und ein Argument namens B Lassen Sie uns
diese Funktion,
add, die Funktion add zurückgeben , weil wir
diese Werte zusammenfügen werden. Nehmen wir an, das Ergebnis
wird eine Lesbe sein. Sehr einfach und wir werden
ihre Ergebnisse zurückgeben. Wir können die Funktion aufrufen. Was passiert also, wenn wir
sie jetzt anrufen? Sie erhalten natürlich eine Fehlermeldung, weil sie besagt, dass die Funktion add genau zwei
Argumente benötigt, wobei Null angegeben ist. Also müssen wir jetzt Argumente
vorbringen. Wir müssen einige Werte angeben, sagen
wir zwei und
dann zwei Kommas drei. So stellen Sie diese
Argumentationsthese der Reihe nach vor. Argument und zwei
entsprechen also dem Argument a, und dann würden drei dem Argument be
entsprechen. Nichts ist passiert, weil
wir diesen Wert nicht speichern. Ich sage noch einmal
Output. Ich werde das
ausdrucken, aber ausgezeichnet. Jetzt erhalten wir das
Ergebnis, das fünf ist, weil es zwei plus drei ist. Wenn wir zehn plus drei machen würden, wären das
natürlich 13. Es gibt einen anderen
Argumenttyp, der als
Schlüsselwortargument bezeichnet wird. Was haben wir gerade gesehen? Diese werden
Positionsargumente genannt. Das liegt daran, dass diese Argumente keinen Standardwert haben, sie sind im Grunde Variablen. Und noch einmal,
das ist wichtig. Dies sind Variablen, die
innerhalb des Geltungsbereichs
dieser Funktion existieren . Beachten Sie nun, dass
Hilfe nirgendwo anders
außerhalb der Funktion wirklich existiert. A, es ist ein bisschen wie eine leere Kiste. Ich betrachte es als eine leere
Kiste und einen leeren Behälter. Das wird nur zu
dem Zweck aufgerufen , es
innerhalb unserer Funktion zu verwenden. Wir sagen im Grunde,
wann immer Sie einen Wert erhalten, speichern Sie diesen Wert in diesem Feld als Container namens a und verwenden Sie ihn dann innerhalb
der Funktion. Und der Gültigkeitsbereich einer Variablen oder dieses Arguments, das
im Grunde zu
einer Variablen wird oder als Variable
behandelt wird, ist nur
der Gültigkeitsbereich dieser Funktion. Sobald die Funktion beendet ist, wird sie beendet. Dies ist
der Zeitpunkt, an dem wir zurückkehren oder wann immer wir die
Funktion beenden oder dort sein. Sie hatten keine Geduld, dann existiert diese Variable im Grunde nicht
mehr. Und auch
der Name dieser Variablen liegt
natürlich bei uns. Wir könnten das hier nennen. Und oh, z. B. wir
addieren Zahlen. Wir können also sagen, wir könnten
sogar Erster und Zweiter sagen. Dann würden wir
zuerst plus Zweiter machen. Und das Ergebnis wird genau das gleiche
sein. Das liegt also alles an uns, es liegt an Ihnen als Entwickler zu entscheiden, wie diese Variablen
genannt werden. Also nochmal, diese sind in Ordnung. Zehn gehören in diesem Fall zu
Burst und drei gehören zur zweiten. Es gibt einen anderen
Argumenttyp, der als
Schlüsselwortargument bezeichnet wird. als
Schlüsselwortargument bezeichnet, weil die
Argumente nicht der Reihe nach,
sondern Wird als
Schlüsselwortargument bezeichnet, weil
sie die
Argumente nicht der Reihe nach,
sondern mit ihrem Namen übergeben
. Also
lasst uns zB ein neues Beispiel erstellen. Nehmen wir an, wir
möchten, dass die Funktion feststellt, ob
jemand Auto fahren kann oder nicht, ob jemand alt
genug ist, um zu fahren oder nicht. Definieren wir also noch einmal eine Funktion, nennen
wir sie Can Drive. Machen Sie es ein
bisschen anschaulich. Jetzt wollen wir
das Alter der Person wissen. Wir wollen wissen, was das ist, was die Altersgrenze um eine Art
von Schwelle, richtig, fahren zu können. Nennen wir das Mindestalter. Und lassen Sie uns einen Standardwert hinzufügen. Standardwert. Nehmen wir
an, Sie müssen 16 Jahre alt sein um z. B. dann Dickdarm zu fahren. Ohne den Doppelpunkt
erhalten Sie eine Fehlermeldung. Also Doppelpunkt, drücken Sie die Eingabetaste und jetzt befinden wir uns in
dieser Funktion. Also sagen wir, wenn h
kleiner als Minimum h,
Minimum h ist ,
werden wir nein sagen. Wir werden nicht nein sagen, wir geben false zurück, was in
diesem Fall ein boolescher Wert ist , der im Grunde Nein sagt, diese Person kann keine Schrauben fahren. Andernfalls
werden wir zurückkehren. Ja. Weil es bedeutet, dass
die Person es versuchen kann. Hervorragend. Also, lassen Sie uns diese Funktion
nennen. Beachten Sie jetzt noch einmal, da ich für diese Zahl einen
Standardwert
angegeben habe, muss ich
für dieses Argument nicht
unbedingt einen Wert dafür angeben. Nehmen wir an,
jemand ist 25 Jahre alt. 25, ja, kann fahren. Jemand ist drei Jahre alt. Sie können nicht fahren. Hervorragend. Was wäre nun, wenn wir das Mindestalter
ändern wollten? Aber du könntest
es hier ändern oder du könntest. Es gibt, es gibt zwei
Möglichkeiten, dies zu tun, da es nur
zwei Argumente gibt. Sie könnten es einfach
als Positionsargument behandeln ,
also in der Reihenfolge. Du könntest also sagen, okay, lass uns, lass uns das neue
Mindestalter auf ein, ein Jahr festlegen. Jetzt kann diese Person fahren, aber wir können das auch tun. Wir können sagen, dass mindestens h gleich eins ist. Da haben Sie die Tatsache
, dass wir hinzufügen, vergeben Sie es dem Argument,
machen Sie es zu einem Schlüsselwort. Argumente. Wenn Sie ein Wort hinzufügen, wenn Sie Argumente
als Schlüsselwortargument eintauschen, können
Sie die Reihenfolge ignorieren, was
etwas verwirrend sein könnte. Aber wenn ich z. B. sagen würde, dass H gleich 20 ist und das
Mindestalter zum Fahren ist, stellen
wir das auf 22 um, z. B. gleich 20 ist und das
Mindestalter zum Fahren ist, stellen
wir das auf 22 um, z. B. beachten Sie
jetzt, wie h jetzt nach dem zweiten und zweiten Platz kommt
und das Mindestalter an erster Stelle steht. Da wir jedoch die
Schlüsselwörter und Schlüsselwortargumente verwenden, weiß
die Funktion,
wie sie sie dem entsprechenden
Argument oder der entsprechenden Variablen zuweisen kann. In diesem Fall ist
es also wie erwartet falsch. Wenn wir das nun auf 19 umstellen, ist
es wie erwartet wahr. Aber wenn wir diese Schlüsselwörter
entfernen würden, belassen wir sie
einfach als
Positionsargumente. Jetzt sind sie umgedreht. Nun gehören 19 zu H und 20 zu mindestens H. Hoffentlich ist das klar. Wenn nicht, lassen Sie uns ein weiteres Beispiel ausprobieren , um dies
etwas klarer zu machen. Lassen Sie uns eine andere
Art von Funktion erstellen. Lassen Sie uns eine Funktion erstellen,
die alle, die alle vollständig
optionale Argumente hat,
was bedeutet, dass alle
Argumente einen Standardwert haben. Also lasst es uns definieren. Es heißt Deaf. Nehmen wir an, es ist eine Funktion
, die Leute begrüßt. Ich nenne es Greet. Jetzt. Es wird eine Nachricht enthalten. Die Nachricht hat einen
Standardwert namens not cold, aber wir sagen einfach greetings, was eine Zeichenfolge ist,
die Grüße sagt. Jetzt wird es einen
Vornamen annehmen. Der Vorname wird den Standardwert
einer
leeren Zeichenfolge haben . Vielleicht möchten wir also kein Argument
für den Vor- und
Nachnamen haben , das auch eine leere Zeichenfolge
als Doppelpunkt des Werttyps enthält. Und wir würden in
die Funktion gehen. Jetzt
sagen wir Lesemeldung. Beginnen wir einfach mit einer neuen Variablen. Nachricht wird,
wird eine Zeichenfolge sein. Wir werden sagen,
wir werden sagen öffnen und schließen geschweifte
Klammern Leerzeichen öffnen und schließen geschweifte Klammern öffnen und schließen
geschweifte Klammern. Und dann geben wir
das Ende
des Zeichenkettenformats ein. Was hier nun
passieren wird, ist jede dieser
geschweiften Klammern, sie wird durch das ersetzt was wir in
diese Punktformatfunktion einfügen. Also sagen wir die erste,
die erste geschweifte Klammer
wird durch die Nachricht ersetzt, die zweite durch
den Vornamen und die dritte durch den letzten. Und dann einfach die Nachricht
zurückgegeben. Natürlich könnten wir, wir könnten direkt zurückgeben, anstatt sie in einer Variablen
verzerren zu müssen , die vollständig gültig ist. Aber ich denke, es ist ein
bisschen sauberer, eine Variable
mit unserer Nachricht zu erstellen. Lassen Sie mich dieses Fenster
etwas größer machen. Erstellen Sie eine
Variable für unsere Nachricht und geben Sie dann diesen Wert zurück. Also schauen wir mal, was hier passiert. Jetzt. Auch hier haben wir drei
Argumente in dieser Funktion. Um eine weitere
Variable namens output zu erstellen. Wir werden die Ausgabe dieser Funktion in
dieser Variablen
speichern . Ich werde es ausdrucken. Schauen wir uns also an, was passiert, wenn
wir diese Funktion
ohne jegliche Argumente aufrufen , sondern irgendwelche
Argumente übergeben. Wir, da heißt es
grüßen Sie, ausgezeichnet. Es hat also
einige Leerzeichen weil wir
einige Leerzeichen hinzugefügt haben. Aber das ist vorerst okay. Dies ist nur ein Beispiel. Was passiert jetzt, wenn wir ein einziges, ein einziges Argument einreichen? Nun, das wird hier den Platz
des ersten Arguments einnehmen . Sagen wir einfach, sag hallo. Anstelle von Grüßen. Da hast du es. Hallo. Was ist, wenn wir
ein zweites Argument einreichen? Wir sagen
FirstName, sagen wir Josh. Hallo, Richter. Was passiert jetzt? Passiert, wenn wir
ein Schlüsselwortargument übergeben? Beachten Sie also, dass dies
das zweite Argument ist. Barbaric hat eigentlich LastName
kolonnade. Wir sagen im Grunde, okay, verwende diesen Wert, diese Zeichenfolge
an Ort und Stelle oder LastName. Da hast du es. Jetzt ist es schwer zu erkennen , weil es
nur einen leeren Raum gibt. Also, wenn wir den
Standardwert des Namens einer
Person in einen einfachen Bindestrich ändern. Aber wir werden sehen, was hier passiert. Beachten Sie, wie wir unseren
Vornamen eingeben direkt zum Nachnamen
übergehen. Und dann haben wir
Hallo Josh. Großartig. Wenn wir nun den Vornamen angeben,
auch wenn wir es nicht in der richtigen Reihenfolge tun, solange wir
das Schlüsselwort dafür verwenden. Sag. Junior. Ich weiß. Ich weiß, das
ist irgendwie rückwärts. Der Nachname Judge
ist kein Nachname. Aber nehmen wir an, Junior
wird sein Vorname sein. Hallo, Januar Josh. Beachten Sie also, dass
das, obwohl das nicht in Ordnung ist, FirstName, weil wir die Schlüsselwörter
verwenden. Es nimmt den
Platz von FirstName und LastName nimmt
den Platz des Nachnamens ein. Nun, wenn wir
diese Schlüsselwörter loswerden, indem wir einfach Nachname ist gleich
Vorname ist gleich
entfernen. Wir sind wieder bei den
Positionsargumenten,
was bedeutet, dass die Reihenfolge
in diesem Fall wichtig ist. Also lass uns das ausführen. Jetzt siehst du, dass der
Ausgang umgedreht ist. Hervorragend. Ich wollte zu den
Rückgabewerten zurückkehren, weil ich
erwähnt habe , dass Return
das Ende einer Funktion markiert. Und das ist einer
der wichtigsten
Aspekte einer Funktion und etwas, das bei den Menschen für
Verwirrung sorgt . Lassen Sie mich also versuchen, zurückzugehen und viel zu
tun und zu
meinem vorherigen Beispiel zurückzukehren. Da hast du's, kannst drapieren. Also genau hier verwenden wir
die if else-Anweisung , um der Entscheidung
zu folgen , den Ablauf
dieser Funktion zu diktieren, oder? Also nur zur Auffrischung fragten
wir, kann die Person dieses h die
Person unter dem Minimum h sein. Wir werden sagen, wir sagen,
Node kann nicht fahren. Ansonsten können sie ja fahren. Wir können also tatsächlich lesen diese Aussage sonst
nicht unbedingt erforderlich ist. Der Grund dafür ist
, dass, sobald Sie
den Rückgabewert erreicht haben, dies das Ende der Funktion ist. Lassen Sie mich das noch einmal ausführen. Nehmen wir an, diese Person ist 10 Jahre alt und hat mindestens h. Lassen Sie uns einfach
dieses Argument entfernen und uns einfach
an den Standardwert halten. Also kann jemand, der
10 Jahre alt ist, nicht fahren. Es ist ausgezeichnet. Was passiert also, wenn
ich das anders zurückgebe? David, und ich
entferne einfach auch den Einzug in dieser
Rücksendeerklärung. Nun, das Ergebnis ist dasselbe. Diese Person kann nicht fahren. Was hier passiert, sagen
wir im Grunde, wenn diese Person unter
dem Mindestalter ist, falsch
zurückgegeben, sobald
Sie diesen Punkt erreicht haben, ist
die Funktion erledigt. Ich werde nicht weitermachen. Hier unten. Schauen wir uns ein anderes Beispiel an. Lassen Sie mich eine neue
Funktion erstellen, die einfach sagt, nennen
wir sie vorerst Test. Und sie werden nehmen und nummerieren. Ich sage nur
das Argument num colon,
gib die Funktion ein. Wir sagen, wenn
num gleich eins ist, lassen Sie uns zurückkehren. Lass uns einen zurückgeben. Nur eine Zeichenfolge, die eins sagt. Wenn num gleich
zwei ist, wird das zurückgegeben. Andernfalls kehren wir zurück. Mehr. Wie bei dieser Funktionsstörung
ist das nur ein Beispiel, das nicht viel Sinn macht. Also lass uns das ausführen. Sagen wir testen. Lassen Sie uns zuerst einen und ich
werde die Ergebnisse ausdrucken. Ich werde
es nicht in einer Variablen speichern, ich werde es direkt drucken. Also 12, das tut mir leid. Wenn ich 20 sage,
wird mehr zurückgegeben. Hervorragend. Das ist also gleichbedeutend mit
der Aussage ob sonst, wenn sonst mehr zurückgeben. Aber noch einmal, weil die Return-Anweisung das Ende
markiert, die Funktion
im Grunde beendet. Letzteres ist nicht erforderlich. Das ist sehr mächtig, weil
es bedeutet, dass
Sie den Ablauf
Ihrer Funktion auf diese Weise diktieren können. Wir können viele Bedingungen haben, viele Anweisungen. Und wenn du einen
bestimmten Zustand erreicht
hast, kannst du sagen, okay,
das ist alles was wir brauchen. Beenden Sie
die Funktion,
um einen Wert zurückzugeben , einen
beliebigen Wert.
Hier geben wir z. B. verschiedene Werte zurück. Hier. Sie müssen nicht
den gleichen Werttyp zurückgeben. Sie könnten sogar eine NAN
zurückgeben, z. B. und in diesem Fall ist die 20 weder eins noch zwei.
Also keine zurückgeben. Nun, das ist wieder einmal deine Wahl
, es liegt an dir. Hoffentlich hat das Sinn gemacht. Funktionen können
etwas verwirrend sein und insbesondere Return-Anweisungen können Leute
etwas
verwirrend sein. Aber je mehr Sie es verwenden, desto vertrauter werden
sie. Eine letzte Sache vor uns. Wir werden das abschließen. Und das ist ein sehr
wichtiges Thema, nämlich Dokumentation. Es ist Docstrings. Wie ich bereits erwähnt habe, ist
ein Docstring im Grunde
eine Zeichenfolge, die wir
innerhalb einer Funktion verwenden können , die als Dokumentation
dient, daher der Name Dark Strip. Docstring besteht aus dreifachen Anführungszeichen. Sie können entweder aus
drei
einfachen Anführungszeichen bestehen, um sie zu öffnen
und zu schließen. Oder drei doppelte Anführungszeichen,
ich
bleibe
in diesem Fall bei doppelten Anführungszeichen. Was Docstrings nun tun,
ist, Dokumentation bereitzustellen, wie ich bereits erwähnt habe.
Ich werde eine einfache Erklärung
geben. Hier. Ist eine Beschreibung, tut mir leid,
keine Erklärung. Diese Funktion. Und jetzt ist es sehr
wichtig
, es
in Ihre Doc-Zeichenfolge aufzunehmen. Egal, welcher Art
von Konvention Sie in Docstrings
folgen, es ist
sehr wichtig, sie bereitzustellen. Ihre Argumente. Oder eine Konvention, der
ich gerne folge, besteht darin, auf den Doppelpunkt args zu tippen. Und darunter
werden wir die Argumente angeben, die dafür sorgen,
dass die Optik in
diesem Fall dieses num-Argument funktioniert . Ich weiß, dass num eine Ganzzahl sein
wird. Und ich gebe gerne
eine einfache Beschreibung für das zweite Jahr, die gute Seite, z. B. und wenn die
Funktion dann zurückkehrt, füge ich gerne
auch Returns hinzu. Genau wie bei einem Abschnitt
auf der rechten Seite, dem Typ, der in diesem Fall
zurückgegeben wird, wissen
wir, dass es sich um eine Zeichenfolge handelt. Nehmen wir an, es wird eine Zeichenfolge
zurückgeben, eine übergebene
Zeichenkettenzahl. Dies ist nur eine Beschreibung
dieses Rückgabewerts. Jetzt
kann das Schreiben der Docstrings etwas mühsam sein. Viele Leute machen das nicht. Aber glauben Sie mir, es ist extrem wichtig und es wird Ihnen sehr
zugute kommen. Und nur die Tatsache, dass Sie den
Docstrings-Pool schreiben. Wenn Sie
diese Drehbuch- oder
Programmierkarriere fortsetzen möchten , wird Ihnen das in Ihrer Karriere
immens helfen. Was ist also der Vorteil
dieser Docstrings? Nun, eine davon ist, dass Sie auf
einen Blick , wenn Sie
sich eine Funktion ansehen, die Dokumentation sehen können, wenn Sie in einem Jahr zurückkehren, um Ihren
Code zu lesen. Sie wissen, was
passiert, wenn jemand anderes Ihre Funktion nutzen möchte. Sie wissen, was
als Input und Output erwartet wird. Aber auch wenn Sie keinen direkten Zugriff auf die
Funktion selbst
haben, können
Sie darauf zugreifen, auch wenn
Sie keinen Zugriff haben, um den Quellcode oder den Inhalt
der Funktion zu lesen. Stellen wir uns vor,
wir sind hier unten. Wir wissen nicht wirklich,
was im Test enthalten ist. In Python gibt es eine eingebaute Funktion namens Help. Sie können es in Ihrer
Funktion übergeben, ohne es aufzurufen. Beachten Sie, dass ich
die Marke nicht nenne, ich nenne sie nicht, sondern
übergebe nur den Namen
der Funktion. Lassen Sie mich mein Ausgabefenster leeren. Lass uns das ausführen. Und das Ergebnis
dieser Gesundheitsfunktion ist genau der Docstring. Also heißt es testen. Hier heißt es Help one
function tests in Module main. Mach dir keine Gedanken darüber
, was das bedeutet. Es bedeutet nur, dass y eigentlich nur bedeutet, dass
es kein Modul gibt. Wir nennen
das nur in Maine, was quasi der
Standardort für die Ausführung von Code ist. Jetzt lautet der Name der
Funktion Tests. Ich nehme ein
Argument namens num auf. Dies ist die Beschreibung, die
wir am Anfang eingegeben haben, und dies sind die Argumente und
der Rückgabetyp
, die wir angegeben haben. Jetzt können Sie sehen, wie
nützlich das sein kann, wenn wir nicht eingegeben haben, den Docstring
haben
und wir die Tests
ausführen Hilfe im Test ausführen. Mal sehen, was passiert. Es heißt Hilfe bei
Funktionstests und mehr Domain gibt Ihnen den
Namen der Funktion, das Argument, das erwartet, und dann nichts, was überhaupt nicht nützlich
ist. Es ist viel nützlicher
, diese Informationen für Sie
oder eine andere Person zu haben , diese Informationen für Sie , die Ihre Funktion
möglicherweise verwendet. Es ist also eine tolle Angewohnheit, etwas
zeitaufwändiger
zu werden, aber es ist nicht
wirklich viel mehr Zeit. Und Sie und
viele andere Menschen werden Ihnen sehr dafür danken, dass Sie
die Dokumentation geschrieben haben. Hoffentlich Funktionen, die Ihnen
viel vertrauter sind. Sie sind äußerst nützlich, extrem wichtig für
die Programmierung. Und sie werden
dein Leben so viel
einfacher machen , wenn du dich mit ihnen
wohler fühlst.
18. Projekt 2 - Posenübertragungstool: Intro und Breakdown: Willkommen zu deinem nächsten
Projekt für dieses Projekt, und wir werden
ein Tool erstellen, das
uns hilft, Posts
zwischen Charakteren zu übersetzen. Lassen Sie mich Ihnen eine Demo davon geben. Für diese Demo verwende
ich übrigens dieses Rig
namens Morpheus. Das ist ein kostenloses Rig, ist ein toller Rick. Ich wurde von Judge Burden
geschaffen. Sie können es von seiner Website erhalten. Judge horton.com kürzt
Projekte so schnell wie möglich auf Morpheus. Es ist ein großartiger Reagan, ich kann ihn nur
empfehlen. Ich werde
das für diese Demo verwenden. Aber du kannst benutzen,
was du willst. Diese Tools sollten mit
verschiedenen Arten von Pausen funktionieren. Wir werden sie verwenden,
weil Jewish so
freundlich war , mich
sie für diese Projekte verwenden zu lassen. Wie Sie sehen können, habe ich
drei Merkmale, drei Bohranlagen, sie sind
alle dieselbe Anlage. Sie sehen ein
bisschen anders aus. Morpheus erlaubt mir, das Rig
zu modifizieren verschiedene Versionen
des Charakters zu
erstellen , aber
es ist dasselbe Rig. Sie wurden alle
in der Szene erwähnt. Und dieser hier wurde
bereits gepostet. Lassen Sie uns diese Pose also
auf die anderen beiden Arrays übertragen. Wählen wir, sagen wir, diese Controller und
vielleicht auch den Kopf aus. Lassen Sie uns also diese Werte übertragen. Eigentlich nur für diese
anderen Charaktere. Ich wähle einen von
ihnen aus und führe die beiden aus. Da hast du es. Jetzt haben beide die Pose. Nehmen wir an, ich
möchte jetzt wechseln, lassen Sie uns eine Änderung vornehmen und diesen
Charakter hier, direkt vor uns. Also werde ich auswählen, ich werde sagen, ich möchte
das auf diese beiden Charaktere übertragen . Es spielt keine Rolle, was ich auswähle, weil ich weiß, dass ich
diese,
die Controller, die ich für das erste Zeichen ausgewählt habe,
auf die beiden anderen Charaktere,
die ich
ausgewählt habe, übertragen dass ich
diese,
die Controller, die ich für das erste Zeichen ausgewählt habe,
auf die beiden anderen Charaktere,
die ich
ausgewählt habe werde. Und da hast du es. Hervorragend. Und natürlich funktioniert es auch für
einen einzelnen Charakter. Wenn du wolltest. Lass uns das ganz schnell versuchen. Hervorragend. Das sind also zwei. Jetzt müssen wir ein
bisschen einrichten. Denn wie ich es schon einmal erwähnt habe, sind das alles dasselbe Rig. Der Grund, warum das
funktioniert und dies ist eine sehr verbreitete
Art, mit
diesen Werkzeugen zu arbeiten ,
ist, dass die Werkzeuge auf oder um die Bohranlage herum hergestellt
werden. Und wenn Sie in einem Studio oder
einem Projekt mit anderen
Leuten in einem Team
arbeiten . Normalerweise sind die Risiken dieselben. Die Geometrie kann anders sein, der Charakter kann
völlig anders aussehen. Wie Sie sehen können, sind
diese beiden Charaktere sehr unterschiedlich. Aber die Steuerungen im
Rig sind größtenteils die gleichen. Und das ist,
was hier passiert. Auf diese Weise
kann das Tool Animationen
oder einen Beitrag, der nur Werte enthält,
von einer Woche auf die nächste übertragen . Da wir mit
Mietreferenzen arbeiten, haben
wir Namespaces. Wie Sie sehen können
, hat
jedes Steuerelement einen Namespace. Dieser Charakter hier
und dann Severus zu sein. Die nächste hier ist Minerva und die letzte ist Luna. Lassen Sie uns also
dieses Setup erstellen , das Sie
dafür benötigen Ich werde nicht zu viel auf das Konzept
der Namespaces eingehen. Wenn Sie mit
Referenzen und Namespaces nicht vertraut sind, empfehle
ich Ihnen,
ein kurzes Tutorial online zu machen , da
ich sehr wichtig sein werde und es auch sehr nützlich ist, als Animator
zu wissen oder wie man mit
Referenzen und Namespaces arbeitet. Lassen Sie uns also weitermachen
und das Setup durchführen. Ich beginne mit einer
neuen Szene in Maya. Das ist eine völlig neue Szene. Wenn Sie zum Dateimenü
und zum Referenzeditor gehen. Damit das funktioniert, werden
wir noch einmal Referenzen
verwenden da die Raten alle gleich
sind, also müssen wir sie referenzieren
und sie hinter
diesen Namespace setzen. Ich spiele mit einem
Klick auf die Plus-Schaltfläche. Und ich habe diese
Tarife bereits in einem Ordner. Ich habe die weibliche Version,
die männliche Version. Also werde ich die benutzen. Es ist schon da. Aber sagen wir den ersten, den männlichen zuerst. Die Reihenfolge spielt keine Rolle. Es ist alles dasselbe. Ich werde nur diese
eine erste Referenz machen , die interessiert. Jetzt gibt mir Maya den
Namespace automatisch
, also eher
Fuselunterstrichmail. Du kannst das so lassen, wie
es ist, wenn du willst. Ich nenne es Severus. Es macht ein bisschen mehr Spaß. Und dann lass uns den anderen machen. Ich denke ein bisschen nach. Es ist ein schweres Bohrgerät. Aber auch hier ist es ein
wirklich netter Rick. Nun, das nächste, nennen
wir es Minerva. Auch hier spielt der Namespace keine Rolle.
Das liegt an dir. Ich entscheide mich nur
dafür , um es ein bisschen
interessanter zu machen. Hervorragend. Wir haben die beiden Bohranlagen,
Severus und Minerva. Ich werde es jetzt einfach machen. Dieses Tool funktioniert jedoch mit
zwei oder mehr Tarifen, die Ihnen überlassen sind. Ich habe die Textur nicht
geladen, aber das ist okay. Ich werde mir nicht zu
viele Gedanken über die Texturen machen. In diesem Fall interessieren uns nur die
Controller. Egal, wofür Sie sich entscheiden, Sie können die
Texturen laden oder nicht. Das Tool
kümmert sich nicht darum. Ich werde das
Standardmaterial
verwenden um die Schattierung gleichmäßig zu gestalten. Und aus irgendeinem Grund
gibt es Schwarze. Schalten wir also die
doppelseitige zweiseitige Beleuchtung ein. Da hast du es. Sie sehen nicht so hübsch aus, aber Tool. Es wird einfach auf
dem Controller funktionieren , also das ist okay. Da hast du es. Lass mich das erhöhen. Und lassen Sie uns das Tool
kurz testen. Gehen wir von Minerva aus. Trennt einfach. Da hast du es. Es funktioniert. Hervorragend. Dies ist das Setup, das Sie benötigen. Nochmals, wenn Sie mit
Namespaces und Referenzen
in Maya
nicht sehr vertraut sind, empfehle
ich Ihnen dringend ein paar Minuten damit zu
verbringen, sich
damit zu beschäftigen. Es ist nicht sehr kompliziert, aber es ist sehr nützlich. Also lasst uns weitermachen und in den Code
springen. Bevor wir uns
mit dem Code befassen,
wollen wir eigentlich aufschlüsseln,
was hier passiert. Schauen wir uns an, wie, schauen wir uns die Schritte an, die wir zu automatisieren
versuchen. Lassen Sie mich also diese
Einschränkungen zusammenfassen. Lass mich die auf Null setzen. Okay. Was bedeutet es, Beiträge
zu übertragen? Nehmen wir diese
Brustkontrolle, z. B. damit du siehst, sie sind beide gleich. Also Rig Spine, Zero Skin,
Shoulder, Shoulders,
und das ist ein
bisschen ein langer Name, aber das Wichtigste ist
, dass sie beide gleich sind. Sie befinden sich direkt hinter
diesem Namespace. Also für diese kontrollieren ihre Server und über diesen
Rake die Namespaces Minerva. Also lasst uns die
Rotation dieses Charakters ändern. Sagen wir einfach 90. Perfekt. Um diese Pose zu übertragen, wollen
wir im Grunde
den gleichen Wert auf diesen
Controller hier anwenden , der
wiederum
derselbe Controller
ist, sich nur unter einem
anderen Namensraum befindet. Wie würden wir das
machen? Öffnen wir den Skript-Editor. Lassen Sie uns Maya noch einmal bitten, uns einige wertvolle
Informationen zu geben. Ich werde diesen Wert noch
einmal ändern, also x drehen und
sehen, was passiert. Okay, perfekt. Meine Augen sagen
uns, dass es einen gibt, das ist der Befehl, der ausgeführt wird, sagte Adder. Dann wird der Name des Controllers
, der der Name des Objekts ist, auf den Namen des Attributs
gepunktet. Okay, das ist also der vollständige
Name des Attributs. Das bedeutet, dass die Drehung x und dieser Controller
diesen Namen haben
, der ein Controller ist, der ein Namespace
ist, ein Doppelpunkt. Tut mir leid, das wollte ich nicht tun. Ein Namespace-Doppelpunkt, der
Name des Steuerelements und dann ein Punkt und dann der
Name des Attributs. Und da ist dieser Befehl set R. Lassen Sie uns
das in Python übersetzen. Das werde ich, ich muss diese Bibliothek
importieren. Aus meiner Eingabe
wird die CMBS-Bibliothek CMV als Adder für Punktsätze verwenden. Und dann zwischen Klammern. Denken Sie daran, dass das Sub
hier ein Geruchscode ist, also verwenden wir ihn nur als
Leitfaden, als Blaupause. Wir brauchen das
Semikolon in Python nicht. Wir werden die Klammer öffnen
und schließen. Das erste Argument
ist der Name, der vollständige Name dieses Attributs. Und das zweite Argument
wird der Wert sein, den wir dieses
Attribut festlegen
möchten. Da hast du es also. Dies ist die Grundlage für
unser Tool-Setting und das
Abrufen von Attributen. Lassen Sie uns diesem Attribut
etwas anderes setzen, sagen wir 80. Lass mich das nochmal machen. Sie können die
Änderung also hier sehen. Es tut mir leid. Ich weiß, das sieht sehr
schmerzhaft aus. Es tut mir leid, ich bin Nerva. Bitte vergib mir. Gehen wir zurück zu Null. Entlasten wir
sie auf dem Rücken. Da hast du es. Lassen Sie uns nun
dasselbe tun, indem wir einfach
den Namespace ändern. Jetzt ist der andere
Namespace getrennt, und setzen wir ihn auf 80. Lassen Sie uns diesen Code ausführen. Da hast du es. Wie Sie sehen,
ändern wir nur den Namespace. Jetzt müssen wir wissen, wie hoch der Wert eines
Controllers ist. Wir können es auf den
nächsten Controller anwenden, oder? Lass mich das auf Null setzen. Noch einmal.
Bringen wir sie zurück zur Standardpose. Lassen Sie mich
in dieser Rotation einen Wert anwenden. Und so passiert es, dass es eine Möglichkeit
gibt, diesen
Wert zu ermitteln, und es ist sehr intuitiv. Es heißt Get outer. Wir würden ähnlich arbeiten,
wie gesagt, adder, aber natürlich
setzen wir kein Attribut, also müssen wir
keine zusätzlichen Argumente übergeben. Wir werden nur noch trauriger. Angenommen, wir wollen
das Attribut,
den Wert dieses
Rotationsattributs Minerva, abrufen . Also müssen wir
diesen Namespace Minerva ändern. Und wir sagen,
Rotation entspricht dem. Lass uns das einfach ausdrucken.
Mal sehen, was hier passiert. Lassen Sie uns Rotation drucken. Lassen Sie mich das
hier
etwas größer machen und meine
Ausgabehistorie löschen. Okay, da hast du's. Gut. Adder mit dem vollständigen Namen
des Attributs
gibt Ihnen im Grunde den Wert, nach dem
wir suchen. Wie Sie wahrscheinlich erraten, müssen wir
dann nur noch das Attribut setzen. werde ich, ich
nenne diese Rotation x ,
weil wir das machen. Großartig. Wir speichern
diesen Wert also in Rotation x. Wir müssen
also nur denselben Controller und
dasselbe Attribut auf Server
anwenden . Da hast du es. Das ist, das ist im Grunde
die Grundlage unseres Tools. Es ist sehr einfach, was gut ist, einfach, es ist immer gut. Wir müssen das alles nur
programmgesteuert machen, was
bedeutet, dass wir
wissen müssen , welchen Charakter
wir auswählen, welche Controller
wir auswählen. Wir müssen die
Attribute daraus,
von diesen Controllern, abrufen und sie
auf den nächsten Charakter anwenden. Hoffentlich macht das Sinn. Lassen Sie uns nun tatsächlich weitermachen
und uns den Code ansehen.
19. Namensräume und Listen: Wir werden außerhalb
meines hauptsächlich in PyCharm
schneiden . Wenn Sie
das Mustervideo nicht gesehen haben, tun
Sie es bitte, es sei denn, Sie verwenden einen Text
Ihrer eigenen Wahl usw., in
diesem Fall ist es in Ordnung. Aber im PyCharm-Video gehe
ich darauf ein, wie das Projekt
eingerichtet wird. Wir richten das Projekt im Ordner Maya
Scripts für Dokumente ein. Und der Grund dafür
ist, dass Maya bereits weiß
, wie man Code aus
diesem Ordner liest. Also werden wir unsere Module oder unseren
Code hier
hineinschreiben , damit Maya
leicht darauf zugreifen kann. Versuchen wir es mit unserem Modul. Ich werde eine neue Datei erstellen, diese einfache Textdatei. Wir können das
natürlich in PyCharm machen, aber das habe ich dir
schon zuerst manuell gezeigt. Das werden
wir importieren. Ich nenne es posts
Transfer dot statt dx, dy dot p-y oder Python. Windows wird mich bitten,
dies zu bestätigen. Ich sage ja. Wenn ich nun zu PyCharm gehe und das ist kein
Kreisdiagramm, das ist ein Pi-Begriff. Sie werden sehen, dass die
Datei hier angezeigt wird. Und natürlich ist es leer. Aber jetzt können wir mit dem Codieren beginnen. Was müssen wir zuerst tun? Nun, das Wesentliche
des Tools ist,
wie ich bereits erwähnt habe, dass wir viel mit Namespaces
arbeiten. Wenig
sagt im Grunde genommen, dass die Übertragung
von einem Namespace in einen
anderen Namespace entgegengesetzt ist. Wir müssen also in der Lage sein,
die Namespaces zu bekommen , mit denen
wir arbeiten möchten. Das ist einer der ersten
Schritte. Um das tun zu können. Wir müssen mit der
Auswahl arbeiten, weil wir erhalten, dass der Namespace auf der Auswahl
basiert. Ich wähle einen Charakter
und dann den nächsten und übertrage dann
die ausgewählten Beiträge vom
ersten Charakter auf den Charakter. Also lass uns anfangen, lass uns zuerst daran arbeiten, diesen Namespace
zu bekommen. Und dann werden wir daran arbeiten, diese Wahl
zu erreichen. Wie bekommen wir den Namespace? Wenn du etwas auswählst? Ihr werdet hier
in der Channel-Box sehen , dass es sogar hier so ist, wie ich das
schon ausgegeben habe. Der Name des
Controllers ist eine Zeichenfolge. Oder wir können
es uns als eine Zeichenfolge vorstellen. Wenigstens. Es enthält den Namespace, es hat einen Doppelpunkt und dann enthält es den
Namen des Controllers. Also lass uns das in eine Variable setzen. Wir müssen im Grunde
den ersten Teil davon bekommen. Und um das zu tun, können wir
die Zeichenfolge durch diese Spalte teilen. Wir können einen Kontrollpunkt-Split machen. Dies ist eine Funktion, die mit Zeichenketten
geliefert wird. Wir können sagen, Kontrolle spaltet sich. Wir wollen
es in der Spalte aufteilen. Lass uns das einfach ausdrucken. Fahren Sie fort und drucken Sie das
direkt aus. Toll, da hast du's. Wie Sie sehen können,
haben wir den ersten Teil und dann den zweiten Teil. Jetzt hat es
das Beispiel früher nach Hause gebracht. Was ist, wenn wir
die Unterstriche unterteilen? Nun, dann bekommst du mehr Teile. Du bekommst alles, was vor und nach
jedem Unterstrich steht. Aber für unsere Zwecke brauchen wir
es nur durch den, durch den Doppelpunkt zu teilen. Wir erhalten also eine Liste, das Ergebnis dieser
Split-Funktion. Es ist eine Liste mit allen Teilen
, die aufgeteilt wurden. Und der, der
uns wichtig ist, ist der erste Teil. Wie ich bereits erwähnt habe. In diesem Projekt werden wir etwas über
List lernen. Unsere Liste ist nur eine
Sammlung von Objekten, von Gegenständen, alles, was
Sie können, was Sie wollen. Es können Zeichenketten sein, können ganze Zahlen sein, können
Funktionen selbst sein, kann alles sein, was Sie wollen. Und wir fangen an,
diese Artikel bei Null zu zählen. Also dieser erste Artikel, also lassen Sie mich dafür tatsächlich mit Malen beginnen. Sie können eine Liste sehen. Du kannst, du kannst dir eine Liste wie diese
vorstellen. Es wird auch als Array bezeichnet. Übrigens
werden einige Leute sie Array nennen, aber wir werden sie Listen
nennen. Stellen Sie sich vor, das ist eine Liste. Machen wir es einfacher. Dies ist eine Liste mit
vier Elementen. Zu. 3.4. Wir beginnen bei Null zu zählen. Das ist Null, das Element, das ist eins, das ist zwei. Das ist wahr. Was ist also, wenn Sie das zweite Element
einer Liste
abrufen möchten , während Sie den
Index Nummer eins verwenden Welches davon
werden Indizes genannt? Wenn Sie das
erste Element einer Liste abrufen möchten, verwenden
Sie den Index Null. Wenn Sie für das zweite
Element eine andere Liste erhalten möchten, verwenden
Sie den ersten Index und
so weiter und so fort. Also lass uns das machen. Die Syntax zum Abrufen
eines Elements der Liste ist eine weitere offene und
geschlossene eckige Klammer. Nehmen wir an, wir wollen den
ersten haben, und das ist eins. Lass uns das machen und
wir besorgen uns einen. Hervorragend. Nehmen wir an, wir wollen den dritten
bekommen. Wir
fangen wieder bei Null an. Also werden wir den zweiten Index bekommen. Hervorragend. Lassen Sie uns, speichern wir
diese Aufteilung in eine Variable. Nennen wir es Steuerteile. Und jetzt lass uns drucken, lass mich das löschen. Lassen Sie uns diese Variable drucken. Wieder hervorragende Monate ist eine Liste. Jetzt holen wir uns das erste Element, das wiederum
Klammern, Nullen, Index bewertet. Und das ist es, wonach
wir suchen. Das bedeutet, dass unser
Namespace-Hauptraum erste Index sein
wird. Wir können all das kombinieren. Auf diese Weise. Wir können sagen, dass der Namespace das
erste Element dieser Aufteilung sein wird. Toll, so bekommen
wir Namespace. Was wir nun benötigen,
bevor wir den
Namespace abrufen können, sind diese Controller, die auf der Auswahl
basieren? Also lasst uns weitermachen und das tun.
20. Auswahl und „für“-Loops: Auswahl. Wir brauchen diese CMBS-Bibliothek wieder. Also lass mich das
auf meinen Impuls hin, ja, es gibt eine Funktion namens
ls, die für Liste steht. Hinweis in einer Python-Liste, wie
wir sie bisher gesehen haben. Aber ich habe eine Funktion gesehen
, die Ihnen eine Liste der Objekte
in der Szene gibt.
Wenn Sie z. B. alle Kameras in
der Szene abrufen möchten, können
Sie die Bibliothek importieren.
Lass uns das ausführen. Sie sehen, Sie erhalten die
Kameras in der Szene aus den jeweiligen Kameraausgängen. Bei manchen Kameras
kann man z.B. Lichter bekommen, die ich momentan nicht habe. Das ist also eine leere Liste. Lass es uns erwarten. Sie können eine Auswahl treffen. Da ich nichts ausgewählt
habe, habe ich eine leere Liste. Aber sobald ich etwas
ausgewählt habe, lasse mich mein Ausgabefenster leeren. Sobald ich etwas auswähle, erhalte
ich eine Liste mit diesen
elektrisch ausgewählten Objekten. Und wie Sie sehen können, ist
dies der Name, nach dem
wir suchen. Wenn ich also mehr als einen auswähle,
sagen wir, dieser Arm steuert
mich, drucken Sie einfach aus. Da hast du es. Also erhalte ich eine Liste all
dieser Controller mit ihrem Namespace
und der Steuerung. Jetzt können wir diese Technik
anwenden, um den Namespace aus der
gesamten Auswahl zu extrahieren. Lassen Sie uns also weitermachen und Pi Term
beginnen, um damit zu beginnen. In unserem Modul nach der Transplantation, dem Teil, den
wir gerade erstellt haben, erstellen wir eine Funktion def space definiert die
Funktion, get selected. Namespaces,
Klammern öffnen, schließen, Spalte. Aber lassen Sie uns zunächst mit der Auswahl beginnen
. Wir können
diese Auswahl also, wie ich Ihnen zuvor
gezeigt habe, in einer
Variablen namens Auswahl speichern . Die Auswahl erfolgt auf Augenhöhe. Und eigentlich habe ich
meine Bibliothek nicht aus Maya importiert ,
wichtig CMBS. Diese werden rot angezeigt. Das liegt daran, dass Python nicht weiß, woher das
CMB als Bibliothek kommt. Aber das spielt keine Rolle, da PyCharm den Code nicht ausführt. In diesem Fall
wird Maya diesen Code ausführen. Solange Maya
Zugriff darauf hat, ist das in Ordnung. Die Auswahl entspricht also
Cmd S dot ls. Auswahl entspricht wahr. Dadurch erhalten wir die
ausgewählten Steuerelemente. Was passiert also, wenn
nichts ausgewählt wird? Wir können die
Länge einer Liste überprüfen. Also nochmal, das
wird eine Liste sein. Wir können mit
einer funktionierenden
Callback-Funktion namens Len L-E-N überprüfen, wie
lange ich gelistet habe . Auswahl von Len erfahren
Sie
im Grunde , wie viele Elemente
sich in einer Liste befinden. Nun, ich habe bereits erwähnt, dass
Sie bei Null anfangen zu zählen. Aber im Fall der Länge sagt
es
Ihnen tatsächlich die Anzahl der Dinge in der Liste. Es wird also nicht bei Null
gezählt wenn die Liste drei
Elemente enthält. Land, wir geben dir drei. Wir wollen sagen, ob len
gleich Null
ist, was bedeutet, dass in der Liste nichts enthalten ist. Nun, wir können
keine Namespaces aus dem Nichts bekommen ,
also können wir nicht weitermachen, also können wir hierher zurückkehren. Aber wir erstellen eine Funktion
, die Namespaces zurückgibt. Bleiben wir also konsistent
und geben eine leere Liste zurück. Bevor wir fortfahren,
legen wir die Erwartungen
an diese Funktion
im Docstring fest. Ich werde noch einmal 33 doppelte Anführungszeichen
drücken. Wir würden sagen, ich werde eine kleine Beschreibung
für die Funktion schreiben. Liste der ausgewählten abrufen. Holen Sie sich jetzt eine Liste der Namespaces
für das ausgewählte Rennen. Und es wird eine Liste zurückgeben. Hervorragend, wenn also nichts ausgewählt
ist, geben
wir eine leere Liste zurück. Andernfalls
müssen wir diese Auswahl wiederholen, um
die Namespaces
zu erhalten, die wir gerade gesehen haben. Wie machen wir das? Wir
müssen dafür eine For-Schleife verwenden. Die Syntax dafür ist für, nennen
wir es Item. In der Auswahl. Wir werden unseren
Code bekommen, den wir gerade hatten. Wir waren hier oben. Lass es mich hier einfügen. Nennen wir diese eigentlich Kontrolle. Nennen wir dieses Steuerelement
statt Item. In diesem Fall
brauchen wir das hier nicht , da
es fest codiert ist. Wir wollen nicht
mit dieser einzigen Steuerung arbeiten. Arbeite in allem
, was ausgewählt wurde. Zur Steuerung der Auswahl. Holen Sie sich den Namespace, was wir
erneut tun, indem wir das Steuerelement durch den Doppelpunkt teilen und
dann das erste Element abrufen. Und jetzt, um unsere Namespaces zu speichern, beginnen
wir mit
einer leeren Liste. Namespaces entsprechen einer leeren Liste. Also, wie fügen wir diesen Namespace zu diesen
Listen-Namespaces hinzu, nennen
wir das
eigentlich in der Space-Liste. Ein bisschen expliziter. Du kannst namespace, list,
dot append und den Namespace sagen . Was
Sie wahrscheinlich
bemerken, ist, dass Listen geändert werden
können. Das nennt man Wandlungsfähigkeit. Die Liste ist unveränderlich, das
heißt, sie kann geändert werden. Es gibt noch einen anderen Datentyp
, den als
Tupel bezeichneten Datentyp, der sich wie eine Liste verhält, aber nicht geändert werden kann. Es ist unveränderlich. Aber darauf werden wir
etwas später eingehen. Vorerst ist es wichtig
zu wissen, dass
zumindest an Ort und Stelle geändert werden kann. Jedes Mal, wenn wir
hier einen Namespace anhängen, ändern
wir
diese Liste hier oben. Sobald das erledigt ist, wir diese
Namespace-Liste zurück. Lassen Sie mich einige Kommentare hinzufügen. Lassen Sie mich hier sagen, dass wir den Namespace aus der Steuerung
extrahieren werden. Hier werden wir die
Auswahl durchgehen. Das ist sehr überflüssig, aber es ist das erste Mal, dass
wir nach Schleifen suchen. Also werden wir einige
Kommentare hinzufügen und dann
Namespace zur Liste der
Namespaces hinzufügen . Wieder einmal sehr überflüssig. Sie müssen diese Kommentare nicht
hinzufügen, sondern nur ein
bisschen expliziter sein. Hervorragend. Schauen wir uns also an, was uns
diese Funktion gibt. Lassen Sie uns das
Übertragungsmodul für
Beiträge importieren und einfach unsere Funktion
verwenden. Gehen wir also zurück zu Maya. Öffnen wir einen neuen Python-Tab. Und jetzt lasst uns
Pose importieren, übertragen. Ich, mach die Schrift
etwas größer. Lass uns das einfach ausführen. Wenn ich nun den
Namen des Moduls hervorhebe und es starte, wissen Sie,
dass es, es ist, es sagt Ihnen, dass es
von diesem Ort kommt : Dokumente, Maya-Skript, nehmen wir an, Transfer, ausgezeichnet oder auf dem richtigen Weg. Verwenden wir einfach unsere Funktion. Speichern wir das Ergebnis, das in diese Variable
passt. Es wird
es Posttransfer nennen. Erstens, ich nenne
es, wir rufen
die Funktion von Post
Transfer aus auf und sie
heißt get selected namespaces. Lassen Sie uns also zuerst den Fall testen
, in dem nichts ausgewählt ist. Tut mir leid, ich habe es nicht gedruckt. Lassen Sie uns also Namensräume drucken. Toll, eine leere
Liste wie erwartet. Wenn ich nun ein Steuerelement auswähle, erhalten
wir diesen Namespace. Wenn ich zwei Zeichen auswähle, wählen
wir das erste
und das zweite REG aus. Okay, wir bekommen alle Namespaces, aber
sie werden wiederholt. Das ist also, das ist nicht
unbedingt das ist überflüssig. Wir haben einen Bug. Mal sehen
, was dort passiert. Nehmen wir an, ich wähle für jeden Charakter ein
Steuerelement aus. Das ist das
Ergebnis, das wir wollen. Was jetzt passiert
, ist, dass wir
den Namespace
mehrmals pro Zeichen erhalten . Also lasst uns weitermachen und das beheben. Gehen wir zurück zu PyCharm. Das ist wahr. Also hängen wir den Namespace
jedes Mal an. Aber wir wollen, dass nur die Namespace-Liste an diese Liste
angehängt wird, falls sie
nicht bereits in der Liste enthalten ist. Wir können also einfach sagen,
ob nicht Namespace in der Namespace-Liste,
als Sie es beabsichtigt haben, und dann arbeiten Sie
tatsächlich. Das ist richtig, aber
es ist normalerweise
üblicher, es so zu
schreiben. Wenn nicht, ist es ein Namespace,
kein Spezialist. Dies ist eine sehr einfache Überprüfung, um
festzustellen, ob etwas
in der gesamten Liste enthalten ist. Wenn nicht, haben wir
hinzugefügt, ausgezeichnet. Gehen wir zurück zu Maya. Lassen Sie mich dieses Modul neu laden
, da wir einige Änderungen vorgenommen haben. Laden wir das neu. Lassen Sie uns diesen Code noch einmal ausführen. Hervorragend.
Was passiert nun, wenn wir mehrere Controller auswählen? Sie erhalten immer noch nur einen einzigen
Namespace pro Zeichen. Unglaublich,
genau das wollen wir. Es wählt
ein paar andere Dinge aus. Also werde ich alles
außer den Nervenkurven
für die Auswahl
ausschalten . Toll,
genau das wollen wir. Unsere erste Funktion ist also fertig. Docstring ist bereit. Großartig, fahren wir
mit der nächsten Funktion fort.
21. "for" Loops Übersicht: Bevor wir
zur nächsten Funktion übergehen, möchte
ich klarstellen,
was die For-Schleife macht, da das
ein neues Konzept ist und wir
es viel häufiger verwenden werden. Es wird dir also
sehr vertraut vorkommen. Aber schauen wir uns kurz an, was tatsächlich passiert. Wieder einmal hatten wir unsere Liste. Lassen Sie uns eine Beispielliste erstellen. Ich nenne es Testliste. Jetzt vermeide ich es, diese Liste
aufzurufen. Es ist gültig. Sie können
diese Variablenliste aufrufen. Aber zumindest ist es tatsächlich ein eingebauter Typ in
Python oder eine Funktion, was bedeutet, dass Sie
etwas in eine Liste verwandeln können. Auf diese Weise können
Sie z. B. eine
Zeichenfolge in die höchste umwandeln und sie in diese Funktion übergehen. Deshalb vermeide ich es, dies zu
überschreiben, denn wenn ich
meine Variablenliste aufrufe, überschreibe
ich
sie und das ist normalerweise eine schlechte Idee. Vielleicht keine schlechte Idee,
aber es ist keine gute Idee eingebaute
Typen in Python
zu überschreiben. Also werde ich es diese Liste
nennen, und es wird nur
eine einfache Liste von Zeichenketten sein. Wir werden dasselbe
Beispiel wie zuvor sagen, 123. Nun, die For-Schleife, die diese Elemente durchläuft oder über jedes
dieser Elemente iteriert. Wir sagen für die Nummer in der Liste, Liste, Nummer drucken. Lassen Sie uns diesen Code ausführen. Hervorragend. Wie Sie sehen, wird einfach jedes dieser Elemente in
dieser Liste gedruckt . Nun, Zahl ist eine
Variable, die ich ausgewählt habe, dass Sie den
Namen dieser Variablen wählen. Und du sagst im Grunde für jedes dieser Elemente,
also speichert diese Liste das
in dieser Variablennummer. Und dann innerhalb
dieses For-Loops kannst
du diese Nummer verwenden. ZB können wir, wir können einige
ganze Zahlen machen, sagen wir 235. Geh und bring das zur Sprache. Wir könnten aber auch sagen,
Zahl mal zwei drucken, z. B. diese sollten gedruckt werden
oder 6.10, oder? Da hast du es. Das ist es also,
was passiert. Wir sagen im Grunde speichern, gehen Sie jedes dieser in einer Variablen gespeicherten
Elemente durch, dann ist diese Variable für Sie
innerhalb dieser For-Schleife
zugänglich. Und das
tun wir im Grunde von
der Auswahl aus, die in
der CMBS-Bibliothek funktioniert. Um dieses Beispiel zu vervollständigen, verwenden
wir
das, was der S-Welle vorausging. Lassen wir einfach die
Variablenzahl stehen. Es ist kein guter Name für das, was wir hier verwenden,
aber er ist gültig. Da hast du es. Wie Sie sehen können, wird
einfach über jedes
Element, das ausgewählt wird,
iteriert. Hoffentlich ist das klar,
aber keine Sorge, wir werden während des gesamten
Kurses weiterhin
for-Loops verwenden . Lassen Sie uns dann zur
nächsten Funktion übergehen.
22. Attribute erhalten: Als Nächstes müssen wir die Attribute
abrufen, die wir übertragen
möchten, oder? Dieses Tool sagt also im Grunde hol dir die ausgewählten Controller,
hol die Attribute. Wir
müssen auch
die Werte für jedes
dieser Attribute speichern . Dazu kommen wir als Nächstes. Aber zuerst müssen wir die Attribute dafür
bekommen ,
damit wir das auf
die nächste Woche übertragen können. Wie
übertragen wir also Attribute? Okay, lass uns, lass uns
noch einmal mit dieser Steuerung
arbeiten . Stellen wir es hier hin. Nehmen wir an, wir arbeiten
mit dieser Kontrolle. Jetzt
beinhaltet der Name des Knotens den Namespace. Das ist wichtig,
denn so weiß Maya, um welchen Charakter es sich handelt. Kontrolle gehört dazu, was die
kontrollierbare Lunge für sich ist . Dies ist der Name der Basis, der Basisname des Steuerelements. Aber innerhalb der Szene es sich unter diesem Namespace. Es ist also wichtig, das da drin zu
behalten. Es gibt eine Funktion
namens List Adder. Und schauen wir uns in der Dokumentation an, was es macht. Ich habe es genau hier. Listenergänzung, nach der Sie
einfach suchen können. Es heißt, dieser Befehl listet
die Attribute eines Knotens auf. Wenn kein Flux oder ein Wert angegeben ist, werden
alle Attribute aufgelistet. Okay, lass uns
zu den Beispielen gehen. Es sieht so aus, als ob, wenn Sie
ihm nicht den Namen eines Knotens geben, die Attribute
der ausgewählten Notizen auflisten. Wenn Sie ihm jedoch
den Namen eines Knotens geben
, werden die
Attribute dieses Knotens aufgeführt. Also lasst uns das ausprobieren. Es wird der Kontrollknoten genannt. Knoten. Nennen wir es speichern dies in einer
Variablen namens Attribute und lassen Sie uns diese Variable drucken. Okay, großartig. Das sind also viele Attribute,
eine wirklich lange Liste. Einige von ihnen sind das, was wir hier
sehen, im Großen und Ganzen. Wir werden wahrscheinlich Rotation und Übersetzung
sehen. Wir sehen aber auch viele
Dinge, die wahrscheinlich
von etwas anderem geerbt wurden. Nun, es gibt tatsächlich
Einschränkungen, natürlich gibt es ein paar Einschränkungen über die
wir uns Gedanken machen sollten, z. B. wollen
wir keine
Attribute erhalten, die gesperrt sind. ZB
wollen wir nur Attribute bekommen
, die wir setzen können. Wenn Sie also
zur Dokumentation gehen, werden
Sie tatsächlich
feststellen, dass es
einige Optionen gibt, die Sie in diesen Befehl eingeben können
. Sie können nur
Aktattribute loswerden. Sie können Attribute abrufen, die Kibble
sind, die gesperrt sind. Und du kannst
die bekommen, die es sind. Also hier, einstellbar. Schauen wir uns an,
was uns diese geben werden. Einstellbar entspricht wahr. Okay, das
scheint nicht allzu anders zu sein. Ich habe es gezeigt, ich weiß, dass es anders ist. Beginnt mit Einlösen
statt mit einer Nachricht. Das ist immer noch viel. Kleinere
Liste, wie Sie sehen können, immer noch eine Menge und
es gibt Dinge, die uns vielleicht egal sind. Wie wäre es, wenn wir uns auf
die Attribute in
der Kanalbox konzentrieren . Dafür gibt es
eine weitere Funktion. Es ist eine Funktion namens CMBS, ich habe gerade eine Schüssel gemacht. Schauen wir nun in
der
Dokumentationsliste animierbar danach , wie ich diesen Bonus gefunden habe,
um in Foren im Internet nachzuschauen und nach
dem besten Weg zu suchen , Attribute
aus der Channelbox zu bekommen. Ich habe diese Arbeit im Voraus für dich erledigt und jetzt
gebe ich dir nur die Antwort. Sonst würde er
lange brauchen. Dieser Befehl listet also die animierbaren
Attribute eines Knotens auf und ermöglicht die Filterung nach dem
aktuellen Manipulator oder Knoten. Okay? Wir können dieses Asset
wahrscheinlich ohne Argumente verwenden. Die Formen
interessieren uns nicht wirklich. Es ist uns egal. Typ. Diese fliegen fest ab und werden nicht
mehr unterstützt. Darüber müssen wir uns
keine Sorgen machen. Nur vom
aktuellen Manipulator betroffen. Das
will ich auf keinen Fall tun. Das bedeutet, dass, wenn sich Ihr Manipulator im
Übersetzungsmodus befindet, Sie nur
die Übersetzungsattribute erhalten. Das
wollen wir auf keinen Fall tun. Lassen Sie uns einfach
diesen Knoten übergeben und unseren Listenaddierer durch
unsere animierbare Listenfunktion
ersetzen. Lass uns das ausdrucken. Okay, das sieht ganz anders aus. Damit es ein
bisschen einfacher zu lesen ist. Schauen wir uns diese
Liste genauer an. Sagen wir also für Otter in
Attributen, drucken Sie heißer. Dies dient jetzt nur zu
Visualisierungszwecken. Ich wollte nur die Liste sehen anstatt sie flach zu haben. Ja, da hast du's. Es wird
als aktuelle Liste präsentiert. Was wir hier sehen, wir sehen tatsächlich
den vollständigen Pfad
dieser Attribute
oder den vollständigen Pfad der, dieser Controller. Wie Sie sehen, werden alle Anime-Knoten gestartet
. Und dann geht es
in die Rigs-Gruppe. Und dann gibt es noch eine
Gruppe namens Butter Regroup All Way Down. Am Ende jedes dieser Felder
steht der Name
des Controllers. Und am Ende steht der
Name des Attributs. Das ist es, was uns
wirklich wichtig ist. Und das sehen wir
in der Kanalbox, Übersetzung x, y und z, Rotation und
Breite oder Breite. Das ist großartig. Das wollen wir eigentlich. Das alles interessiert
uns nicht wirklich. Das ist ehrlich gesagt sehr wortreich und etwas nervig,
wenn ich ehrlich bin. Also lasst uns das aufräumen. Wenn Sie sich diesen
Weg genau ansehen, können
wir einiges tun. Aber wir haben
bereits gelernt, wie
man Saiten teilt. Wir können also einfach
nach dem Punkt teilen. Beachten Sie, dass hier
keine anderen Punkte enthalten sind. Das wird also gespeichert,
falls es in Ihrem Rig eine Tür gibt. Das könnte ein etwas
anderer Fall sein. In diesem Fall können wir immer noch
das letzte Element der Zeichenfolge abrufen . Okay, stellen wir uns vor,
dass das der Fall ist. Lassen Sie uns also mit diesem Beispiel arbeiten. Nehmen wir an, wir
möchten den Namen
dieses Attributs aus
dieser wirklich langen Liste abrufen . Ordnung, also
arbeite normalerweise auf einem separaten Python-Tab und füge ihn hier ein. Das ist alles äußerlich. Der Name entspricht
dieser wirklich langen Zeichenfolge. Was passiert also, wenn wir uns durch die Punkte
teilen? Lass uns
weitermachen und das Ganze machen. Lassen Sie mich diese Variable
etwas kürzer machen , einfach schlecht. Um das Tippen zu erleichtern. Voll. Punktteilung hinzugefügt. Das heißt,
wir
teilen nicht durch den Doppelpunkt, sondern durch den Punkt. Wir werden das Teile nennen. Wir werden diese Teile
drucken,
was, wie wir wissen, eine Liste der
Teile vor und nach
allen Zweifeln sein wird , die es
in den großen Teilen findet. Und schauen wir mal,
wie viele Teile wir haben. Wir können die
Länge dieser Liste ausdrucken. Ersatzteile für Objektive. In Ordnung, es gibt zwei von ihnen. Es gibt hier also einen wirklich
langen ersten Teil
, der der Name
des Controllers ist. Am Ende ist
dies der Name
des Attributs
, das uns wichtig ist. Nun, ich habe erwähnt,
was passiert,
wenn dieser
Name aus irgendeinem Grund eine weitere... enthält. Lassen Sie uns eine.in hier nur
als Beispiel angeben. In Ordnung, lassen Sie es uns ausführen. Jetzt. Die Länge unserer Liste ist drei. Das liegt natürlich daran, dass wir einen anderen Punkt
und einen anderen Punkt
finden. Und jetzt haben wir drei Teile. Aber der, der
uns wichtig ist, ist immer noch der ganz am Ende. Wenn wir davon ausgehen, dass es keine
gibt, gibt es nur eins. Im Namen können
wir einfach sagen,
okay, wir geben den Namen des
Attributs an zweiter Stelle. Was passiert, wenn
es mehr als einen gibt? Nun, wir müssen
den letzten Index bekommen, oder? Wie machen wir das? Es gibt zwei Möglichkeiten, das zu tun. Zum einen wissen wir bereits, wie
viele Artikel in der Liste enthalten sind. Also können wir einfach sagen, okay, es gibt drei Artikel, die wir wollen den dritten Artikel, weil wir bei Null
anfangen zu zählen. Wir können eigentlich einfach sagen, okay, wir wollen die Anzahl
der Artikel minus eins. Weil das dritte Element, wenn du bei Null zählst, Nummer 20 ist,
wird die erste sein, 11 ist die zweite, 12 ist die dritte, oder? Das können wir also
zu unserem Vorteil nutzen. Teile. Nehmen wir an, die Teilnummer entspricht der Länge der
Teilkettenliste. Und dann der Attributname. Nennen wir es einfach Adder. Die Addition arts und die Indexnummer der letzte mögliche Index, ist der letzte mögliche Index,
also die
Anzahl der Teile minus eins. Also lasst uns alles ausdrucken. Da hast du es. Das war's. Das ist es
, was uns wichtig ist. Nun, es gibt einen einfacheren
Weg, das zu bekommen. Und das heißt, indem
man einfach minus eins sagt. Ohne zu wissen, wie
viele Artikel in Ihrer Liste sind. Wir können einfach sagen, gib
mir den Index minus eins, was der letzte Index sein wird. Wie funktioniert das? Lassen Sie uns das
aufschlüsseln, bevor wir fortfahren. Wie ich dir schon einmal gezeigt habe. Stellen wir uns noch einmal mit vier Gegenständen vor, wie ich Ihnen zuvor
gezeigt habe. Das erste Element ist Index Null, das zweite Element ist Index eins. Der dritte wird zwei sein. Eins vorwärts wird
drei sein usw. usw. Es gibt
auch Indizes im negativen Bereich. Der allerletzte Index in
der Liste ist also Index minus eins. Entschuldigung, so ist der
Rückwärtsindex minus eins. Der vorletzte
wird minus zwei sein. Der drittletzte, natürlich minus drei und so weiter und so fort. Auf diese Weise können
Sie, ohne zu wissen, wie viele
Elemente in der Liste enthalten sind, ohne zu wissen, wie viele
Elemente in der Liste enthalten sind, einfach sagen, okay,
geben Sie mir den letzten. Oder wenn du mich willst,
den vorletzten. Lassen Sie mich Ihnen nur
ein Beispiel dafür zeigen. Gehen wir zurück zu Maya. Lassen Sie uns einen neuen Python-Tab öffnen. Lassen Sie uns eine neue Beispielliste erstellen. Nennen wir es Beispiel. Sagen wir 123. Wie immer sind wir an
dieses Beispiel bereits gewöhnt. Also, wenn ich Beispiel sage, gib mir den Nullindex. Nun, lass mich
das finden. Es ist gedruckt. Der nullte Index des
Beispiels wird Eins sein. Bringen wir den dritten. Der zweite Index wird sein, was
dem dritten Element entspricht. Das sind drei. Wenn ich nun sage, gib mir den letzten Wert, Index minus eins, dann
ist das dasselbe. Jetzt gib mir einen Index minus zwei. Das ist gleichwertig, dasselbe. Das ist also eine weitere Möglichkeit für Sie, das letzte
Element in dieser Liste zu finden, egal wie viele Punkte
Sie hier haben werden. Es ist
in gewisser Weise ein bisschen
gescheiterter Beweis , weil wir wissen, dass der letzte Teil davon unsere Attribute sein
werden. Da hast du es. Lassen Sie uns das alles sehr
schnell
zusammenstellen. Ich werde
diesen Code kopieren. Wir wissen bereits, wie man diese langen
Attributnamen aus einem Steuerelement erhält. Und ich werde
den Rest unseres Codes
hier einfügen . Mach das größer. Okay? Wir wissen, dass Attribute diese wirklich langen Namen
enthalten werden . Und wir wissen bereits, wie
man den einfachen Namen
oder den Kurznamen dieses Attributs erhält, indem man
seine Teile aufteilt und
den letzten geteilten Teil erhält. Okay, lasst uns, lasst uns,
lasst uns diese kombinieren. Wie gesagt, wir müssen nicht
wirklich wissen wie viele Elemente in
der Liste des Sprints enthalten sind. Das alles können wir
in diesem für Loop erledigen. Da wir diesen Code schon hier
haben. Lassen Sie uns diesen Code einfügen und
ihn in diese For-Schleife einfügen. Jetzt wissen wir, dass die
Attributliste diese langen
Attributnamen enthalten wird. Nennen wir das also Vollotter. Und dann überziehen die
Verben im Grunde jeden
dieser wirklich langen
Namen, die wir aus
der animierbaren Listenfunktion erhalten haben ,
oder teilen ihn in Teile auf. Wir bekommen den Kurznamen
, den letzten
Teil, den wir aufgeteilt haben, und das ist
der Name unserer Attribute. Lassen Sie uns also expliziter sein. Nennen wir diesen Namen. Entferne das. Okay, da hast du's. Das ist ein bisschen sauberer. Wir können den
Namen einschalten, ich nenne keine. Wir können tatsächlich eine Liste
dieser anderen Namen auf
die gleiche Weise wie
die Namespaces erstellen dieser anderen Namen auf
die gleiche . Wir können
Addernamen sagen, Punkt anhängen. Wenn Sie sich fragen,
müssen wir überprüfen ob wir das
Attribut bereits in anderen Namen haben? Das könnten wir. Aber diese, diese Funktion gibt
Ihnen eine
Liste einzigartiger Attribute,
Attribute und einen
Controller, der normalerweise einzigartig ist. Ich würde mir also keine Gedanken darüber machen, zu überprüfen, ob sie
bereits auf der Liste stehen oder nicht, da die Wahrscheinlichkeit sehr
hoch ist , dass sie einzigartig sind. Okay, lasst uns, lasst uns,
lasst uns sehen, wie das abläuft. Wieder einmal haben wir
mit einem Controller angefangen. In diesem Fall
codieren wir den Namen
des Controllers fest. Wir erhalten diese langen Namen von Attributen aus der
messbaren Funktion Listening. Wir starten eine leere Liste, um unsere Kurznamen zu
speichern. Sind es nur die einfachen
Namen der Attribute? Jetzt iterieren wir, wir wiederholen
all diese langen Namen und dann beginnen wir zu teilen. Dann haben wir einfach, sobald wir zu dem Kurznamen gekommen
sind, der uns wichtig ist, wir hier hinzugefügt haben, wir haben
ihn an diese Liste angehängt. Und dann können wir diese Liste vorerst
einfach ausdrucken. Da hast du es. Das ist die
Liste, die uns wichtig ist. Lassen Sie uns also weitermachen
und daraus Funktion machen, die die Namen nicht
fest codiert, sondern wir nehmen jeden
beliebigen
Kontrollknoten auf und geben Ihnen die zugehörigen
Attribute. Lassen Sie mich das kopieren und das in unser Modul
als Kreisdiagramm einfügen. Aber immer noch Clara,
die letzte Funktion, Outer vom Knoten
holen. Okay, fügen wir das
in diese Funktion ein. Da wir dies für jeden bestimmten Knoten
tun wollen, können
wir tatsächlich einen
Pass-The-In als Eingabe verwenden. Dann bedeutet das, dass wir das
nicht mehr brauchen. Wir werden
den Kontrollknoten übergeben. Wir werden die Attribute bekommen. Was passiert nun, wenn
es keine Attribute gibt? Nun, das ist eine gute Frage. Also, genau wie wir es hier tun, geben
wir eine leere Liste zurück,
wenn nichts ausgewählt ist . Lass uns weitermachen und das tun. Wenn len attributes
gleich Null ist, geben
wir eine leere Liste zurück, genauso wie wir es mit
den Namespaces getan haben. Manchmal geben diese
Funktionen in Maya,
wenn es nichts gibt, was sie zurückgeben
könnte, einen Wert ungleich Null zurück. Was nicht großartig ist. Ich, um ehrlich zu sein,
sollte es konsistent sein. Der
Rückgabewert sollte eine leere Liste sein. Aber manchmal passiert das. Also wenn das der Fall ist, und keiner wird wirklich
scheitern, wenn Sie versuchen, dies zu tun. Wir brauchen also eine andere Alternative. Wie überprüfen wir, ob
etwas ist
, was nicht da ist,
etwas, das
leer ist , etwas
Falsches ist. Sagen wir, was wir zuvor gesehen haben. Wir können sagen, wenn nicht Attribute, geben Sie eine leere Liste zurück, das funktioniert für beide, wenn dies ein Non ist. Wenn also,
falls attributes
ein Nein zurückgibt, funktioniert das. Aber auch wenn das Attribut eine leere Liste
zurückgibt, funktioniert
das auch,
was großartig ist. Und zufälligerweise
ist dies eine leere Zeichenfolge, z. B. wird das funktionieren. Diese sind also, die Syntax
ist eigentlich sehr nützlich da Sie nicht genau
wissen müssen , welchen Typ
Sie erwarten. Du kannst einfach sagen, wenn es ein leerer Typ ist,
dann tu etwas. Was ich meine, wenn nicht
leer, dann tu etwas. Das heißt, wir könnten das
auch hier tun. Wir könnten sagen,
wenn nicht Auswahl, dann gib eine leere Liste zurück. Beides, in beide Richtungen bei einem Pilotprojekt, wenn Sie mit Sicherheit wissen,
dass es eine Liste
sein wird , können Sie Len verwenden. Andernfalls können Sie die Variable
nicht verwenden. Wir wissen, dass
es sich bei der Auswahl tatsächlich
um eine Liste handelt, also werden wir uns darüber keine Gedanken machen. Das lassen wir so wie es ist. Auch hier erhalten wir die Attribute
vom Kontrollknoten. Wenn es keine Attribute gibt, wird eine leere Liste zurückgegeben. Andernfalls initialisieren wir
eine leere Liste zum Speichern unserer Attribute. Wir teilen
die Namen dieser,
dieser Attribute auf und wir bekommen
einfach den Namen
, der uns wichtig ist. Sie
denken wahrscheinlich, könnten wir diese beiden
Linien zu einer
kombinieren? Ja, das könnten wir. Wir könnten einfach sagen, holen wir uns das letzte Element direkt aus dieser Aufteilung und sagen, dass der tatsächliche
Attributname das sein wird. Und entferne diese Zeile ganz. Da hast du es. Jetzt hier unten wollen
wir diese
Liste von Attributen zurückgeben,
anstatt sie zu drucken . Und bevor wir gehen, fügen
wir unseren Docstring hinzu. Ruft die Attributnamen vom Knoten ab. Entschuldigung, das
ist eigentlich von einem einzelnen Knoten, ich weiß
nicht, dass es sich um einen
Mehrfachkontrollknoten handelt. Wir erwarten eine Zeichenfolge. Knoten öffnen. Wir geben eine Zeichenfolge zurück, nein, tut mir leid, eine Liste. Oder geben Sie eine Liste mit
einfachen Attributnamen zurück. Sagen wir eigentlich
kurze Attributmonde. Das ist es. In Ordnung, perfekt. Lassen Sie uns, lassen Sie uns
schnell unsere Funktion testen. Wir haben dieses Modul hierher importiert. Lassen Sie uns also nach der
Übertragung
noch einmal neu laden , da wir einige Änderungen
vorgenommen haben. Und dann halt es. Fehler vom Knoten
abrufen, Pfeile vom Knoten abrufen. Lassen Sie uns diesen Knoten passieren. Vorerst. Auch hier erwarten
wir eine Zeichenfolge
und sie heißt Addern. Lass uns drucken. Und da hast du es. Das haben wir erwartet. Hervorragend.
23. Die Pose speichern - Einführung in Wörterbücher: Jetzt, wo wir die
Attribute haben, die uns wichtig sind, besteht
der nächste Schritt darin,
diese Attribute den Werten zuzuordnen diese Attribute den Werten zuzuordnen , die wir für sie festlegen möchten. Denn noch einmal,
das Ziel dieses Tools, und lassen Sie mich nur einige
Werte und diesen Controller festlegen, das Ziel dieses Tools ist es, die Attribute
auf den Controllern zu erhalten. Wir haben die Werte
dieser Attribute ausgewählt und
diese Attribute
und diese Werte
auf den entsprechenden
Controller in einem anderen Rig angewendet diese Attribute
und diese Werte . Also, wie generieren wir
dieses Mapping? Basierend auf dem, was wir gesehen haben? Eine Möglichkeit, dies zu tun, besteht darin,
einfach zwei Listen zu verwenden. Nehmen wir an, wir haben eine
Liste von Attributen. Nennen wir das Otter, die X
übersetzen, z. B. Schiefer. Warum? Lass uns jetzt einfach zwei
verwenden. Dann können wir
eine Liste von Werten haben. Wir könnten sagen, das wird sein, ich kopiere nur diesen Wert
hierher, um zu übersetzen
, dass x dieser Wert minus zehn
Punkte ist. Dann
wird Translate Y -3,90, 54 sein. Also könnten wir, das könnte funktionieren. Wir können sagen, okay, nun, das erste Element in
der Werteliste wird zum ersten Element in
der Adressliste
gehören .
Das Gleiche gilt für den zweiten. Und das ist eine Möglichkeit, ein Mapping
zu erstellen, oder? Es gibt jedoch einen besseren
Weg, dies zu tun. In
Python gibt es einen Datentyp namens Dictionaries. Ein Datentyp ist einfach ein Typ, mit dem
Sie Daten speichern können, zumindest genau hier. Dies ist ein Datentyp. String ist ein Datentyp. Das Wörterbuch, kurz ****, ist ein Datentyp,
der einer Liste ähnelt, aber jedes Element
im Wörterbuch enthält eine Zuordnung zwischen
einem Schlüssel und einem Wert. Jetzt
erstellen wir ein Wörterbuch mit den geschweiften Klammern. Du kannst ein
Wörterbuch sehen wie ein Telefonbuch. Also lass mich, lass mich das löschen. Und bevor wir
ein echtes Wörterbuch erstellen, nehmen wir an, wir wollten
ein größeres Telefonbuch erstellen. Oder Ashley, ich meine, wie ein Wörterbuch selbst. Das Wörterbuch enthält ein Wort
und dann eine Beschreibung. Beschreibung der Welt. Oder noch einmal das
Telefonbuchbeispiel. Nehmen wir an, wir haben Rachel
und wir haben ihre Nummer. Nehmen wir an, wir haben Zeilen
und wir haben seine Nummer. Um dies nun in
ein echtes Python-Wörterbuch zu übersetzen, nennen
wir es Telefone. Auch hier
verwenden wir die geschweiften Klammern, die Liste die
eckigen Klammern. Wir werden hier
die lockigen Klammern verwenden. Wie gesagt, jedes Element
des Wörterbuchs wird einen Schlüssel haben. In diesem Fall lautet der Schlüssel Rachel, dann ein Doppelpunkt und dann der Wert, ihre Zahl und
dann
das und dann der Wert, der ihre Zahl und
dann
das Komma ist, um die Elemente zu
trennen. Also das hier, das ist der
erste Eintrag im Wörterbuch. Das zweite Element
wird natürlich ein
Ross-Doppelpunkt sein , um das zu trennen. Und dann 9876. Da hast du es. Das ist also das Äquivalent diesem Telefonbuchbeispiel, das
wir hier erstellt haben. Wie greifen wir auf Rachels
Telefonnummer zu? Nennen wir das. Zeichnen wir das in einer
Variablen namens Zahl. Es ist eine ähnliche Syntax wie bei der Liste, bei der wir eckige Klammern öffnen und
schließen. Aber anstatt einen Index zu verwenden, werden
Sie den Schlüssel verwenden , aus dem Sie den Wert
abrufen möchten. Dieser Fall wird Rachel sein. Bringen wir das mit. Da hast du es. Wir bekommen die Nummer. Jetzt. Wir kriegen Ross. Wir wissen, dass
Ross die Nummer ist. Hervorragend. So können Sie
also Mappings in Python
erstellen. Bevor wir unser eigentliches
Attributwörterbuch erstellen, das
ungefähr so aussehen würde. Dieser Fall wird Translate sein. X wäre dieser Wert, den
ich hier manuell erstelle, aber natürlich werden wir auf der Grundlage der Auswahl
tun. Y wird hier dieser Wert sein. Und dann nennen wir diese Attribute das Wörterbuch des
Otters. Und lassen Sie mich den
Wert daraus ziehen. Ich ändere nur die
Namen der Variablen. Es spielt keine Rolle. Ich versuche nur, es
ein bisschen
offensichtlicher zu machen . In Ordnung, das ist großartig. Ich habe einen Fehler gemacht. Ross ist natürlich kein Schlüssel
in diesem Wörterbuch, weil
wir die Schlüssel geändert haben. Wenn Sie versuchen, einen Wert von
einem Objekt zu erhalten , das nicht existiert, erhalten
Sie diesen Fehler. Also lass mich einen besorgen
, den ich existieren sollte. Da hast du es. Bevor wir unser
eigentliches Wörterbuch
erstellen, sollten Sie
bei Wörterbüchern einige Dinge beachten Schlüssel müssen einzigartig sein. Was meine ich damit? Nehmen wir an, ich möchte eine neue Y-Taste für Translate
hinzufügen. Und der Wert wird sein, nennen
wir es einfach 100. Wenn ich jetzt
scharf darauf bin, bekommst du nur einen von ihnen und der
erste wird ignoriert. Das
liegt auch hier daran, dass, wenn Sie denselben Schlüssel mehr als einmal
hinzufügen, er überschrieben wird,
da die Schlüssel eindeutig sein
müssen . Hervorragend. Ich denke, wir sollten uns einige Funktionen
in Wörterbüchern ansehen. einen Wert zu erhalten, verwenden
Sie erneut die eckigen Klammern. Lassen Sie mich diesen Schlüssel entfernen, diesen Schlüssel, diese Kernklammer, und dann verwenden Sie den Schlüssel, von dem Sie den Wert erhalten
möchten. Wenn Sie alle Schlüssel in einem Wörterbuch abrufen möchten, können
Sie einfach
Wörterbuch-Punktschlüssel sagen. Dadurch erhalten Sie
eine Liste der Schlüssel. Wenn Sie nun
eine Liste der Werte erhalten möchten, verwenden Sie die Punktwerte im
Wörterbuch. Dann erhalten Sie eine Liste von Werten. den meisten Fällen verwenden
Sie
hier jedoch einfach den Namen des Schlüssels, um die Werte zu erhalten. Wie fügt man nun
Elemente zu einem Wörterbuch hinzu? Ist dasselbe, dieselbe Syntax, genauso wie Sie einen Wert erhalten. Aber anstatt nur einen Kosinuswert zu
schreiben, wir einen
Wert hinzu, der dem entspricht,
wie wir Werte
in einer Variablen speichern. Sie werden einen Wert
für einen Schlüssel in einem Wörterbuch speichern. Auf die gleiche Weise geben
Sie einen Schlüssel an. Lass mich sagen, lass es mich einen neuen Schlüssel
nennen. Und wir sagen, der Wert
wird 123 sein, z. B. wenn ich
die Wörterbuchzelle drucken würde, wurde sie tatsächlich schon einmal gedruckt. Dann fügen wir einen
neuen Wert für Kuba und drucken ihn anschließend aus. Wie Sie sehen, haben wir unseren neuen Schlüssel, aber den neuen Wert, und dann die beiden älteren Kinder
und wir hatten schon. Sie stellen auch fest, dass
dies nicht in Ordnung ist oder am Anfang anscheinend ein
neuer Schlüssel
hinzugefügt wurde. Es wurde zu diesem Anfang nicht wirklich
hinzugefügt. Wörterbücher
haben keine Reihenfolge. Sie verfolgen
die Bestelllisten nicht. Behalten Sie die Reihenfolge im ,
in der Sie Artikel zu ihnen hinzufügen. Wörterbücher tun das nicht. Das liegt daran, dass Sie per Schlüssel
auf Artikel zugreifen. Dafür gibt es noch andere Gründe. Das liegt daran, dass Wörterbücher tatsächlich
sehr effizient
sind , wenn es darum geht auf die
darin enthaltenen Daten zuzugreifen über eine
sogenannte HashMap
auf die
darin enthaltenen Daten zuzugreifen. Aber mach dir darüber keine Sorgen. Das sind technische Details und spielen momentan
keine Rolle. Wisse nur, dass Wörterbücher nicht in Ordnung
sind, aber das macht
nichts, weil du die Werte
immer
durch die Schlüssel bekommst. Was passiert nun, wenn
Sie es hier überschreiben? Wenn du überschreiben willst, behalte ich, du gibst einfach den
Namen des Schlüssels an. Anstatt also -3,90, 54 überschreiben
wir
diesen Wert, sodass er 123 ist. Wie Sie hier sehen können. In diesem Fall werden
diese beiden
in derselben Reihenfolge gedruckt, aber es gibt nicht unbedingt
keine Reihenfolge für das Wörterbuch. Also hier fügen wir diesen
Wert
für diesen Schlüssel hinzu und überschreiben ihn. Okay, hoffentlich macht
das Sinn. Wörterbücher
machen sehr viel Spaß und sind sehr nützlich. Lassen Sie uns eines
mit unseren Attributen erstellen. Lassen Sie uns ein
Wörterbuch erstellen, das wir tatsächlich wollen und das
ungefähr so aussieht wie dieses Attribut
und dann der Wert. Aber denken Sie daran, dass wir
diese Codezeilen verwenden werden, und lassen Sie mich
diese Codezeilen entfernen. Wir werden
die Funktionen set outer und
outer verwenden . Lassen Sie mich ein Attribut
so setzen, dass mein Bein ipsos, das ist eine sehr nützliche Information. Denkt daran, dass Maya ein Kind erwartet oder dass Masaryk losgeschickt
wurde. Unsere Funktion erwartet
den vollständigen Namen des
Attributs und dann den Wert. Es sieht also so aus, als wir das einstellen
müssen, oder? Unser Wörterbuch könnte also eher so
aussehen, aber
wir müssen berücksichtigen,
dass wir den Controller und
seine Attribute und seine Werte
unabhängig vom Namespace speichern wollen ,
weil wir Werte von
einem Rig unter unserem
Namespace auf ein anderes Rig
übertragen wollten . Das Wörterbuch selbst
will oder muss nichts über den Namespace wissen. Das bedeutet, dass unser Wörterbuch eher so aussehen
wird, nämlich der Name
des Controllers dann der Name des Attributs. Jemand könnte argumentieren,
dass dies überflüssig ist, also müssen wir das nicht tun. Wir könnten einfach sagen, wir könnten einfach
die
gewünschten Attribute speichern und dann später den
Controller-Namen hinzufügen. Das könnte auch funktionieren, aber ich denke, es ist einfacher
, es so zu machen. Name des Steuerelements, Name
der Attribute ohne
den Namespace. Sobald wir also
die Attribute festgelegt
haben, geben wir uns den vollständigen Namen der Attribute,
einschließlich des Namespaces. können wir, wir können den Namespace immer nach Verwandtschaft
setzen, den vollständigen Namen
des Attributs
angeben und dann einfach damit den Wert aus
unserem Wörterbuch
abrufen
, der
ungefähr so aussehen wird. Also eine sehr lange Codezeile, aber es wird
ungefähr so aussehen. Im Grunde denke ich,
du verstehst die Idee. Wir holen uns einfach diesen Wert
und wenden ihn genau dort an. Okay, das ist das Wörterbuch
, das wir eigentlich wollen. Fangen wir an, das zu konstruieren.
24. Die Pse speichern – das Posenwörterbuch aufbauen: Um das
Wörterbuch zu bekommen, das wir wollen, müssen
wir
einige Dinge beachten. Wir wissen anhand der Auswahl, was wir
bekommen wollen. Aber wir müssen vorsichtig sein weil wir wissen
, dass wir das Wörterbuch
der Attribute und
der Controller nur ab
dem ersten Zeichen erhalten wollen Wörterbuch
der Attribute und
der Controller nur ab
dem , das wir ausgewählt haben. Weil wir entschieden haben
, dass der Arbeitsablauf
des Tools darin besteht Controller auszuwählen, die
Sie übertragen möchten, und dann eine beliebige Steuerung
in Ihrem Zielgerät oder Ihren Zielrippen auszuwählen. Wir müssen also irgendwie
die Controller herausfiltern , die
nur Teil der ersten
Woche sind , die wir auswählen. Wie machen wir das? Es gibt ein paar Möglichkeiten, dies zu tun. Ich werde
in PyCharm springen und anfangen, meine Funktion zu blockieren. Lassen Sie mich also eine Funktion erstellen, nennen
wir sie Get Pose
Dictionary oder einfach das Deck. Lassen Sie uns zuerst kurz blockieren, bevor
wir Code schreiben. Wir wissen, dass wir
die Auswahl brauchen. Entweder wird es uns zur
Verfügung gestellt oder wir können uns in diese Funktion
einarbeiten. Wir wissen, dass wir
die Eigenschaften, die wir hier schon ausgearbeitet
haben
, herausfinden müssen. Das ist also, das ist erledigt. Wir müssen
die Auswahl zusammenstellen. Zusammen eine Auswahl mit
den Attributen, die wir bekommen haben. Und dann müssen wir
ein Wörterbuch erstellen und das Wörterbuch dann
zurückgeben. Wir müssen also die Auswahl treffen, aber wir müssen auch die Auswahl
herausfiltern. Übrigens, nur ein kurzer Pass. Wir, das ist ein guter Weg,
um mit dem Blockieren zu beginnen. Ihre Funktion entscheidet wie der Ablauf
Ihrer Funktion aussehen soll. Etwas anderes, das Ihnen
vielleicht auffällt, ist, dass
wir die Funktionen
sehr spezialisiert und
stark voneinander getrennt halten . Und das ist normalerweise eine gute
Möglichkeit, Ihren Code zu organisieren. Machen Sie Ihre Funktionen so einfach, fast
so spezifisch wie möglich. Ich sollte nicht unnötig sagen, sondern sie so
spezialisieren wie möglich. Also, falls Sie hier
diese Funktion hier oben bemerken , sie
bekommt nur Namespace. Es ist nichts anderes.
Diese Funktion hier gibt
Ihnen nur eine Liste von Attributen. Nun könnte man argumentieren
, dass meine erste Funktion, der Namespace ist function,
nicht nur Leerzeichen
enthält, sondern auch eine Auswahl erhält. Und ich würde sagen, eine gute Möglichkeit dies noch
einfacher
zu machen, besteht darin, dass Ashley der Funktion
die Auswahl
zur
Verfügung stellt, sodass die Funktion mit keiner Auswahl
funktionieren muss . Ich denke, das ist eigentlich ein guter Weg, um
diese Funktion zu verbessern. Aber mach dir darüber keine Sorgen, wir können
jetzt zurückkommen und es umgestalten. Dieser Refactor bedeutet, die Funktion
neu zu schreiben. Also Reorganisation oder Code, das ist
wichtig zu wissen. Es ist sehr gut,
im Voraus zu planen , wie Sie Ihren Code
und Ihre Funktionen
strukturieren möchten . Und versuche normalerweise, deinen Code zu
blockieren oder ihn so zu
organisieren, dass
deine Funktionen sehr spezialisiert sind,
wie ich bereits sagte, aber
du musst dir ihn so zu
organisieren, dass deine Funktionen sehr spezialisiert sind, auch keine Sorgen machen
oder versuchen,
sie beim ersten Mal perfekt zu machen. Weil du jederzeit
zurückkommen und
sie neu organisieren und verbessern kannst. Lehrer erzählte mir
an der Universität, dass eines
der großartigen Dinge
an der Arbeit mit 3D darin besteht, dass die
Farbe nie trocknet. Das
heißt, wenn man
mit traditionellen Medien arbeitet , z. B. Malerei, kann man einen Monat später nicht
wiederkommen und
etwas sehr Kleines reparieren ,
weil die Farbe bereits trocken
ist und es
schwieriger ist, das zu reparieren. Aber bei 3D trocknet die
Farbe nie. Sie können jederzeit Änderungen vornehmen. Und das Gleiche
gilt für Code, die Farbe und trocknet nie. Du kannst jederzeit zurückkommen
und deinen Code verbessern. Vor allem, wenn Sie am Anfang
lernen, sollte es
Ihr Ziel sein, etwas zu
erledigen, auch wenn es nicht großartig ist, auch wenn es nicht perfekt ist. Erledigen Sie es
einfach, Sie es
einfach, bringen Sie es zum Laufen und
kommen Sie dann zurück und reparieren Sie es. Das heißt nicht, dass Sie nicht planen
sollten. Du solltest vorausplanen, Stahl. Aber beschränke dich nicht, indem du etwas Perfektes
machst. Wie gesagt, ich kann das verbessern, indem
ich eine Auswahl
anbiete, aber ich lasse
es vorerst so. Und später vielleicht, vielleicht können wir
zurückkommen und es verbessern. Jedenfalls. Zurück zu unserer
Wörterbuchfunktion, wie filtern wir? Wir könnten die Auswahl hier bekommen, schon gefiltert und einfach
darauf vertrauen, dass das herausgefiltert ist. Oder wir könnten
die Auswahl und
die Namespaces abrufen und einfach
den Vornamensraum
für unsere Auswahl verwenden . Wir können also im Grunde
die Namespaces abrufen und den
ersten als Filter verwenden. Aber ich denke, wir könnten
das noch ein bisschen
einfacher machen , indem wir einen Namespace erhalten. Diese Funktion
erwartet also einen Namespace. Wir werden die
Auswahl treffen. Und dann
filtern wir die Auswahl nach dem angegebenen Namespace heraus .
Lass uns das ausprobieren. Vielleicht nicht das beste Design, aber probieren wir es aus. Erster Schritt,
lasst uns diese Wahl machen. Wir wissen bereits, wie
wir an die Auswahl kommen. Wir haben es hier oben geschafft. Also lass uns das noch einmal eingeben. Cmbs, ls-Auswahl entspricht wahr. Jetzt wissen wir, dass wir einen Check machen
wollen. Wenn nichts ausgewählt wurde, wir nichts
tun. Also werden wir tippen,
wenn nicht sogar Auswahl. Wir machen
etwas anderes bevor wir die
Länge der Auswahl überprüft haben. Du kannst das tun, wenn du willst, oder du kannst
dasselbe tun, was wir hier gemacht haben, einfach sagst: Wenn nicht
etwas, dann kehre zurück. Da wir jedoch ein Wörterbuch
erwarten, sollten wir unseren Rückgabetyp
konsistent lassen und
ein leeres Wörterbuch zurückgeben. Ein leeres Wörterbuch besteht
nur aus zwei geschweiften Klammern. Und das war's. Großartig. Wenn also nichts ausgewählt ist, können wir nichts tun. Lass uns weitermachen. Wir könnten etwas anderes sagen und dann deinen Code
innerhalb von else Bob fortsetzen, weil wir wissen, dass die Rückgabe das Ende der Funktion
ist. Wir brauchen
die Else-Aussage nicht wirklich. Wir können hier einfach weitermachen. Denn wenn wir
die if-Anweisung eingeben, wir eine Exit-Funktion zurück. Es wird also nicht darauf zugreifen, wer
nach dieser Rückkehr nichts erreichen wird . Das heißt, wir können
einfach
auf dieser Ebene der Einrückung weitermachen . Das nächste, was wir tun
müssen, ist, mit dieser Wahl zu arbeiten. Wir werden eine weitere
For-Schleife verwenden, um die Auswahl zu kontrollieren. Hier werden
wir nun den Rest unserer Schritte ausführen. Wir wissen, dass wir die Auswahl
filtern, Attribute
abrufen und ein Wörterbuch
erstellen müssen. Also werden wir das alles innerhalb unserer
For-Schleife machen. Wie filtern wir nach dem bereitgestellten Namespace heraus ? Da die Controller in
der Auswahl oder den Zeichenketten sind, haben
Zeichenketten eine
spezielle Funktion, die
prüft, ob etwas mit einer Teilzeichenfolge
beginnt, die eine andere Zeichenfolge ist, oder mit einer anderen Zeichenfolge endet. Lassen Sie mich Ihnen
hier in Maya ein Beispiel geben. Ich nehme diese
Zeichenfolge, z. B. lösche sie. ZB das hier möchte ich
überprüfen, ob das
beginnt, mit Minerva beginnt, das ist
der Namespace, den wir hier haben. Ich werde das einfach ausdrucken. Diese Funktion gibt einen booleschen Wert
zurück, entweder wahr oder falsch, der mit Minerva
beginnt. Ja, genau. Wir könnten auch sagen, dass
es
z.B. mit MI beginnt und das wird wahr sein. Aber wenn wir sagen wollten, fängt es mit LA
Example an, wird es nicht falsch sagen. Wir werden dies verwenden,
um unsere Namespaces zu filtern. Wenn die Kontrolle mit
dem Namespace beginnt , der
uns zur Verfügung gestellt wurde. Wir werden unseren Rest
unserer Logik darin anwenden. Das bedeutet, dass
alles, was das Wörterbuch erstellt, innerhalb
dieser if-Anweisung
geschehen muss . Nun, das ist kein Problem, aber ich bevorzuge normalerweise weniger Einrückungen. Ich finde das sauberer und
es ist normalerweise einfacher zu lesen. Wie vermeiden wir also
diese Einrückung? Es gibt ein Schlüsselwort, das für
For-Loops oder Loops im Allgemeinen funktioniert und das Continue heißt. Das heißt, wenn
Sie im Grunde sagen würden, wenn Sie diese For-Schleife eingeben, fahren Sie mit dem nächsten
Element in der Liste fort, in der ausgewählten Liste, was
bedeutet, dass alles, was nach
dem Continue ist ,
komplett ignoriert wird. Und das bedeutet auch, dass wir diese Logik umkehren
müssen. Wir sagen im Grunde, wenn nicht, beginnt die
Kontrolle mit
dem Namespace fahren
dann mit dem nächsten
Punkt in dieser Wahl fort. Und mach dir keine Sorgen darüber
, was unten passiert. Und das bedeutet, dass
wir einfach
weitermachen können , ohne innerhalb
dieser if-Aussage einen
Einzug machen zu müssen . Wir haben die Auswahl also bereits
herausgefiltert. Und lassen Sie mich, lassen Sie mich hier
einige Kommentare abgeben. Auswahl, Raum. Gute Auswahl, das ist großartig. Der nächste Schritt ist das
Abrufen der Attribute. Dieser sollte einfach sein. Dafür haben wir bereits eine
Funktion. Also können wir einfach diese Funktion
kopieren, den Namen dieser Funktion. Und wir können sagen
animiert, animierbar. Attribute sind Otter, die
die Adresse vom Knoten erhalten. Und dann ist das Wissen, mit dem wir
arbeiten, die Kontrolle. Dies im Auge zu behalten, falls das etwas verwirrend ist. Denken Sie daran, dass die
Auswahl Ihnen, der Auswahlbefehl, genau das gibt, den Namespace plus den
Namen des Steuerelements. Lass mich das kurz gruppieren. Wir werden drucken und einen Controller auswählen. Wann soll der Befehl ls gedruckt werden? Damit arbeiten wir innerhalb
der For-Schleife. Lassen Sie mich das
in Kreisdiagrammen
zusammenfassen, damit wir verfolgen können,
was hier passiert. Wir kennen dieses Steuerelement, jedes Steuerelement wird
so etwas wie dieser Namespace sein
, der Name des Controllers. Noch einmal,
deshalb fangen sie mit Scheck an, es wird funktionieren. Und jetzt erhalten wir
die Attribute von diesem Controller-Knoten, der
im Grunde so aussieht. Hervorragend. Jetzt
brauchen wir noch einen Scheck. Nun, lass mich
reinkommen und mir Attribute holen. Wir benötigen eine weitere Überprüfung, um festzustellen,
ob es keine Attribute
gibt, weil wir wissen, dass
wir
eine leere Liste erhalten, wenn es überhaupt keine Attribute gibt. Wir könnten das auf zwei Arten tun. Wir können sagen, wenn die Länge
der animierbaren Attribute Null
ist, können wir erneut
fortfahren. Also die gleiche, gleiche Idee wie oben. Wenn es überhaupt keine Attribute gibt, brechen
wir einfach die Häkchen in
der
For-Schleife auf und gehen zum nächsten
Element in der Auswahl. Um es einfach zu halten, werde
ich
die Länge der Liste nicht verwenden. Ich sage einfach,
wenn nicht numerische Attribute,
wenn da nichts drin ist,
überspringe alles, was danach kommt,
und fahre wenn nicht numerische Attribute, wenn da nichts drin ist,
überspringe alles, was danach kommt, mit dem nächsten
Element der Auswahl fort. Hervorragend, nun, der nächste Schritt ist das Zusammenstellen des Wörterbuchs. Und dafür müssen wir ein leeres Wörterbuch
initialisieren. Sonst haben wir nichts
zu bevölkern, oder? Ich nenne es
Pose Dict Dict-Wörterbuch. Und es wird ein
leeres Wörterbuch sein. Auch hier besteht ein
leeres Wörterbuch nur aus zwei geschweiften Klammern. Lassen Sie mich das Beispiel ansprechen. Wir mussten genau wissen, was
wir zu bauen versuchen. Was wir versuchen zu bauen,
ist so etwas. Im Grunde der Schlüssel, lassen Sie mich das hinter einen Kommentar
stellen. Der Schlüssel ist der
Name des Controllers ohne einen Namespace-Punkt,
der Name des Attributs. Und dann ist
der Wert dieses Schlüssels der Wert dieses Attributs. Und wieder arbeiten wir mit Controllern aus der Auswahl
, die so aussahen. Also lass uns weitermachen, lass uns das hier behalten , nur um es als Referenz zu
verwenden. Wir müssen zwar die Attribute, die wir hier haben
, überprüfen. Für Adder in animierbaren anderen ist das ein sehr langer Variablenname, aber er ist okay. Irgendwelche
medizinischen Fehler? Das erste, was wir
tun müssen, ist, uns diesen Namen zu besorgen. Wir müssen den Namen
des tatsächlichen Attributs entfernen, tut mir leid, den Namen
des Controllers getrennt vom Namespace. Nennen wir diesen Trollnamen. Wird durch einen Kontrollpunkt getrennt. Wie wir es zuvor getan haben. Wir können dieses Schild auf
der, auf dieser Säule machen. Also
werden wir es noch einmal aufteilen. Denken Sie daran, durch die Aufteilung
erhalten wir im Grunde das erste und das letzte Element,
genauso wie wir es
mit den Namespaces hier oben gemacht haben . Aber jetzt wollen wir, anstatt
den ersten Gegenstand zu bekommen, wir wollen, den letzten Artikel. Wir sagen, gib uns den letzten Gegenstand aus dieser Aufteilung. Das wird der Kontrollname sein. Dann wollen wir
den vollständigen Attributnamen zusammenstellen , der hier ist. Und das wird sein, nennen
wir es Vollotter. Jetzt wird im Grunde der
Name des Kontrollpunktes sein, der Name des Attributs. Also noch einmal, wir können
diese Formatierungsfunktion verwenden
, um diese Platzhalter
durch etwas anderes zu ersetzen. Wir werden
diese durch kontrollierte Namen ersetzen. Und das zweite werden die Attribute sein oder
das andere
aus den animierbaren
Attributen, die wir bereits haben. Hervorragend. Der nächste Teil wird also darin bestehen den Wert
aus dem Attribut abzurufen. Dafür verwenden wir
es jetzt wie bereits. Also werden wir get outer benutzen. Knospe. Denken Sie daran, wenn ich für eine Sekunde
zu meiner App zurückgehe, erwartet
Get Adder tatsächlich,
wo es ihm besser geht. Okay, lass es uns
einfach aufschreiben. Get out oder erwartet den vollständigen Namen des Steuerelements mit dem,
mit den Attributen. Natürlich, weil
es wissen muss, zu welchem Namespace das
Attribut gehört. Also müssen wir
diesen ganzen Namen
des Steuerelements plus
das Attribut konstruieren . Also müssen wir
das an Get Adder weitergeben. Lass uns weitermachen und das tun. Dass wir ein ähnliches
Muster wie beim Format machen. Aber jetzt müssen
wir in diesem Fall
die volle Kontrolle übergeben , die sich aus
der Auswahl ergibt die sich unter dieser
Variablen namens control befindet. Und dann sagen wir Punkt. Und dann die Attribute, oder? Gleiche Idee, Punktformat. Jetzt
verwenden wir das vollständige Steuerelement, nicht den Kontrollnamen
, den wir getrennt haben. Wir werden die
volle Kontrolle anwenden. Und wir werden
den Attribut-Editor verwenden, das ist das Attribut
, das wir haben. Der Wert wird
im Grunde so sein, dass, wenn
das ein bisschen
verwirrend ist, lass es mich trennen. Lassen Sie mich es in eine neue Variable einfügen. Nennen wir es
Kontrolle mit äußerster Gewalt. Und lass uns den
Namen herausfinden. Das war's. Lassen Sie uns den Wert
dieser Breite ermitteln, gerät außer Kontrolle. Weg. Da hast du es. Jetzt haben wir den Wert.
Jetzt müssen Sie nur
noch das eigentliche Wörterbuch
auffüllen. Denken Sie daran, dass unser Wörterbuch
Post Decked heißt. Also sagen wir Pose. Denken Sie daran, dass der Schlüssel jetzt das Standardattribut sein
wird, das Standardattribut sein
wird das ohne den Namespace
benannt ist. Also das wäre das hier. Wenn das etwas verwirrend ist, können
wir es
noch expliziter machen. Ohne NS, ohne Namespace. Dies ist der
lange Variablenname von Bread. Aber es ist, es ist okay
für diese Zwecke. Full Adder, ohne es mich
wirklich benennen zu lassen. Vollständiger Adder
Know-Namespace. Da hast du es. Es ist ein bisschen kürzer. Kenne den Namespace. Und der Wert für diesen Schlüssel wird der
Wert des Attributs sein. Lassen Sie uns das auch
etwas expliziter machen. Und nennen wir es oder
unterstreichen, unterstreichen Sie den Wert. Das wird der
Wert unseres t-Werts sein. Noch einmal, wir
bauen das genau hier. Das ist es, was diese Linie macht. Lassen Sie mich hier einen Kommentar hinzufügen. Wir sagen im Grunde, dass dies
die Kontrollbreite sein wird ,
die Attribute. Und der Schlüssel wird
der Attributwert sein. Hervorragend. Wir haben
unser Wörterbuch aufgefüllt. Lass mich das hier löschen, weil
wir es nicht mehr brauchen. Ich werde sagen,
ich werde hier
einen Kommentar hinzufügen , der nur sagt Wörterbuch
auffüllen
oder Wörterbuch erstellen. Und am Ende müssen wir nur noch das Wörterbuch
zurückgeben,
das Pose Score heißt . Gehen wir zurück zu
Maya und testen es. Bevor wir zurückgehen und unsere Docstrings
hinzufügen, lassen Sie mich den Namen
dieser Funktion kopieren. Gehen wir zurück zu Maya. Und ich habe hier eine Postüberweisung. Also lass uns das von Grund auf neu machen. Wichtige Beiträge
unterstreichen den Transfer. Nun, falls du Maya nicht
neu gestartet hast, hast du,
denk daran, dass meine
Art deine letzten
Eingaben, die du gemacht hast,
zwischenspeichert oder speichert. Wenn wir
das also aktualisieren oder neu laden möchten, können
wir nach der Übertragung neu laden sagen. Seitdem haben wir
einige Änderungen daran vorgenommen. Dann können wir Pose sagen, aber das ist das Wörterbuch. Also sagen wir,
pose decked entspricht pose, underscore, transfer,
transfer, dot, GET, post. Auch hier liegt der Name
der Variablen bei Ihnen. So könnte man es Pausen nennen. Du könntest es einfach
Beiträge nennen, wenn du willst. Das liegt an dir. Ich werde expliziter sein
und es Pose nennen. Lass uns, lass uns das ausdrucken. Beides unterstreicht. Lass es uns einfach ausführen und
sehen, was passiert. Oh, natürlich braucht es
genau ein Argument. Also werden wir
sagen, dass wir nach meinem nervösen Namen
filtern wollen . Also werden wir Nerva sagen. Und ich wähle einfach
ein Steuerelement auf diesem Rig aus. Und da hast du es. Das ist genau das, was
wir erwartet hatten. Wie Sie sehen, gibt es
in diesem Steuerelement
nur drei Attribute, die ich die Übersetzung ausgewählt habe,
und alle sind auf Null. Wir haben also einen kontrollierten Namen, übersetzen z, x und y, und alle sind auf Null. Lassen Sie uns nun
unsere Filterung testen. Also
werde ich noch einmal
diesen Controller auswählen und ich
werde ein paar
Controller in der anderen Anlage auswählen. Jetzt haben wir
einen Controller in Minerva
und einige in Severus ausgewählt . Aber denken Sie daran, dass wir nach Nerva
filtern, also
sollte das Ergebnis dasselbe sein. Wir bekommen also nur
die Controller , die zu diesem Namespace gehören. Und das ist natürlich agnostisch,
als ob das Ergebnis
ein Wörterbuch mit den Controllern und
den
Attributen dieses Controllers ist , tut mir leid, von diesem Zeichen, aber es ist unabhängig vom Namensraum dieses
Charakters. Denn jetzt können wir das
verwenden und
auf jeden anderen Charakter anwenden , der dieselben Attribute
hat. Wenn du das ein
bisschen netter sehen willst , werde ich das eigentlich nicht tun. Lassen Sie mich ein paar
weitere Controller auswählen , um ein größeres Wörterbuch zu erhalten. Da hast du es. Das ist also eine viel größere Kraft. Ich habe es dir schon einmal gezeigt. Die Druckfunktion
können wir von Pip print,
print, p, print sagen ,
heißt hübsch drucken. Wir können sagen drucken, posten. All dies reicht aus, ist
auf menschenlesbare Weise gedruckt. Was, oh Entschuldigung, ich habe es nicht importiert. Das macht es einfach
einfacher und schöner zu lesen. Das ist also das Wörterbuch, das
wir erwarten. Jetzt können wir das verwenden
und all
diese Werte auf
ein anderes Zeichen anwenden . Nun, nur um sicherzugehen, dass
das tatsächlich die
Werte erreicht, die uns wichtig sind. Ich werde es ändern
, damit es nicht nur Null ist. Da hast du es. Es gibt also ein paar
verschiedene Werte. Nun, wenn ich diesen
Code noch einmal ausführe, hast du es. Dies sind die Werte, die zu dieser
Kontrolle
gehören. Hervorragend. Der nächste Schritt besteht darin,
diesen Beitrag auf den
anderen Charakter anzuwenden . Aber bevor wir das tun, sollten wir
die Doc-Strings nicht vergessen. Erneut dreifach,
doppelte Codes, kleine Beschreibung, Pose zu Pose, Wörterbuch
ohne Namespaces. Der Namespace, von dem
wir wissen, dass wir eine Zeichenfolge erwarten. Also gebe ich eine Zeichenfolge und eine kleine Beschreibung dessen ein, was dieses Argument tatsächlich tut. Filtert
die Auswahl nach diesem Namespace. Hervorragend. Und dann wird
der Rückgabewert
natürlich ein Wörterbuch sein. Belassen wir es einfach
dabei. Nun, ich habe oben eine Beschreibung hinzugefügt, also lasst uns konsistent sein,
es sei denn, das Wörterbuch der Steuerelemente mit Attributen und
ihren Werten. Hervorragend.
25. Die Pose anwenden: Okay, wir sind also fast fertig mit der Funktion
nur für Ihre beiden. Jetzt können wir
eine Pose in Form
eines Wörterbuchs speichern . Der nächste Schritt besteht darin, diese Pose
anzuwenden. Lassen Sie uns schnell sehen
, was das bedeuten würde. Wenn wir das manuell machen würden, lassen Sie mich mein Ausgabefenster leeren. Ich wähle den
Controller, diese Bruststeuerung. Ich werde noch einmal nur
sehen, wie das
Posenwörterbuch aussieht. Wieder haben wir die
Attribute mit den Controllern, mit den Attributen
und den Werten. Was müssten wir also tun, um das auf diesen Charakter anzuwenden? Nun, wirklich, alles, was wir tun
müssen, wenn wir
das manuell machen würden ,
wäre das Attribut setzen. Also Cmd S, lass uns Adder setzen. Wir wissen, dass wir es wollen. Nehmen wir an, wir legen den Rotationswert fest und
müssen die tatsächlichen Werte festlegen. Das ist also dieser Wert, den
wir hier haben. Normalerweise sage ich eine
Sache, die
dem Befehl mitteilt , welcher
Namespace das zutrifft. Also alles was wir tun müssten, was ist der neue Namespace? Es zielt auf den Namespace ab. Und lassen Sie mich
das ein bisschen
kleiner machen und
diese Codezeile ausführen. Und da hast du es. Wir wenden
diesen Wert auf die Rotation an. Lassen Sie mich
etwas Extremeres anwenden, eine etwas größere Änderung
, die um y gedreht wird. Los
geht's. Jetzt wenden wir dieses Volumen an. Hervorragend. Das ist also im Grunde
das, was wir tun werden. Nimm die Attribute aus
dem Wörterbuch der Pose. Wir haben den Namespace darauf gespeichert
und dann den Wert angewendet. Gehen wir zu PyCharm
und beginnen mit dem Mapping, wobei wir unsere nächste Funktion blockieren. Nennen wir es Applied Posts. Wir wissen, dass
wir,
um eine Pose spielen zu können, die tatsächlichen Posenwerte kennen müssen die tatsächlichen Posenwerte , die in
Form eines Wörterbuchs vorliegen. Nennen wir es also Post Dict, um die Konsistenz mit den Namen zu wahren. Und wir wissen, wann
es den Ziel-Namespace nicht kennen musste. Sie können diesen
Ziel-Namespace oder einfach Ziele benennen. Aber ich denke, Namespace
an sich macht Sinn. Und dann können wir im Docstring ein bisschen mehr darüber
spezifizieren, was das macht. Hervorragend. Fangen wir also an,
die Funktion zu blockieren. Wir wissen, dass wir
die, die Attributnamen benötigen. Wir wissen, dass wir
den Namespace hinzufügen müssen. Und dann müssen
wir einfach das Attribut setzen. Aber jetzt
könnte es hier ein Problem geben. Eine Sekunde und versuche
zu sehen, ob dir einfällt, was hier schief
gehen könnte. Was könnte ein potenzieller Bug sein? Was passiert, wenn
die Charaktere nicht genau gleich sind oder
die Rasse nicht dieselbe ist. In meinem Beispiel weiß ich, dass diese beiden genau
gleich sind , weil ich
dieselbe Rate verwendet habe. Aber jetzt stell dir vor
,
mein Quellcharakter
hat, sagen wir mal , eine zusätzliche Requisite. Nehmen wir an, sie hat einen Hut und wir wählen den Hut aus. Und wir haben versucht, diesen
Wert auf den anderen Charakter anzuwenden. Und die anderen Charaktere, die den Hut
hatten, der versagte, das würde zu einem Fehler führen,
weil mein, ich würde sagen ,
hey, dieser, dieser Controller oder
dieses Objekt nicht existiert. Warum haben sie
das Attribut gesperrt? ZB wenn es gesperrt ist, können
wir es einstellen. Maya wird uns also auch einen Fehler
geben. Das bedeutet, dass wir ein
wenig auf Fehler überprüfen müssen. Schreiben wir das einfach rein, nur Fehlerüberprüfung oder Fehlerüberprüfung. Und wir werden gleich über
die Schecks nachdenken. Lassen Sie uns zuerst mit dem Schreiben der
Basisfunktionalität beginnen. Als erstes wollen
wir die Attributnamen abrufen. Und das bedeutet, dass wir die Schlüssel im Wörterbuch
wiederholen müssen , die
im Grunde
den Namen dieser Attribute repräsentieren . Sagen wir also,
nennen wir sie ihren Namen, jedes für ein Akronym
im Diktat nach dem Unterstreichen. Jetzt
haben Wörterbücher eine Funktion. Kalte Schlüssel. Keys gibt dir eine Liste der
Schlüssel im Wörterbuch. Lass mich dir das ganz schnell zeigen. In meinem, ich, lösche das hier und lass uns ein neues
Wörterbuch zum Spielen besorgen. Ich wähle
diesen Controller aus. Wir wissen, dass dieser Controller
nur drei Attribute hat. Es wird also ein kleines Wörterbuch sein
. Und ich werde das Wörterbuch hübsch
ausdrucken. Da hast du es. Wenn ich also die Diktattasten nach
dem Unterstreichen drucken würde, wie Sie sehen können, erhalte ich
eine Liste dieser Schlüssel, die im Grunde
nur der Controller ist. Die Controller-Namen
mit den Attributen. Es gibt eine weitere
Funktion namens Werte, die mir, wie Sie sich wahrscheinlich vorstellen können, einfach eine
Liste dieser Werte gibt. Jetzt gibt es noch
eine,
die Items heißt und
mir zumindest die Schüler gibt. Nun, wie ich bereits sagte, ist
ein Pol an Pol wie eine Liste, die Sie nicht ändern können und sie wird mit der
regulären Klammer erstellt. Und Wörterbucheinträge geben Ihnen
im Grunde eine Liste mit den Paaren aus Schlüssel- und Wertpaar für jedes
Element im Wörterbuch. Aber vorerst wollen wir Schlüssel
verwenden, um all diese Kontrollnamen
mit ihren Attributen zu wiederholen. Schieb die Schlüsselliste über. Lassen Sie uns den Wert
für diesen Schlüssel ermitteln. Denken Sie daran, um einen Wert zu erhalten, verwenden
Sie ein Wörterbuch und Sie
erhalten den Wert aus einem Schlüssel. Also
eckige Klammern öffnen und schließen. Und wir werden den anderen Namen verwenden, was der Schlüssel ist, den
wir uns ansehen. Das wird also der
Wert des Attributs sein. Nennen wir das also tatsächlich
äußeren Wert. Da hast du es. Wir bekommen den Schlüssel und
wir bekommen den Wert. Denken Sie jetzt daran, dass wir
den Namespace und
den Attributnamen zusammenstellen
müssen . Nennen wir diese vollständige Adder-Name. Und das wird der Namespace sein,
gefolgt von einem Doppelpunkt, denn das ist die
Konvention in Maya. Und wir werden das Punktformat verwenden. Es wird ein Namespace sein. Und dann wird der zweite
Platzhalter durch den Namen
ersetzt. Da hast du es. Als Nächstes
haben wir das bereits getan. Wir müssen einen Namespace hinzufügen. Also lass mich, lass mich das hierher
verschieben. Ähm, übrigens, ganz schnell, falls Sie sich fragen, wie ich mich
so schnell zwischen den Zeilen bewege, es gibt ein paar sogenannte
Tasten, die überall in Windows
funktionieren . Wenn Sie die Strg-Taste drücken, können
Sie zwischen Wörtern wechseln. Es sollte
Control und Shift drücken. Das kannst du aber machen, aber gleichzeitig
hervorheben. Und wenn Sie Tabulatortaste verwenden, werden
Sie einrücken. Aber wenn Sie Shift Tab verwenden, werden
Sie das Gegenteil tun. Es wird umgekehrt gehen. So kann ich mich also so schnell bewegen. Aber das sind nur Hotkeys. Mach dir nicht zu viele Sorgen um sie. Es ist
jedoch sehr praktisch,
sodass Sie
etwas schneller tippen können. Aber wie dem auch sei, zurück zu
unserem Code, wir haben Spitznamen. Wir haben den Namensraum hinzugefügt, und jetzt müssen wir das Attribut
festlegen. Lass uns das sagen, lass uns das Attribut
setzen. Das Attribut, das wir kennen
, müssen wir CMBS-Punktsatz machen, Adder. Und dann geben wir
ihren vollständigen Namen des Attributs,
den Fehlernamen, ein. Und der Wert, den
wir setzen wollen, der ist unser Wert. Und da hast du es. Dort wendest du
deinen Beitrag im Grunde auf deinen neuen Charakter an. Jetzt sind wir, wir vermissen
die Fehlerprüfungen. Aber lassen Sie uns das vorerst testen, um zu
sehen, was passiert, um zu sehen, ob es tatsächlich funktioniert. Gehen wir zurück zu Maya, das raus. Da ich einige
Änderungen am Code vorgenommen
habe, werde ich das Modul neu laden. Da hast du es. Lass uns einen neuen Controller verwenden. Wir haben diese
Schachsteuerung zu oft benutzt. Ich werde diesen Arm benutzen, diese Ellbogenkontrolle genau hier. Wenden wir einfach
einige Werte darauf an. Lass uns das Post-Wörterbuch hochgehen. Wir werden Beiträge für
Minerva von der
ausgewählten Steuerung abrufen . Lass es uns einfach ausdrucken
, um zu sehen, was wir haben. Da haben wir es. Das ist die Pose , die wir zu übertragen versuchen. Wenden wir diese Pose also
auf den anderen Charakter an. Unterstrich posten, übertragen. Pose anwenden. Und wir wissen, dass wir
ein Post-Wörterbuch
und einen Namespace erwarten . Lassen Sie uns ein Posenwörterbuch bereitstellen, das
wir bereits erstellt haben. Und der Namespace
zielt auf den Weltraum ab
, in diesem
Fall auf Severus. Da. Nun, das ist etwas
anderes, nach dem wir suchen könnten. Wenn der Namespace überhaupt gültig ist. Was wäre, wenn ich beispielsweise
Run
bereitstellen der in der Szene nicht existiert, also könnten diese fehlschlagen. Aber vielleicht können wir das direkt
in den Kontrollen überprüfen. Also lasst uns das erstmal
testen. Lassen Sie mich den Arm dieses
anderen Charakters zeigen, damit wir Pose anwenden
können.
Dieser ganze Code. Und da hast du es. Wie Sie sehen,
wenden wir die Werte an. In diesem Fall ist es nur Rotation, aber das ist in Ordnung, weil
es nur eine Ellbogensteuerung ist. Also jetzt funktioniert das. Jetzt könntest du hier aufhören
, weil es schon funktioniert. Aber wie gesagt, stell dir vor,
diese Attribute wären gesperrt oder existierten nicht, oder vielleicht hatte
der Charakter diese Kontrolle nicht
. Wir müssen diese
Art der Überprüfung durchführen. Lassen Sie uns also
diese Art von Fehlern simulieren, um zu sehen, wie wir diese Art von Problemen verhindern
oder überprüfen und
antizipieren können . Ich habe weitergemacht und diesem Charakter
eine Requisite hinzugefügt. Ich habe die
Basisdatei für das Rig hinzugefügt. Was wir jetzt tun müssen,
ist diese Referenz neu zu laden. Was, wie Sie bereits wissen, das Schöne an Referenzen ist. Sie können Änderungen am Rig selbst und an allem, was
auf dieses Rig verweist, vornehmen. Wir werden diese Updates bekommen, was sehr nett ist. Lassen Sie mich diese Referenz erneut laden. Und wir sollten gleich eine neue Requisite,
einen neuen Hut,
hier sehen . Da hast du es. Wir haben die Requisite. Also jetzt eindeutig das, was dieser andere Charakter
nicht hat. Dieselbe Kontrolle. Es gibt einen neuen Controller namens Hat unter dem Namespace nervosa. Versuchen wir nun,
diese
Controller-Pose auf die anderen Charaktere zu übertragen Controller-Pose auf die anderen Charaktere zu genau wie wir es mit dem Arm getan haben. Und schauen wir mal, was passiert. Lassen Sie mich hier mehr Platz schaffen. Also lass uns ein neues
Beitragswörterbuch besorgen. Und jetzt ist das der Hut. Versuchen wir nun,
das auf Severus anzuwenden. Da hast du es. Das ist der Fehler, den
wir erwarten. Der Fehler ist, dass kein
Objekt mit dem Namen übereinstimmt, mehrere Stunden Hut, Punkt rotieren. Das liegt daran, dass
nicht jeder einen Kopf hat. Lassen Sie uns also versuchen, mit diesen Arten von Fehlern
umzugehen. Als Erstes müssen
Sie überprüfen, ob der Controller selbst
existiert, oder? Aber es gibt auch andere Arten
von Kontrollen, die wir durchführen könnten. Lassen Sie uns
das also planen. Lass es uns einfach hier draußen blockieren. Prüfen Sie also, ob Objekt,
Objekt, Zysten sind. Prüfen Sie, ob das Attribut trennbar
ist. Wir könnten direkt überprüfen,
ob es nicht gesperrt ist, wir könnten überprüfen, ob
es animierbar ist. Aber ich denke, wenn wir überprüfen
, ob es einstellbar ist, ist
das mehr als genug für das,
was wir hier tun müssen. Aber bevor wir überhaupt überprüfen, ob
ein Attribut gesetzt werden kann, müssen
wir überprüfen, ob das
Attribut überhaupt existiert. Nehmen wir also an, das
Prüfattribut existiert. In Ordnung? ist
es also sehr einfach zu überprüfen, ob ein
Objekt existiert In Maya ist
es also sehr einfach zu überprüfen, ob ein
Objekt existiert. Fangen wir damit an.
In dieser Bibliothek gibt es eine Funktion namens
Cmd S dot OBJ exists. Sehr einfach. Und warum Sie das tun, ist
den Namen dieses Objekts anzugeben. Schauen wir uns also an, ob Severus
einen Spoiler-Alarm hatte. Wir wissen, dass es das nicht tut, es tut es nicht. Aber lassen Sie uns das
Ergebnis dieser Funktionsschrauben ausdrucken. Nun, wenn wir das mit Minerva machen, ist die Antwort ja, ausgezeichnet. Also können wir das machen. Aber dafür brauchen wir
den Namen des Objekts selbst ohne die Attribute, oder? Nun, das ist es nicht. Das Objekt ist, genauer gesagt
ist es der Knoten. Lass uns weitermachen und
den Knoten holen. Jetzt wissen wir, dass wir hier den vollständigen
Attributnamen haben. Also machen wir das im Grunde ohne den Namen des eigentlichen
Attributs am Ende
, der durch einen Kanal getrennt ist. Noch einmal, nur als Referenz, lassen Sie uns das einbringen. Das ist im Grunde das, womit
wir arbeiten. Ziehen Sie ihren Namen heraus,
der im
Grunde genommen der Namespace plus
ein Controller-Punktattribut ist. Also wollen wir
den ersten Teil davon extrahieren. Wir können das ganz einfach
mit unserem Freund Dot Split machen. Wie wir es schon
mehrfach getan haben. Wir können sagen, dass der Knoten den vollständigen äußeren Namen haben wird
, geteilt, durch den Punkt getrennt. Und wir wissen, dass dies
die Liste in zwei Teile aufteilen wird. Also wollen wir
den ersten Teil bekommen, nämlich den Namespace plus Day. Ich kontrolliere den Namen
und das ist der Knoten. Das erste Element in der Liste
wird also die Indexnummer Null sein. Das ist also der Name des Knotens. Wir könnten sagen, wenn Cmd
S dot OBJ existiert,
überprüfen Sie, ob es existiert,
die wissen, dass es existiert. Ashley, tut mir leid, wir wollten das Gegenteil
überprüfen, oder? Nun ja, wir könnten es
machen, je nachdem, wie Sie
möchten, dass die Logik funktioniert. Wenn Sie nur diese Logik anwenden oder
das Attribut setzen möchten ,
wenn das Objekt existiert, könnten
wir einfach Dentin eingeben
und das wird funktionieren. Wenn das Objekt existiert, legen
Sie das Attribut fest. Lass uns das vorerst machen. Lass mich hier einen Kommentar schreiben. Übrigens, falls Sie sich
auch fragen wie ich
ans Ende der Zeile komme, verwende
ich das N E, das Sie
auf Ihrer Tastatur finden. Und die Home-Taste bringt Sie zum Anfang einer Zeile. Wenn Sie das zusammen
mit der Umschalttaste verwenden, können
Sie
das gesamte Licht auswählen. Es ist sehr gesund. Also werden wir sagen,
dass wir hier nachschauen. Hervorragend. Wir prüfen, ob
das Objekt existiert, ob es das Attribut setzt Lassen Sie uns das testen. Ich werde
diese Zeile hier entfernen. Und ich werde
diese beiden zusätzlichen Schecks
hierher verschieben , weil das immer noch unsere Aufgabe ist. Es ist vorerst so etwas wie unsere
To-Do-Liste. Also lasst uns das zuerst testen
. Noch einmal, weil ich
einige Änderungen vorgenommen habe. Ich lade nach der Überweisung neu. Stellen wir sicher, dass es
ausgewählt ist und dass es so ist. Da hast du es. nichts passiert, was genau das
ist, was wir wollen, weil die einzige Kontrolle wir ausgewählt haben, nicht
wirklich existiert. Versuchen wir es nun
mit zwei Controllern. Es ist ein bisschen
komplizierter. Lass uns den Arm bewegen. Wählen wir den Hut und wenden wir den
Beitrag erneut an. Jetzt
wurde nur der Arm angelegt und der Griff wurde ignoriert
, weil er nicht existiert. Hervorragend. Wie überprüfen wir, ob ein
Attribut tatsächlich existiert? Weil das Objekt möglicherweise
existiert, während wir es hier überprüfen, aber es hat möglicherweise nicht das
Attribut, das wir festlegen möchten. Wie üblich
hat die Symbolbibliothek einen Befehl oder eine Funktion
, die uns dabei helfen kann. Es heißt Attributabfrage. Sehen wir uns also anhand der Dokumentation an, wie man es
benutzt. Gehen wir zur Attributabfrage
im Dokumentationsstil. Da hast du es. In der Beschreibung heißt
es also, dass
Informationen über die
Konfiguration eines Attributs zurückgegeben werden. Es scheint, als ob wir das tun wollen. Schauen wir uns
die Beispiele unten an. Ermitteln Sie den versteckten Status
des Selektor-Attributs.
Das habe ich festgestellt. Okay, es sieht also so aus, als ob Sie das
gewünschte
Attribut übergeben und dann feststellen, ob
ein Attribut heilbar ist. Aber das könnte
tatsächlich etwas sein, das wir tun wollen. Potenziell. Sie übergeben den
Namen des Knotens und dann geben Sie die gewünschten
Attribute ein. Es ist also ein bisschen falsch von
der Art und Weise, wie Get out or
funktioniert, was bedauerlich ist. Ich wünschte, ich würde das ein
bisschen konsistenter machen. Aber denken Sie daran
, dass get out or it den vollständigen Namen
des Attributs
erhält,
das ist der
Controller-Punkt des Attributs. In diesem Fall
müssen wir es aufteilen. Wir müssen den Knoten oder
den Controller und das
Attribut getrennt abrufen den Controller und das
Attribut getrennt und dann nach
dem suchen, was Sie testen oder das Attribut
einchecken
möchten. In diesem Fall
weiß ich also, dass es eine Flagge oder
ein Argument gibt , um zu sehen, ob
ein Attribut existiert. Es sollte existieren. Ja, da hast du es. Es ist ein boolesches Attribut, das true zurückgibt, wenn
das Attribut existiert, okay, also
müssen wir im Grunde den einzigen Attributnamen abrufen. Dann übergeben wir den
Knoten, den wir
abrufen möchten, um das Attribut einzuchecken. Toll, also was auch immer
das Huhn bedeutet, indem wir uns
dieses Wochenende teilen, und jetzt müssen wir
nur noch den Namen des Attributs herausfinden. Nennen wir es den Kurznamen
des Attributs und nicht den vollständigen Namen
des Attributs. Wir wissen, dass wir, wenn
wir den
vollständigen Namen der Natter aufteilen , tatsächlich beides
bekommen, oder? Wir teilen nach Punkten,
was bedeutet, dass wir
in diesem Teil arbeiten. Und wir
bekommen auch diesen Teil, der der Kurzname des
Attributs ist, das wir wollen. Also könnten wir das einfach machen. äußere Kurzname entspricht Kopie, dies entspricht dieser Aufteilung. Aber jetzt wollen
wir, anstatt
den ersten Artikel zu bekommen, den zweiten Artikel bekommen. Das ist also die Notiz und das ist der Kurzname
des Attributs. Aber es gibt einen, es gibt einen
besseren Weg, das zu tun. Da wir wissen, dass wir
eine Liste mit zwei Elementen erhalten, können
Sie
diese beiden Elemente aus
der Liste tatsächlich zwei Variablen
gleichzeitig in einer einzigen Zeile in Python zuweisen der Liste tatsächlich zwei Variablen
gleichzeitig .
Sie tun das, indem Sie dies tun. äußere Kurzname entspricht der Liste, die wir aus dem Split
erhalten haben. Schauen wir uns also an, wie
das in
Maya funktioniert , falls es ein
bisschen verwirrend ist. Also lass uns hierher gehen. Nehmen wir, nun, folgen wir
dem Beispiel, das wir verwenden. Nehmen wir diesen vollständigen
Namen des Attributs. Lassen Sie uns einen neuen Python-Tab verwenden. Wir wissen, dass wir diesen Punkt durch
den Namen der Punktteilung teilen wollen . Nennen wir das, nennen wir es eigentlich, nennen
wir es, es ist eine geteilte Liste. Lassen Sie uns die Punkteliste mit
geteilten Zellen drucken. Da hast du es. Sie
erhalten also die beiden Artikel. Wie gesagt, Sie
können das
Variablen zuweisen, indem Sie sagen,
dass der erste Knoten der Knoten ist, und der zweite ist das tatsächliche Attribut
entspricht
der Split-Liste. Und jetzt können Sie den Knoten drucken. Sie vervollständigen das Druckattribut C. Da haben Sie es. Das funktioniert jetzt, weil wir wissen, dass die Liste zwei Elemente
enthält. Wenn die Liste mehr Artikel hätte. Und das ist zum Beispiel, lassen Sie uns die geteilte Liste
durch eine eigene Liste
ersetzen . Sie sagen nur 12.3. Wenn wir das jetzt ausführen, hat
die Liste drei Elemente. Wir versuchen,
einem 22-Variablen-Thread
zwei Variablen zuzuweisen . Was wir haben werden
,
weil es zu
viele Werte zum Entpacken gibt. Das funktioniert nur, weil wir wissen, dass die Aufteilung
uns zwei Gegenstände gibt. Großartig. Lassen Sie uns weitermachen und
überprüfen, ob das Attribut existiert. Lassen Sie mich diese
Zeile hier
zusammenfassen, wo wir sie brauchen. Fangen wir an, das abzufragen. Das ist die
Existenz der Attribute. Also sagen wir, wenn CMBS
Punkt ist, lassen Sie mich es eingeben. Attribut, Abfrage, Klammern öffnen
und schließen. Denken Sie jetzt daran, dass wir
den Kurznamen
der Attribute übergeben müssen. Und wieder folgen wir
der Dokumentation hier. Im Folgenden werden
der Name des
Attributs und dann der Knoten angezeigt . Wenn wir nun sehen wollen, was
diese Notenargumente bewirken, lassen Sie mich danach suchen. Lass uns loslegen. Notieren Sie sich den Namen der Person. Verwenden Sie alle Attribute
aus dem Knoten mit dem Namen name. Okay, das ist ein
bisschen irreführend. Es gibt keinen Knoten mit dem Namen Name. Und es sagt
uns, dass es
einen Wert vom Typ name benötigt , der nicht existiert. Das bedeutet eigentlich eine Zeichenfolge. Es ist also ein bisschen
schade, dass
die Dokumentation in meinem
S manchmal nicht sehr konsistent ist. Es gibt einige fundierte Vermutungen , dass man
manchmal so vorgehen muss. In diesem Fall
müssen die Namen nur erraten oder annehmen
, dass es sich um eine Zeichenfolge handelt. Trotzdem
ist
die Dokumentation immer noch äußerst wertvoll, weshalb ich immer wieder darauf
zurückkomme. Nehmen wir an, Knoten entspricht dem Namen. Nein, tut mir leid, es tut uns leid,
Knoten ist gleich Knoten, was der Knoten ist, den
wir durch das Teilen erhalten haben. Und dann müssen wir
überprüfen, ob
das Attribut existiert,
existiert gleich wahr ist existiert gleich wahr oder ob die Existenz
des Attributs abgefragt wird. Stimmt es? Da hast du es. Rufen Sie Long an, um
die IF-Anweisung zu beenden. Und jetzt rücken wir das ein. Was Ihnen
wahrscheinlich auffällt
, ist , dass die Einbuchtung zu groß
wird. Wir haben 12 Einrückungsebenen
und wir werden
eine weitere haben , weil wir
überprüfen müssen , ob das Attribut trennbar
ist. Lass uns
das aufräumen , bevor wir den letzten Check
machen. Etwas, das man tun kann,
anstatt Einrückungen zu machen. Wir haben eine Nachahmung
von hier vermieden, indem das Schlüsselwort continue, continue verwendet haben. könnten wir machen. Wir könnten
sagen, ob kein Objekt existiert. Fahren Sie fort. Und dann
lassen Sie mich das rückgängig machen. Noch einmal das Gleiche. Wenn kein Attribut vorhanden ist, können wir einfach Weiter sagen. Und weil wir überspringen, verwenden
wir weiter,
um Einrückungen zu vermeiden. Wir können einfach das gleiche Level hinzufügen wie alles andere
, was sie angeben. Und jetzt machen wir
unseren letzten Check. Wir müssen überprüfen, ob ein
Attribut einstellbar ist. Nun
denken Sie vielleicht, dass Sie diese Informationen
aus der Attributabfrage
kennen können . Das ist eine sehr gute Vermutung. Leider
ist das nicht der Fall. Um zu sehen, ob ein Attribut von all gesetzt
ist, müssen
wir die Funktion set verwenden, tut mir leid, sie bekommen die Adder-Funktion. Schauen wir uns
das in der Dokumentation an. Geh raus oder du kannst überprüfen,
ob etwas skalierbar ist. Sie können auch überprüfen, ob
etwas einstellbar ist. Und wieder wird dadurch ein boolescher Wert oder
ein boolescher Wert zurückgegeben boolescher Wert oder
ein boolescher Wert , den wir in diesem Fall als Boolean handeln
können. Also lasst uns weitermachen und das tun. Lass uns raus oder du willst im Grunde diesen
get-Adder-Attributnamen. Aber jetzt benötigen
wir im Gegensatz zur
Attributabfragefunktion tatsächlich den vollständigen
Namen des Attributs. Auch hier
sind diese Funktionen manchmal nicht sehr konsistent
miteinander. Aber das ist okay. Sie müssen sich nur auf
die Dokumentation
oder Ihre Erfahrung verlassen . Je mehr Sie diese Funktionen verwenden, desto besser wissen Sie,
wie Sie sie verwenden. Und es hört auf, ein Problem zu sein. Es ist nie wirklich
ein Problem. Großartig. Also lass uns das machen. Nehmen wir an, Get out oder den Namen des Attributs und
setzen Sie double equals true, um zu überprüfen, ob unser
Attribut trennbar ist. Also wenn CMBS nicht addiert wird. Denken Sie jetzt daran,
dass wir in diesem Fall den vollständigen Namen
des Attributs benötigen. Es wird also der vollständige Name stehen. Homer, einstellbar ist gleich wahr. Wenn nicht,
ist das Attribut sättigbar Wenn das Attribut
also nicht trennbar
ist, wollen
wir fortfahren. Wir wollen also nicht, wir wollen im Grunde
alles überspringen , was
davor oder
danach kommt , und zum
nächsten Wert in der Schleife übergehen. Toll, also lasst uns das
testen und sehen, ob
es tatsächlich funktioniert. Einmal und lass mich
zurück zu meinem Tab gehen. Lassen Sie mich, da wir
einige Änderungen vorgenommen haben, werde
ich mein Modul neu laden. Es ist großartig. Und
ich werde wieder
einige Werte auf den Arm anwenden. Noch einmal. Holen Sie sich also die Pose, das
Posenwörterbuch, und wenden Sie diese Pose
auf unsere Zielkarte an. Da hast du es. Nur der Arm wurde
angelegt und der hatte wurde ignoriert, weil er
natürlich nicht existiert. Das ist großartig. Nun, das ist in Ordnung, das funktioniert, aber es gibt noch eine weitere
Möglichkeit,
diesen Code zu komprimieren und ihn
ein bisschen sauberer zu machen. Lassen Sie mich Ihnen zeigen, wie Sie das mit
dem OR-Operator machen können. Betreiber. Der Operator ermöglicht es Ihnen
grundsätzlich , diese Art von Prüfungen zu verketten. Wir können also sagen, ob kein
Objekt existiert oder nicht, Attributabfrage existiert oder
nicht, das Attribut ist einstellbar. Nun wurde daraus
eine sehr lange Warteschlange, was vielleicht auch nicht großartig ist. Aber lassen Sie mich Ihnen zeigen,
wie es funktioniert. Wir sagen also im Grunde, wenn das Objekt nicht
existiert, fahren Sie fort. Wenn diese Bedingung also erfüllt ist, geben
wir im Grunde
die if-Anweisung ein. Aber nehmen wir an, das
Objekt ist sets exist. Das Objekt existiert also, großartig. Oder wenn
das Attribut nicht existiert. Dann tu das. Nehmen wir also an, dass
das Objekt existiert und das Attribut existiert. Dann gehen wir los, wir machen unseren nächsten Check im
nächsten oder was wäre, oder wenn das Attribut nicht
trennbar ist, dann fahren wir fort. Dies ist dasselbe wie bei unseren
dreistufigen Checks, jedoch alle in einer Zeile. Nun gibt es eine andere Version davon,
die das Gegenteil ist, und Sie können also sagen, wenn wir die Logik umkehren könnten, wollte
ich Ihnen nur diese beiden
zeigen ,
damit Sie Ihre Optionen kennen. Wir könnten die Logik der Listen umkehren. Objekt ist vorhanden. Ich werde nicht, ich werde eigentlich, ich werde
den richtigen Code eingeben. Wir können also sagen, ob
Objekt zwei existiert und das Attribut existiert, stellen
wir uns z. B. vor, dass
das alle Prüfungen sind, die wir durchführen möchten. Wir können sagen, ob das Objekt existiert
und das Attribut existiert, dann können wir unseren
Set-Adder durchführen, z. B. die Logik umkehren,
indem wir den AND-Operator verwenden. Aber wir versuchen,
Einrückungen zu vermeiden. Also machen wir das Gegenteil,
indem wir den OR-Operator verwenden. Wenn das Objekt nicht existiert oder wenn das Attribut nicht
existiert oder wenn das Attribut nicht trennbar
ist, überspringen wir das Setzen
des Attributs und fahren mit
dem nächsten Element in der Schleife fort . Okay, um diese
Funktion zu beenden, müssen wir sie reinigen. Räum es auf. Wir wissen, dass wir diese Leitung nicht
brauchen. Dieser ist gerade in der
Entwicklung, um uns zu helfen. Wir werden
diese Kommentare hier entfernen,
aber wir werden hier einen
Kommentar mit der Aufschrift „Scheck“ hinterlassen. Nennen Sie es einfach Attributprüfungen. Und dann setzen wir das Attribut. Hervorragend. Bevor wir die Doc-Strings
unserer Freunde vergessen , ist das
sehr wichtig. Lassen Sie uns also den Docstring setzen, sagen wir, die angegebene Pose anwenden, um ihm den Namespace
bereitzustellen, z. B. wissen wir
jetzt, dass die Pose
voraussichtlich ein Wörterbuch ist. Wörterbuch mit
Posenwerten oder Posendaten, sagen
wir Posendaten, das sind die Schlüssel und die Werte
und der Namespace. Wir wissen, dass es eine Schnur ist. Aber lassen Sie uns hier tatsächlich
explizit sein und den
Ziel-Namespace angeben , auf den wir uns beziehen möchten. Vielleicht ein bisschen wortreich, aber Sie können
diesen Satz gerne zusammenfassen, wenn Sie möchten. Und in diesem Fall geben wir
nichts zurück. Also werde ich diese Zeile
entfernen. Und das ist genug. Perfekt. Unsere Funktion ist nett und aufgeräumt. Es ist sehr klein, was großartig ist. Ich kann, wie gesagt, kleine und spezialisierte Funktionen sind normalerweise der richtige Weg. Lass uns das testen. Bevor wir mit dem Zusammenstellen
all dieser Dinge fortfahren. Ich werde den Druck entfernen. Nochmals, ich werde
mein Sorry neu laden. Es ist nicht das, was ich tun wollte. Wir werden mein Modul neu laden. Und ich werde mir ein Wörterbuch
gegen das Wort holen. Lass uns dieses Mal noch ein paar
Controller machen. Also das Gegenteil, der Arm. Lass uns die Hüften machen, z. B. Hüfte, Brust und Arm. Und ich habe noch ein paar
Controller ausgewählt, aber das ist okay. Und der Hut, nur um den Test zu
überprüfen, sind Schecks. Und großartig, also
holen wir uns das Post-Wörterbuch daraus und wenden
das dann auf den Cerberus an. Da haben wir es. Hervorragend, das funktioniert. Wir sind also fast fertig. Während dein Code
im Grunde fertig ist. Als Nächstes müssen
wir es für den gewünschten
Workflow
zusammenstellen. An diesem Punkt haben
Sie nun die gesamte
Funktionalität
in spezialisierte und
kleine Funktionen unterteilt . Jetzt können Sie also frei entscheiden,
welchen Workflow
Sie damit machen möchten, was Sie damit, mit
diesem Tool, verwenden möchten. Wir machen etwas
, das sehr gültig ist, nämlich einfach den
Namen unseres Ziel-Namespaces einzugeben. Wenn du willst, dass
es so funktioniert, ist es großartig. Nehmen wir an, Sie
möchten eine Benutzeroberfläche erstellen. Sie möchten, dass der Benutzer
den Namespace eingibt , auf den
er sich bezieht, um
das zu tun, wenn Sie möchten. Aber was wir wollen, wie ich zu
Beginn erwähnt habe, ist die Auswahl verwenden. Und das heißt, es verwendet die
Auswahl, um die Namespaces
abzurufen und gleichzeitig entgegenzuwirken. Lassen Sie uns also eine
Funktion erstellen, die das tut. Und fasst im Grunde
all dies zu
einer einzigen Funktion zusammen , die
das alles für uns erledigt.
26. Die Hauptfunktion des „Transfers“ aufbauen: In Ordnung, lassen Sie uns eine Funktion erstellen , die alles zusammenbringt. Die erste Frage ist also, wo wir diese Funktion
oben in der Datei platzieren, in der Mitte der Datei,
am Ende der Datei. Bisher haben wir es nur von oben nach unten
gemacht. Und das ist in Ordnung. Wir können es einfach ans Ende stellen und
es ist kein Problem. Aber es gibt
etwas, das ich über Python erwähnen
möchte . Das ist eine interessante Tatsache. Oder wenn es nicht interessant ist, ist
es zumindest gut zu wissen. Python ist also eine
interpretierte Sprache. Lass es mich hier aufschreiben. Interpretiere es, als ob es sich um
eine kompilierte Sprache handelt. Sie haben
diesen Begriff wahrscheinlich schon einmal kompiliert gehört. Das bedeutet, dass
Ihr Quellcode
, der eigentlich der Code ist, der Text, den Sie schreiben. All dieser
Quellcode wird
in etwas übersetzt , das die
Maschine tatsächlich ausführen kann. Auf der niedrigsten
Ausführungsebene auf meinem Computer. Der Computer
führt wirklich Nullen und Einsen vor. Zwischen diesen Nullen und Einsen. Und der Quellcode
, den Sie schreiben, besteht aus ein paar Schritten
verschiedener Codetypen. Es wird
Objektcode oder Maschinencode genannt. Und das sind
verschiedene
Übersetzungsebenen , um zu
diesen Nullen und Einsen zu gelangen. In Sprachen wie
C oder C plus müssen Sie Ihren Code kompilieren, bevor
Sie
ihn ausführen können , und Sie müssen diesen Schritt manuell oder
manchmal automatisieren, aber Sie müssen den Schritt ausführen bevor Sie Ihren Code
ausführen können. Das bedeutet jedoch, dass
der Code, der
ausgeführt wird, näher an dem liegt, was die Maschine auf
der niedrigsten Ausführungsebene tatsächlich liest , was bedeutet, dass er schneller ist. Der Code, den
Sie ausführen, wenn
Sie etwas kompilieren, ist also schneller. Andererseits wird Python, wie
bereits erwähnt, interpretiert. Das bedeutet, dass Sie es nicht kompilieren
müssen. Sie können einfach
eine Änderung vornehmen und
es so ausführen , wie wir es
bisher getan haben. Ich muss sagen, dass
es nicht zu 100% stimmt. Die Tatsache, dass Python interpretiert
wird bedeutet nicht gerade
, dass es nicht kompiliert ist. Es ist immer noch ein gewisses Maß an
Fertigstellung erreicht, aber es gibt Unterschiede
, die bei jeder
Ausführung des Codes für
Sie erledigt werden. Das bedeutet, dass
Sie einfach Änderungen vornehmen
und den Code ausführen können. Das bedeutet aber auch, dass der
Code, mit dem Sie
Python ausführen , normalerweise langsamer ist als der Code, den Sie in C
plus ausführen, und
dass dieselbe
Operation in Python langsamer ist als dieselbe
Operation in C plus plus. Aus der einfachen Tatsache, dass C plus
plus im Voraus kompiliert wird. Und der Code wird
direkter auf das ausgeführt , was der
Computer versteht. Vor diesem Hintergrund wird der Unterschied
für das meiste, was wir in der Animation
tun,
nicht allzu wichtig sein. Deshalb verwenden
wir alle
Pipelines in jedem Studio, zu dem
Sie gehen können, in jedem Studio, zu dem
Sie gehen können, Python. Denn da Sie diesen
Kompilierungsschritt nicht machen
müssen, ist es sehr schnell
, damit zu entwickeln. Sie können
sehr schnell Änderungen vornehmen. Die Syntax ist der englischen sehr
ähnlich. Sie haben es also bis jetzt gesehen und
müssen es nicht kompilieren. Wie bereits erwähnt, macht die
Tatsache, dass es etwas langsamer ist als andere Sprachen keinen wirklichen
Unterschied. Und es ist Agilität in der Entwicklung. Das ist ein Vorteil gegenüber
dem Mangel an Geschwindigkeit. Was wiederum etwas ist, das
Sie nie bemerken werden. Der Heilige Geist ist für Menschen kaum
wahrnehmbar, es sei denn,
Sie tun etwas sehr, sehr
rechenaufwändiges. Warum erwähne ich das? Das liegt daran, dass
Python interpretiert wird, was
bedeutet, dass der Code
von oben nach unten gelesen und
ausgeführt wird . Eine Praxis, die
viele Leute
machen, ist also , die Funktion
stop the bottom zu schreiben. Also wenn ich
diese Funktion später brauche, werde
ich sie zuerst haben
und sie dann hier aufrufen, z. B.
jetzt, obwohl das
logisch stimmt,
bei Funktionen ist es jetzt, obwohl das
logisch stimmt,
bei Funktionen ist nicht unbedingt, ich könnte
es
sein, wenn ich eine Funktion habe. Also zB wenn ich diese Funktion hier
aufrufe , wird das fehlschlagen. Sogar von Charme sagt mir , dass die Funktion nicht existiert. Dies wird fehlschlagen, da die Funktion noch nicht deklariert
wurde. Aber wenn ich es in eine
andere Funktion einfüge, ist das nicht mehr der Fall. Das liegt daran, dass Python zuerst die
Funktionsnamen
durchgeht , sie alle
registriert und dann haben Sie Zugriff auf jede Funktion, auch wenn sie sich unter der Funktion befindet,
die Sie aufrufen,
weil sie sich innerhalb
einer anderen Funktion befindet. Das heißt, Sie können die Funktion,
die wir gerade
schreiben werden, an einer beliebigen Stelle platzieren . Regel ist dies, da dies eine Funktion ist , mit der wir interagieren
werden, der
Einstiegspunkt für unser Tool. Normalerweise stelle ich diese Art von
Funktionen an den Anfang
der Datei, sodass das Erste, was Sie sehen, diese Funktion ist. Und von da
an verstehst du , was im
Rest des Stapels
passiert. Also, aber nach all der Rede war es
hoffentlich interessant,
nützlich und unklar. Aber lassen Sie uns weitermachen und die eigentliche Funktion
schreiben. Dies ist eine Funktion, die für uns
als unser Button-Klick fungiert, er den
gesamten Arbeitsablauf abwickelt. Denken Sie daran, dass wir gesagt haben, dass wir zwei oder mehr
Charaktere
auswählen und den Beitrag vom ersten auf
die anderen Zielcharaktere
anwenden wollen zwei oder mehr
Charaktere
auswählen und den Beitrag vom ersten auf
die anderen Zielcharaktere
anwenden . Also nenne ich
es Transfer Selected. Derzeit keine Eingaben. Fangen wir an, es auszublenden. Als erstes müssen wir
ausgewählte Namespaces abrufen. Danach müssen wir die Auswahl
validieren. Denn wie gesagt, wir müssen
mindestens zwei Charaktere auswählen. Also gültige Datumsauswahl. Dann müssen wir
das Posenwörterbuch vom ersten Zeichen abrufen ,
das FirstName-Leerzeichen für
das erste Zeichen. Weil Rick, sagen wir, die Pose
dann auf
die Ziel-Namespaces anwendet , auf die
Zieldrogen. Lassen Sie uns also dieses
Wörterbuch aus dem
Quelltext aufrufen und Ziele anwenden. In Ordnung, ich denke
, das macht Sinn. Ich denke, das ist der Flow, den
wir anstreben. Also fangen wir an, es auszufüllen. Holen wir uns die Namespaces. Dieser ist einfach, wir
haben bereits eine Funktion dafür. Jetzt. Wir haben eigentlich eine Funktion für alles, was wir in dieser Funktion tun müssen
. Oder vielleicht nennen wir diese
Variable namespaces equals, get selected namespaces, was unsere Funktion hier unten
ist. Exzellente Namen. Deshalb
scheitert es. Namespaces. Da hast du es. Jetzt müssen wir unsere Auswahl
validieren. Wie gesagt, wir
wollen mit
zwei oder mehr ausgewählten Zeichen
als ausgewählten Namespaces arbeiten . Nehmen wir also an, wenn ich die Längenfunktion L-E-N
verwende, ist
len namespaces kleiner als zwei. Wir können
ihre Funktion
hier einfach beenden und nichts zurückgeben. Aber ich möchte es ein
bisschen benutzerfreundlicher machen . Ich möchte dem
Benutzer sagen, warum nichts passiert ist, anstatt
ihn im Dunkeln zu lassen. Wir können also die C&DH-Bibliothek
für diese CMBS-Punktwarnung verwenden, die
sehr praktisch
benannt ist und
uns die Möglichkeit gibt, den Benutzer zu warnen. Es nimmt lediglich eine Zeichenfolge als Nachricht und
wird dem Benutzer angezeigt. Wir können also sagen: Bitte
wählen Sie zwei oder mehr Tarife aus. Lass mich dir das jetzt zeigen. Ich bin mir sicher, dass Sie diese
Art von Warnung schon einmal gesehen haben. Es sieht einfach so aus. Ist das die gelbe Warnung , die am unteren
Rand von Maya auftaucht. Hervorragend. Wir könnten das also ein bisschen verbessern
. Wir können es sogar so gestalten , dass, wenn
nichts ausgewählt ist, Sie den Benutzer
bitten, etwas auszuwählen. Wenn es nur einen gibt. Lass mich das machen, bitte. Wenn also die Länge der
Namespaces Null ist, können
wir sagen Bitte
wähle etwas aus. Sonst. Andernfalls, wenn die Länge
der Namespaces eins ist, können
wir Morgen sagen. Bitte wählen Sie mehrere aus. Richtig? Wenn das der Fall ist, können
wir einfach zurückkehren
und die Funktion beenden. Es liegt also an dir. Sie können die
einfache IF-Anweisung oder die doppelte IF-Anweisung ausführen. Das Wenn und Elif sind Terminus. Ich habe es hier gemacht. Ich werde mich an diesen halten. Andererseits, wenn meine
Schecks nicht bestanden werden, kehren wir zurück und tun nichts. Andernfalls
wollen wir die Quelle, das Wörterbuch aus
der Quelle abrufen Wörterbuch aus
der Quelle und dann auf die Ziele anwenden. Da wir Namespaces haben, diesen Quell-Namespace, source, nennen
wir ihn einfach source. Eigentlich nein, tut mir leid,
lassen Sie uns etwas expliziter sein. Quellnamensraum. Wir wissen, dass es der
erste ausgewählte Namespace sein wird. Wir können also einfach Namespaces sagen, offene und geschlossene Klammern,
eckige Klammern. Index Null
wird der erste sein. Und dann wollen wir
das auf die restlichen Namespaces anwenden , bevor
wir dazu kommen, denn das wird
tatsächlich
ein neues Konzept in Enlist einführen . Lass mich das mit
nur einem Ziel machen. Lassen Sie uns also
vorerst
alles außer
zwei ausgewählten Rigs ignorieren alles außer
zwei ausgewählten Rigs , das
werden wir beheben. Sehr bald. Ich nenne das
Zielraum, es werden Leerzeichen sein. Der Index Nummer eins, der
das zweite
Element in der Liste ist. Und wir wissen, dass wir genug haben,
weil wir überprüfen , ob wir
mindestens eine haben, in diesem Fall
mindestens zwei. Großartig. Also holen wir uns das
Post-Wörterbuch. Nennen wir es post dict
equals GET post deck. Wie wir wissen, fragen
wir nach einem
Namespace für diese Funktion. Und das wird unser
Quell-Namespace ,
Quell-Namespace, Wörterbuch sein. Und dann müssen wir nur noch
die Pose anwenden. Bereitstellen, Pose anwenden. Wir können das
Post-Wörterbuch und den
Ziel-Namespace bereitstellen. In Ordnung, lassen Sie uns das testen. Und dann können wir zurückkommen und das für mehr als
zwei Bohranlagen machen, wenn das funktioniert. In Ordnung, gehen wir zu Maya. Noch einmal, weil
wir einige Änderungen vorgenommen haben. Wir werden das Modul
neu laden. Lassen Sie mich meinen Skript-Editor aufräumen weil es ein
bisschen chaotisch ist. Und wir müssen
keine dieser Variablen mehr speichern . Also sagen wir
Transfer, nein, tut mir leid,
Posttransfer, sowohl bei den
Hafentransfers als auch beim Transfer. Wählen Sie es aus. Und dann nennen wir
diese Funktion. Also lassen Sie uns zuerst unsere Schecks
testen. Lassen Sie mich diesen Code ausführen. Indizes sind angeordnet, Okay, ich habe
gerade einen Fehler. Gespielt wird 13. Der Index liegt außerhalb des zulässigen Bereichs. Okay, ich verstehe, was passiert. Du hast einen Fehler gemacht,
aber das ist großartig. Wie Sie meine
Warnung sehen können, würden sie losgehen. Aber dann wurde mein Code weiter ausgeführt. Und wir versuchen,
den Vornamensraum aus
der Namespace-Liste zu bekommen . Aber Python sagt mir, dass der Listenindex außerhalb des zulässigen Bereichs liegt. Das bedeutet, dass Namespaces
nichts enthalten. Und ich versuche, im Wesentlichen etwas aus dem
Nichts
herauszuholen , was
natürlich nicht funktionieren wird. Also lasst uns das reparieren. Gehen Sie zurück zu Pi Term. Das ist also ein Problem, dass wir, wir sind
an diesem Punkt angelangt. Die Länge der
Namespaces war Null. Wir geben eine Warnung aus. Und wir sind trotzdem hierher gegangen, weil wir mit
dieser Wenn-Aussage nicht zurückgekehrt sind. Lassen Sie mich Ihnen also zeigen
, dass, wenn ich
nur einen Namespace auswähle ,
wir ihn hier eingeben. Wir werden diese Warnung erhalten
und dann werden wir
den Vorgang ohne Fehler beenden. Lass mich das ganz schnell machen. Wählen Sie eine von ihnen aus und führen Sie diese aus. Da hast du es. Wir haben die
Warnung erhalten, aber keine Fehler. Also, wie beheben wir das? Ganz einfach, wir können
einfach hierher zurückkehren und die Funktion hier
beenden. Das bedeutet auch, dass die if-Anweisung nicht
wirklich notwendig ist. Wir können einfach sagen, wenn
das jetzt nicht falsch ist, wird
es in beide Richtungen funktionieren. Aber jetzt, da wir
die Funktion sowieso beenden, wissen
wir nicht, wir brauchen
das Else-Wif in diesem Fall nicht. In Ordnung, das
sollte unseren Fehler beheben. Lassen Sie mich alles abwählen
, damit wir die erste Warnung erhalten. Bitte wählen Sie etwas aus. Hervorragend. Wählen Sie jetzt
nur eine Sache aus. Sag Bitte wähle
mehr als einen Rick aus. Hervorragend. Und jetzt machen wir den
eigentlichen Transfer. Lass mich die Hüften nach hinten bewegen. Da hast du es. Lass mich meinen
Zielcharakter auswählen. Und los geht's, Die
Post wird übertragen. Jetzt sagten wir, nun, lass mich es mit der Requisite testen , die es
im Ziel nicht gibt. Bitte schön, es ist kein Fehler aufgetreten. Die Pose ist dieselbe. Klingt. Es funktioniert. Großartig. Lassen Sie uns nun dafür sorgen, dass
das mit
mehreren Charakteren funktioniert. Und dafür muss ich der Szene noch
einen
Charakter hinzufügen . Ich habe weitergemacht und
unseren Minerva-Charakter dupliziert. Es gibt also ein weiteres
Referenz-Rig in der Szene, und ich werde
seinen Namespace so ändern, dass er niedrig ist. Jetzt. Geben wir mir eine
Sekunde Zeit, um zu antworten. Da haben wir es. Jetzt haben wir also
drei Charaktere die in der Szene
verwiesen wird. Lass mich das hier rüberbringen. Und lasst uns noch einmal einen Beitrag bewerben. Aber jetzt versuchen wir, es
auf zwei Charaktere anzuwenden ,
anstatt nur auf einen. Da hast du es. Wie erwartet hat es also nur in der zweiten Version
funktioniert, die wir ausgewählt haben, weil wir
diese Einschränkung eingeführt haben. Aber jetzt machen wir weiter und
machen es vielseitiger, damit wir den Beitrag auf so
viele Charaktere anwenden können, wie wir möchten. Damit das funktioniert, benötigen
wir eine Liste
von Ziel-Namespaces. Also werde ich
das auf Ziel-Namespaces ändern. Anstatt
dass es sich um eine einzelne Zeichenfolge
handelt, muss es sich nun um eine Liste von Zeichenketten handeln. Und das tun wir, indem wir
etwas machen, das als List Slicing bezeichnet wird. Wir müssen eine Liste aufteilen und
alles außer dem
ersten Element in der Liste nehmen . Und das können wir tun, indem wir diese Syntax
verwenden. Es liegt also immer noch innerhalb
dieser Punkteklammern. Wir werden diese Spalte verwenden. Dies wird auf der linken Seite sein. Lassen Sie mich
hier etwas Platz machen. Auf der linken Seite. Dies ist das erste
Element oder der erste Index ,
bei dem Sie die Kopie
der
Liste, die Sie erstellen, beginnen möchten . Das wird also als Nummer eins
indexiert. Und dann hier, das ist
der letzte Index, bei dem
Sie aufhören möchten. Die Sache mit diesem
ist, dass er nicht inklusiv ist. Das heißt, wenn Sie bei Index Nummer zwei aufhören
möchten, müssen
Sie tatsächlich Index drei
angeben. Das könnte ein
bisschen verwirrend sein. Das bedeutet, dass
wir bei Index
eins beginnen und bei Index zwei enden. Oder in diesem Fall wollen
wir jetzt den ganzen Weg
bis zum Ende der Funktion gehen. Sie können dieses Feld also einfach leer
lassen. Für unseren Zweck können
wir das Feld leer lassen verwenden. Das bedeutet also, dass
wir
alles vom zweiten Element,
dem Index Nummer eins,
bis zum Ende der Liste abrufen alles vom zweiten Element, dem Index Nummer eins, werden. Lass mich dir das in
Maya zeigen, bevor wir weitermachen. Weil das ein
bisschen verwirrend sein kann. Lassen Sie uns also eine Liste von Namespaces erstellen. Namespaces entsprechen
Post, Underscore, Transfer, get selected. Es gibt einen Koordinatenraum, der sagt lass mich das
hierher verschieben, Namensräume. Und lassen Sie uns weitermachen und
das ausdrucken. Okay, da hast du's. Wir haben also drei, diese
drei Namespaces. Also, lassen Sie uns diese
Liste einfach hier einfügen, damit sie offensichtlicher ist.
Okay? Also drucken wir diese Liste aus. Wir haben diese drei Namespaces. Wenn ich drucke, wenn ich das mache, z. B. schneide
ich die Liste auf. Wenn ich jedoch keine Indizes
einfüge, dauert es vom
Anfang
der Liste bis zum Ende der Liste. Also im Grunde eine
vollständige Kopie der Liste erstellen. Denken Sie jetzt daran
, dass ich Ihnen zuvor gesagt habe , dass Listen geändert werden können. Das bedeutet, dass Sie die Britney-Leerzeichen des
Namens immer
wieder ändern können . Wenn Sie dies tun, erstellen
Sie eine Kopie davon. Es ist also wie eine separate Liste. Und wenn Sie die Kopie
ändern, haben Sie keinen Einfluss auf
die Originalkopie. In diesem Fall drucken
wir also im Grunde
eine Kopie dieser Liste. Nun, wie gesagt, wir wollen alles
außer dem ersten. Wir können also mit dem Index beginnen, dem zweiten Element, das
Index Nummer eins ist , weil
wir bei Null anfangen zu zählen. Schauen wir uns also an, was uns das gibt. Da hast du es. Wir kriegen Severus und Linda. Was wäre, wenn wir
nur den letzten wollten? Nun, für AC können wir bei
Index zwei beginnen und wir
bekommen nur dieses Wunder. Nun, ich habe erwähnt, dass Sie es können, Sie können sagen, dass das Schneiden
der Liste funktioniert, um aufzuhören. , wenn wir in diesem Fall Was wäre, wenn wir in diesem Fall aufhören wollten? Nummer zwei, nehmen wir
an, wir wollen alles von Null
bis zum zweiten Punkt. Das zweite Element
sollte logischerweise der Index Nummer eins sein. Aber wenn ich das mache,
kriege ich nur einen. Das liegt daran, dass, wie gesagt, der zweite Platz hier nach
dem Doppelpunkt nicht inklusiv ist. Das bedeutet, dass du
noch einmal durchgehen musst. Wenn ich also Index
Nummer zwei von mache, erhalte
ich im Grunde die Indexnummer Null und Indexnummer eins bis
eins vor Nummer zwei. Ich weiß, das kann ein
bisschen verwirrend sein. Sogar für mich. Manchmal
vergesse ich, welches inklusiv ist, welches exklusiv ist? Aber so
funktioniert Python und es gibt einige Gründe dafür,
aber darauf müssen wir jetzt nicht näher
eingehen. Aber noch einmal, wenn
ich das leer lasse, erhalte
ich, eigentlich fange
ich bei Index eins an. Ich werde den ganzen
Weg bis zum Ende gehen. Also lasse ich es leer. Da hast du es. Wenn Sie neugierig sind,
ob Sie
den Minus-Eins-Index verwenden können , können Sie. Es funktioniert genauso,
als ob Sie in diesem Fall den Index
Nummer vier schreiben würden. Das ist also Index 01.2, sorry, Index Nummer drei. Wenn Sie hier den
Index Nummer drei schreiben, erhalten
Sie 12,3. Wird es minus eins ignoriert? Denn wie gesagt, minus eins ist
gleich dem letzten Index. Minus eins
ist im Grunde dasselbe wie drei. Also wirst du
einen bekommen. Und das war's. Sie kriegt sowieso nur Server. Ich hoffe, es war nicht sehr verwirrend. Nach diesem Projekt werden wir die Listen
genauer durchgehen. Moment müssen wir nur wissen, dass
wir eine Kopie der Liste wollen, wobei das erste Element
übersprungen wird ,
sodass der Index Null bleibt. Also vom
ersten Index bis
zum Ende dieser Liste. Lass uns zurückkommen und das machen. Nun, das haben wir schon,
schon nicht getan. Wir haben eine neue Liste von Zielen, von Namespaces, das sind
die Ziel-Namespaces. Was wir jetzt tun können, ist, dass wir
diese Ziel-Namespaces durchspielen müssen. Also ich nenne das, ich werde für Target sagen. In Ziel-Namespaces. Wir werden das einfach
durchgehen und den Beitrag auf jeden
der Ziel-Namespaces anwenden. Anstelle des Arguments Leerzeichen
Namespaces. Da hast du es. Also lasst uns weitermachen
und das testen. Wie immer werde ich
das Modul neu laden , da ich einige Änderungen
vorgenommen habe. Wir brauchen das nicht mehr,
also werde ich es löschen. Und lasst uns, lasst uns unsere Funktion
testen. Lass uns das machen, lass uns unseren Test noch einmal
durchgehen. Wenn ich also nichts ausgewählt habe, erhalten
wir die Warnung. Wenn ich nur eine ausgewählt habe, erhalten
wir die Warnung. Und jetzt, wenn wir, lasst uns die Pose ändern. Sagen wir das. Lassen Sie uns auch
den Hut auswählen. Wir werden all die Controller anwenden
,
die ich ausgewählt habe. 21.2 Bohranlagen. Führen Sie den Code aus. Es geht über diese Hommagen
und perfekt, los geht's. Also sogar der Hut auf der anderen Seite
bezieht sich auf die Lieferung, weil er herausgefunden hat , dass der Controller dieses Attribut
gefunden hat. Lass uns den Hut auf diesem
Charakter hier behalten. Also Entschuldigung für
meine schrecklichen Beiträge. Ich weiß, das ist nicht
sehr ansprechend, keine sehr gute Silhouette. Aber wie Sie sehen können, sind
alle Posen
genau gleich
, und genau danach suchen wir. Da hast du es also. Sie haben das
Backend Ihres Tools erstellt. Backend bedeutet die
Funktionalität des Tools. Nun habe ich gesagt, dass wir
eine Benutzeroberfläche erstellen werden, die das Frontend des Tools sein
wird Frontend des Tools denn so viel Spaß
es auch macht, Code auszuführen, es macht noch mehr Spaß, eine Taste
zu drücken. Lassen Sie uns also
darüber sprechen , wie wir
die Benutzeroberfläche angehen werden.
27. Intro zu UIs: Gehen wir zurück zu Malen
und Design oder UI. Wir brauchen also ein Fenster, das der Hauptcontainer
für unsere Tools ist. Lass uns das einfach schnell zeichnen. Das wird ein Fenster sein. Nun zu dem, was wir brauchen. Wir brauchen nicht wirklich
viel für dieses Tool. Wir brauchen einen Knopf, aber das ist viel zu einfach. Also fügen wir einfach ein bisschen mehr hinzu als
eine Schaltfläche wird diese Schaltfläche hier einen kleinen Titel
haben. Es heißt ein Etikett, auf dem steht, nehmen wir an, Transfer,
so ähnlich. Muss es perfekt sein? Es ist nur ein Modell des Garns. Versuchen wir also, dies im Code zu
replizieren. Wie gesagt, der Anfang bist
du, brauchst du ein Fenster. Es gibt also einen Befehl aus
derselben Bibliothek. Lassen Sie mich das wie gewohnt importieren. Meine Eingaben im S, es gibt einen Fensterbefehl , mit dem wir ein Fenster
erstellen können, und dann
müssen Sie ein Fenster anzeigen. Bevor wir damit fortfahren, schauen wir uns
die Dokumentation an. Dieses Fensterlayout für dieses
Fenster funktioniert, tut mir leid. Okay, das ist also eine
Fensterfunktion. Lassen Sie uns zu
den Beispielen gehen und sehen, ob wir etwas aus ihnen herausholen
können. Okay, genau hier,
mach ein neues Fenster. Scheint so,
aufregend. Ein paar Knöpfe. Lassen Sie uns diesen Code kopieren
und sehen, ob wir von hier aus
beginnen können. Und wir fügen den Code hier ein. Lass uns einfach weitermachen und
es ausführen. In Ordnung, los geht's. Wir haben ein Fenster, wir haben
ein paar Knöpfe. Wir haben einen Titel über sie
, der nichts tut, und eine Schaltfläche, die die Benutzeroberfläche
schließt. Okay, lass uns sehen,
was hier passiert. Lassen Sie uns die
Argumente vorerst ignorieren. Wir kommen in einer Sekunde zu
denen zurück. Zunächst
erstellen wir ein Fenster und speichern dieses Fenster in
dieser Fenstervariablen. Schauen wir uns also an
, was diese Fenstervariable ist, sie wird einfach
den Fensterbefehl ausführen und die Variable
drucken. Okay? Das ist also ein Stück Schnur. Das liegt daran, dass
Objekte in Maya Notizen sind, z. B. wenn Sie
mit einem Controller arbeiten, wenn ich diesen Controller auswähle, wir mit dem
Controller über seinen Namen interagieren. Dieser Name steht
für das Objekt das in Maya passiert. Das ist bei uns ähnlich. Ihr habt einen Namen
und ihr interagiert mit diesen beiden Augen über
ihren Namen, in diesem Fall, ohne ihm einen Namen zu geben, einen expliziten Namen, der Mensch hat
sein Kreatinin für uns gegeben. Dann beginnen wir diesen Namen
in der Fenstervariablen, die eigentlich nur eine Zeichenfolge sein
wird. Und am Ende dieses Codes zeigen
wir dieses Fenster
anhand seines Namens. Wir können ihm, wenn Sie möchten, einen Namen
geben, z. B. meine Benutzeroberfläche. Und wenn ich
das starte und es ausdrucke, wird der
Name gedruckt, den ich gegeben habe. Aber machen wir uns darüber vorerst
keine Sorgen. Für dieses Beispiel ist es nicht erforderlich. Okay, lass uns
weitermachen und sehen, was hier sonst
noch passiert. Als Nächstes
erstellen wir ein Layout. Das Layout ist sehr wichtig. Layouts sind im Grunde das
, was die Container sind
, die die Benutzeroberfläche verwalten. Und lassen Sie mich versuchen, dieses Konzept zu
erklären. Hier sind unabhängig. Es gibt also zwei
Haupttypen von Layouts. Es gibt Spaltenlayouts
und es gibt Zeilenlayout. Es gibt noch mehr Typen,
aber
das sind die wichtigsten, die Sie
verwenden werden. Ein Spaltenlayout
fließt als Spalte
von oben nach unten nach unten. Wenn Sie also ein Widget
mit Jerrys hinzufügen ,
so etwas wie eine Schaltfläche, wie ein TextField-Textstück. Wenn Sie also ein Spaltenlayout hinzufügen, fließt
es nach unten. Wenn Sie Widgets
zu einem Zeilenlayout hinzufügen, erfolgt ein horizontaler Fluss von
links nach rechts. Dieses Konzept ist also im Grunde so, wie Benutzeroberflächen in Maya verwaltet
werden, aber auch, wie sie in
anderen UI-Frameworks
wie q, D funktionieren , z. B. werden
sie dort
als horizontal und
vertikal bezeichnet werden , aber es ist ein ähnliches Konzept
wie Spalten- und Zeilenlayouts. Und wie wichtig es ist
zu wissen, dass Sie das
Layout in all
ihre anderen Layouts einfügen können . Und so können Sie komplexere Benutzeroberflächen
erstellen. Stellen Sie sich also vor, Sie haben
ein großes Spaltenlayout, z. B. haben
Sie ein Spaltenlayout. Es fließt wieder von oben nach unten und du
fügst Knöpfe hinzu. Und dann lass
mich plötzlich die Farbe ändern. Sie fügen ihm ein Zeilenlayout hinzu. Und dann fügen Sie
Schaltflächen zu diesem Zeilenlayout hinzu. Das wird also wieder von links nach rechts
fließen. Die Knöpfe werden
in diese Richtung kommen. Und dann fügen Sie
ein weiteres Zeilenlayout hinzu. Und jetzt wird
es kompliziert. Und innerhalb dieses Zeilenlayouts fügen
Sie Spaltenlayouts hinzu. Sie fügen drei Spaltenlayouts hinzu, die
von links nach rechts fließen. Aber wenn Sie Schaltflächen oder
Widgets innerhalb
dieser Spaltenlayouts hinzufügen . Diese Widgets werden wieder von oben nach unten
fließen. Also, so
erstellen Sie diesen Flow auf diesen
komplexeren Benutzeroberflächen in Maya. Behalten Sie dieses Konzept also im Hinterkopf
, wenn wir mit Layouts arbeiten. Gehen wir zurück zu Maya. Also fügen wir ein Spaltenlayout hinzu. In diesem
Spaltenlayout haben
wir jetzt zwei Schaltflächen. Dann setzen wir das Elternteil ein. Lass uns, lass uns das vorerst behalten. Ich komme
in einer Sekunde darauf zurück. Dann zeigen wir das Fenster. Was passiert also, wenn wir
alles ausführen , ohne das Fenster zu
zeigen? Ihre Benutzeroberfläche wird erstellt. Aber es wurde nicht gezeigt. Sie können es zu einem späteren Zeitpunkt anzeigen, aber in diesem Fall müssen Sie das Fenster anzeigen
ausführen, um es anzuzeigen. Wie Sie sehen können, fließen die Schaltflächen,
wie ich bereits erwähnt habe ,
weil wir uns in
einem Spaltenlayout , von
oben nach unten,
weil wir uns in
einem Spaltenlayout befinden. Wenn ich also noch ein paar Knöpfe hinzufüge, fließen
sie nach unten. Was wäre, wenn ich hier ein Zeilenlayout
einfügen würde, cmd S dot row layout. Fügen wir das hinzu. Layout für zu viele Kinder. Okay, ich denke, wir müssen
die Anzahl der Elemente
für das Zeilenlayout definieren . Schauen wir uns das
in der Dokumentation an. Rollout. Da hast du es. Okay, lass uns sehen. Die Beispiele sind normalerweise ein guter
Hinweis darauf, was zu tun ist. Zeilenlayout, Anzahl der Spalten. Okay, los geht's.
Ich denke, nach der Anzahl der Spalten suchen
wir. Also fügen wir hinzu Lass uns einfach zwei Schaltflächen hinzufügen. Nur um zu beweisen. Um dieses Beispiel zu veranschaulichen, nehmen wir an, dass die Anzahl der
Spalten gleich ist. Zeig das. Okay, da hast du's. Wir haben also das erste Layout, Spaltenlayout von oben nach unten, dann ein Zeilenlayout, das
von links nach rechts verläuft. Lassen Sie uns nun direkt danach ein weiteres
Spaltenlayout
und dann zwei weitere Schaltflächen hinzufügen . Lassen Sie mich etwas Platz lassen,
damit es etwas einfacher ist, einige Kommentare zu sehen und
hinzuzufügen. Das wird also eine Zeile sein, das wird eine Spalte sein. Und der erste hier oben, dieser Wille, das ist
auch eine Spaltenebene. Okay, lassen Sie uns das maximieren. Aber sehen Sie, was hier passiert. Layout für zu viele Kinder. Das liegt daran, dass wir
das Spaltenlayout
zu diesem Zeilenlayout hinzufügen . Spaltenlayout ist also ein weiteres untergeordnetes Element
dieses Zeilenlayouts. Wenn wir also sagen, dass wir drei
Spalten in diesem Zeilenlayout haben wollen, sollte
es Platz für
diese zusätzlichen Kinder bieten. Zusätzliches Kind. Da hast du es. Das ist es also, was hier
passiert. Lass mich einen kurzen
Screenshot machen, damit ich das machen
kann, ich kann drüber zeichnen. Was hier passiert
, ist , dass wir zuerst ein
Spaltenlayout haben, von oben nach
unten
geht, das Spaltenlayout. Und dann haben wir das Zeilenlayout, das ist dieses hier, das von
links nach rechts verläuft. Aber jetzt innerhalb
dieses Zeilenlayouts zum Einfügen eines weiteren Spaltenlayouts, das wiederum
von oben nach unten fließt. Das geht auf
diese Idee zurück, über die ich von Layouts
innerhalb anderer Layouts
gesprochen habe . Was passiert nun mit dieser
festgelegten Elternfunktion hier? Immer wenn Sie ein Layout erstellen, wird das Layout
ohne Layout
das aktuelle übergeordnete Element sein. Was auch immer Sie danach hinzufügen, direkt danach
wird das Layout in die letzte Ebene eingefügt,
die Sie erstellt haben. Also dieses Zeilenlayout, es wurde tatsächlich
zu diesem Spaltenlayout hinzugefügt. Und dieses Spaltenlayout
wird zu dieser Rolle hinzugefügt. Ja, also der aktuelle
Teil in diesem Moment ist dieses
Spaltenlayout. Stellen wir uns vor, lassen Sie
mich das noch einmal ausführen. Nehmen wir an, wir wollen
dieses Spaltenlayout. Diese beiden Schaltflächen fließen also weiter nach unten , sodass sie das Zeilenlayout
überspringen. Der Weg, dies zu tun, besteht darin, diese Set-Funktion zu
verwenden. Also erstellen wir zuerst
unser Spaltenlayout, wir fügen zwei Schaltflächen hinzu und dann erstellen wir ein Zeilenlayout. Das aktuelle Elternteil
ist beim Rollout. Bevor wir nun das
nächste Spaltenlayout hinzufügen, möchten
wir das aktuelle
übergeordnete Element so ändern, dass es bereits da ist. Das erste Spaltenlayout
, in dem wir ein neues hinzufügen
möchten. Das ist es also, was das tut. Wenn ich sage, set
parent dot-dot, ist
das Mayas sehr
spezifische Syntax. Um zum vorherigen Teil zurückzukehren. Sie können also sagen,
das aktuelle übergeordnete Element überspringen und
das letzte Layout überspringen und
das aktuelle übergeordnete Element zum
vorherigen machen . Also werden wir
das aktuelle übergeordnete Element
auf das Spaltenlayout hinweisen . Jetzt
sollte dieses neue
Spaltenlayout zu dem
ursprünglichen, ursprünglichen oder ersten Spaltenlayout hinzugefügt werden . Mal sehen, wie das aussieht. Da hast du es. Lassen Sie mich also
noch einen Screenshot machen. Perfekt. Also noch einmal, nur um
das so klar wie möglich zu machen. Wir haben ein Spaltenlayout. Ashley. Da übertreibe ich. Entschuldigung, ich übertreibe nicht.
Ich habe nicht ganz recht. Als ob diese ganze Sache ein Spaltenlayout
ist. Dann fügen
wir darin diese Schaltflächen hinzu. Und dann
haben wir innerhalb
dieses Spaltenlayouts dieses Zeilenlayout hinzugefügt. Dann ist das aktuelle
übergeordnete Element, wenn wir dieses Zeilenlayout
erstellen, dieses Layout,
aber das Zeilenlayout
ist das aktuelle übergeordnete Layout. Aber denken Sie daran, dass
wir, indem wir hier
set parent verwenden , das aktuelle übergeordnete Element wieder
zum Hauptlayout ändern. Und dann erstellen wir
ein weiteres Spaltenlayout. Und dann
fügen wir die neuen Schaltflächen hinzu. Hoffentlich macht das Sinn. Es kann ein
bisschen verwirrend sein. Aber auch hier gilt: Sobald Sie sich mit Layouts
vertraut gemacht haben, wird
die Art und Weise, wie Sie Benutzeroberflächen erstellen, viel effizienter
sein. Gehen wir jetzt zurück und sehen, was diese
Argumente bewirken. In dem Fenster haben
wir also einen Titel, das ist der Name des Titels des Fensters. Nennen wir das. Ändern wir das in einen
Fenstertitel, der einfach eine Zeichenfolge ist. Dann haben wir den Namen des Symbols. Sehen Sie in
der Dokumentation, was das ist. Oh, interessant. Es
taucht nicht wirklich auf. Das ist sehr bedauerlich,
um ehrlich zu sein, ich habe dieses
Argument noch nie verwendet, daher bin ich mir nicht
sicher, was es bewirkt. Es scheint uns keine
Symbole im Fenster zu
geben . Also
werde ich es einfach entfernen. Nun zur Höhe, das ist, wie
ich bereits erwähnt
habe, ein Tupel. Dies ist einfach eine Liste, die nicht geändert
werden kann und zwei Elemente enthält. Das wird die Breite sein,
das wird die Höhe sein. Das sind nur
Pixel, die bedeuten,
dass das Fenster 200 Pixel lang
und 55 Pixel hoch sein
wird. Aus diesem Grund werden bei
der ersten Erstellung nicht
alle Schaltflächen angezeigt, der ersten Erstellung nicht
alle Schaltflächen angezeigt weil wir einschränken,
dass, wenn ich dieses Argument entferne, es keine Größenbeschränkungen
gibt und
einfach all
diese Schaltflächen angezeigt werden . Hervorragend. Also habe ich einfach, dass
alle Spalten gleich wahr sind. Was passiert, wenn das falsch ist? Setzen wir es einfach auf false
und sehen wir, was es tut. Okay, nun, unsere Schaltflächen erweitern sich nicht mit dem Fenster. Sie haben keine feste Größe. Das ist es also, was ich gerade mit der
doppelten Spalte mache. Dadurch sind die Schaltflächen oder die darin enthaltenen
Widgets anpassbar. Mit Ausnahme des Zeilenlayouts. Weil das Zeilenlayout
seine eigenen erweiterbaren Widgets verwalten
muss . Also lasst uns, lasst uns weitermachen. Wo ist mein Fenster hier? Schließ all diese Kopien. Okay, jetzt haben wir die Knöpfe. Label ist einfach der Text , der in der Schaltfläche
angezeigt wird. Und der Befehl ist ein
Teil des Codes, mit dem ausgeführt wird,
wenn Sie die Taste drücken. Jetzt kann ein Befehl entweder eine Zeichenfolge
sein, und im Beispiel
verwenden sie Klammern, aber das ist nicht notwendig. Es kann eine Zeichenfolge sein,
in diesem Fall ist eine Zeichenfolge, die das Fenster
löscht. Dies ist ein Befehl
zum Löschen einer Benutzeroberfläche. Und wir geben den Namen
des Fensters weiter, das wir erstellt haben. Also
verwässern wir im Grunde dieses Fenster. Sagen wir, machen wir diesen
Button hier oben, tun wir etwas. Nennen wir es, tu etwas. Und ich werde
einen Befehl hinzufügen. Der Befehl wird
einfach eine Print-Anweisung sein, aber jetzt wird er
im Format einer Zeichenfolge vorliegen. Es ist also eine Art
Code, der in eine Zeichenfolge eingewickelt ist. Also werden wir sagen, dass
Print etwas tut, also lasst uns das einfach machen. Jetzt. Beachten Sie, dass ich die
beiden Arten von Anführungszeichen verwende, einfache Anführungszeichen und doppelte Anführungszeichen. Das liegt daran, dass
Maya denken würde, dass dies das Ende meiner Zeichenfolge
ist, wenn ich hier einfache Anführungszeichen verwenden würde. Was ich also mache, denk daran,
denk daran, dass ich erwähnt habe,
um eine Zeichenfolge zu erstellen, du musst den Anfang
und das Ende
der Zeichenfolge übereinstimmen , der Typ
muss identisch sein. Also ich sage im Grunde, okay, innerhalb dieser Zeichenfolge
befindet sich diese äußere Saite. Darin befindet sich eine Zeichenfolge, und
das ist es, was ich in der gedruckten Aussage
, dass
ich ein Sakrament verwende,
im Grunde übergebe . Also lass uns das ausführen. Lass mich auf den Button klicken
, auf dem steht, tu etwas. Und du musst jetzt
sprinten, etwas tun. Nun zu diesem Befehl. Sie können auch eine Funktion übergeben. Also lass mich dir zeigen, wie
das aussieht, wie das aussieht. Wenn ich meine Funktion aufrufe,
mache z.B. etwas , dass es nicht so ist, nennen
wir
es einfach Test, Funktionstest. Und ich werde diesen Druck
machen, einfach drucken und etwas
aus der Funktion heraus tun. Okay, also anstatt eine Zeichenfolge zu
übergeben, kann
ich
tatsächlich eine Funktion übergeben. Aber ich kann die Funktion übergeben ohne die Funktion aufzurufen. Beachten Sie, dass ich die Klammer nicht
verwende. Wenn ich eine Klammer verwende, rufe
ich die
Funktion auf und gebe das Befehlsargument, das Ergebnis, die Ausgabe, die Rückgabe dieser Funktion an, was in diesem Fall ein Non ist, weil ich nichts
zurückgebe. Was ich tun wollte, ist , diese Befehlsargumente nach der tatsächlichen Funktion
ohne Doppelpunkt anzugeben. Das heißt, wenn
ich die Taste drücke, übernimmt Maya meine Funktion
und ruft sie von selbst auf. Schauen wir uns an, was in diesem Fall
passiert. Bevor ich das mache, lass
mich das aufräumen. Ich glaube nicht, dass wir diese zusätzlichen
Schaltflächen benötigen , da wir das Beispiel bereits
durchgegangen sind. Machen wir es einfach.
Tun Sie etwas. Okay, es tut etwas, aber
es ist nicht genau das,
was wir erwartet hatten. Mal sehen, was hier passiert. Es heißt, dass die
Testfunktion keine Argumente akzeptiert, aber eines davon wurde angegeben. Lass mich das Fenster schließen. Das ist also wahr. Ich akzeptiere keine Argumente. Aber wenn ich den Knopf
drücke, geben
meine Augen irgendwie ein Argument an meine
Testfunktion weiter, nur eines. Lassen Sie uns es also untersuchen
und sehen, was es ist. Ich kann dieses Argument einfach abfangen, indem ich ein
Argument an meine Funktion übergebe. Nennen wir es einfach x. Lassen Sie uns einfach drucken,
Lassen Sie uns x drucken. Mal sehen, was ist,
was meins macht. Ist das falsch gedruckt. Es scheint also mein Ja zu sein, einen booleschen Wert
an die Funktion zu
übergeben. Aus irgendeinem Grund. Ich bin mir
nicht sicher warum. Die Sache daran ist
, dass wir es nicht wirklich brauchen. Es interessiert uns nicht wirklich. Es gibt also zwei Möglichkeiten Sie mit
dieser Situation umgehen können. Eine davon
ist, genau
wie ich es hier getan habe, ein Argument zu akzeptieren,
weil
du weißt, du wirst das
von Maya erwarten und es ignorieren. Tun Sie einfach nichts dagegen. Sie können es akzeptieren, aber nicht innerhalb
der Funktion verwenden. Wie du siehst. Bitteschön, mein Knopf
wird funktionieren. Eine andere Möglichkeit besteht darin,
eine spezielle Syntax zu verwenden , die wie folgt lautet. Du machst ein Sternchen oder einen Stern, einen Stern, einen Stern, einen neuen Typ, args. Nun, das kann
jedes Wort sein, das du willst, aber laut Konvention
wirst du Leute sehen, die sich streiten. Was das macht. Das ist so etwas wie ein
Sammelsurium für alle Argumente, die Sie aus der Funktion
herauswerfen. Sie haben Zugriff auf
sie, wenn Sie möchten. Oft
verwenden die Leute dies, um Argumente zu ignorieren , die
erwartet werden könnten, aber nicht benötigt werden. Lassen Sie mich Ihnen zeigen, wie dieser Stern argumentiert, dass die
Syntax funktioniert. Also wenn ich sage, wenn ich
meinen Funktionstest aufrufe und 1234 Argumente
übergebe, wird es funktionieren. Diese Syntax fängt also im Grunde
alles ab, was ich ihr entgegenwirfe. Und ich benutze es nicht wirklich. Aber jetzt lasst uns sehen, was,
was tatsächlich passiert. Lassen Sie uns diese
Argumente ausdrucken. Okay, sehr gut. Das ist es also, was passiert. Diese Sternbogen-Syntax
fängt also im Grunde alle
Argumente ab, die ich ihr gebe. Ich lege sie
in ein Tupel. noch einmal daran,
dass ein Tupel wie eine Liste bei Radfahrern
ist, aber Sie können sie nicht ändern. Das bedeutet, dass ich
z. B. das erste Argument,
das übergeben wurde, das übergeben wurde, in diesem
Fall die Nummer eins bekommen kann. kann ich einfach
ausdrucken. Da hast du es. Also für Fälle wie
diesen, in denen dir die Benutzeroberfläche aus
irgendeinem Grund
Maya
ein Argument gibt und
du es nicht brauchst. Ich empfehle, diesen Index zu verwenden. Sie können diese Syntax
zusammen mit anderen Argumenten verwenden, z. B. wenn Sie
ein echtes Argument erwarten, natürlich, ein Baby
erwarten und dann alles, was auf Ihre Funktion
geworfen werden könnte. Das ist auch gültig. Okay? Nachdem das geklärt
ist, gehen wir zurück. Lassen Sie uns wieder einfach
diese Art von
Net-Catch-All-Stern-Argumenten verwenden diese Art von
Net-Catch-All-Stern-Argumenten und diese an
unseren Befehl für die Schaltfläche übergeben. Das macht etwas. Okay, perfekt, also lass uns
das als Start
für unsere eigentliche Benutzeroberfläche verwenden .
28. Die UI erstellen: Okay, wir brauchen diese
Testfunktion nicht mehr. Wir brauchen diesen Kommentar nicht. Ich denke, das ist ein
guter Ausgangspunkt. Lassen Sie uns den
Titel unseres Fensters ändern. Nennen wir es Owes
Transfer Tool. Das wird der
Name unseres Fensters sein. Und lassen Sie uns die Spalten machen, die
ich einfach alle habe, ja, weil wir wollen, dass die
Schaltflächen mit den Spalten
erweitert werden können . Wir brauchen keine zwei Knöpfe, wir brauchen nur einen. Und nehmen wir an, das Etikett
sollte Transfer sein. Okay, und Befehl,
lass uns den
Befehl vorerst weglassen. Wir werden in einer Sekunde eine Funktion
hinzufügen. Eigentlich. Nennen wir
diese Übertragung ausgewählt. Okay, da hast du es,
ein einziger Knopf. Wir können den Namen und
den Titel des Fensters nicht sehen . Das wäre also schön zu sehen. Wir können das Argument Breite,
Höhe verwenden , das wir zuvor hatten. Oder ich weiß auch, dass
das Fenster einzeln
Gewichts- und
Höhenargumente hat . Wir können also einfach die Breite hinzufügen. Wir können sagen, lass
es uns 300 Pixel machen, z. B. vielleicht ein bisschen
größer für 100. Das war zu viel, sagen
wir 350. Okay, das klingt großartig. Jetzt haben wir also unseren Button. Der Knopf ist ein bisschen dünn. Also lasst uns den
Button auch ein bisschen größer machen. Wir können ein
Höhenargument in der Schaltfläche haben. Machen wir es 20 Pixel hoch. Nicht genug. Lass es uns verdoppeln 40. Okay, das scheint ein
bisschen besser zu sein. Nun habe ich auch gesagt, dass
wir
oben
ein kleines Etikett hinzufügen wollen , wie ein Stück Text. gibt es eine Text-UI-Komponente Hier
in dieser Bibliothek
gibt es eine Text-UI-Komponente, die einfach Text genannt wird. Sagen wir das. Gehen wir zu
den Beispielen über. Da hast du es. Das ist alles, was wir
dazu zu brauchen scheinen. Wir können also ein Label hinzufügen und
den Text ausrichten. Lass uns, lass uns dieses Beispiel nehmen. Lassen Sie uns aus diesem Beispiel kopieren. Ich werde
diesen Text hinzufügen. Und das Etikett wird, sagen
wir einfach, nach der
Übertragung in Großbuchstaben sein. Und richten wir es nach
links und zwei aus, was passiert? Das ist nicht toll.
Lass es uns in der Mitte belassen. Und es ist auch sehr klein. Der Text ist sehr klein. Mal sehen, ob wir
etwas dagegen tun können. Vielleicht können wir auch die
Höhe ändern. Sagen wir 60 Pixel. Sagen wir 50. Und lass uns den Button ein
bisschen kleiner
machen. Machen wir den Button 30. Der Text ist ein bisschen okay. Es tut mir leid. Ich übernehme den Staffelstab an dieser Stelle
wieder. Ich spiele nur
mit den Zahlen herum. Das ist nicht so wichtig, aber Sie können gerne mit
den Größen spielen, wie Sie möchten. Ähm, ich denke, das ist
ziemlich zufrieden damit. Wir haben also unsere Texte,
wir haben unseren Button. Und bevor wir
das in PyCharm übernehmen, möchte
ich Ihnen
etwas zeigen , das sich als sehr nützlich erweisen wird
. Und das sind Tooltips. Nun, ein Tooltip, auch
bekannt als Toolclip, aber der offizielle Name ist geneigt die Texte, die erscheinen, wenn Sie den Mauszeiger
über etwas in der Benutzeroberfläche bewegen. Wie Sie sehen können, wenn ich den
Mauszeiger über diese Schaltflächen bewege, erhalten
Sie ein bisschen Hilfe. Und auch hier unten
in dieser Statusleiste bekommst
du ein bisschen Hilfe , die
dir im Grunde sagt , was die Schaltfläche tun
wird. Also können wir das in
all unseren UI-Elementen hinzufügen. Und das nennt man
eine Anmerkung. Das Argument dafür
heißt also Annotation, aber der eigentliche Name dafür ist Tooltip oder Toolclip wird
auch in Maya genannt. Wenn du es also nicht so
siehst wie ich, wenn du den Mauszeiger
auf etwas bewegst, wenn du das nicht siehst, musst
du zu
Windows gehen , Einstellungen,
Präferenzen, Präferenzen. Nun unter den UI-Elementen,
tut mir leid, aber es tut mir leid,
es gibt Hilfe zur Benutzeroberfläche. In ihrer Popup-Hilfe. Sie werden sehen, dass zwei Clips
angezeigt werden. Du willst, dass das Kästchen angekreuzt ist. Wenn Sie das nicht angekreuzt haben, werden
Sie das nicht sehen. Okay, da hast du es. Also können wir diese hinzufügen. Noch einmal mit der Anmerkung. Argument. Anmerkung ist also gleich, ich drücke
hier die Eingabetaste. Das ist, das ist übrigens
gültig. Wenn ich die Eingabetaste drücke, ist
es gültig und Python
wird sich nicht beschweren. Ich sage Annotation,
Transfer zwischen Charakteren. Dies wird die
Anmerkung zum Text sein. Eigentlich gehe ich zurück,
zurück zu dieser einzigen Zeile. Und dann die Anmerkung
in der Schaltfläche. Wir werden als Anmerkung gleich zwei oder mehr Zeichen
auswählen. Das ist also die Hilfe. In diesem Fall werde
ich, da dies die Art der
Anleitung für den Gesamtbetrag ist, die Art der
Anleitung für den Gesamtbetrag ist,
etwas Detaillierteres
aufschreiben . Überträgt Beiträge aus dem ausgewählten
Waldstein auf den Rest der Auswahl. Okay, das ist vielleicht nicht ein
bisschen lang, aber das ist okay. Wenn wir nun
den Mauszeiger über diese Schaltflächen bewegen, werden
Sie sehen, dass die
Mautstelle ein wenig Hilfe braucht. Und du siehst es auch
hier unten in der Statusleiste. Okay, perfekt, also unser Button
macht nichts. Verschieben wir das in eine
Funktion in PyCharm in unserem Modul, sodass es in der Datei
lebt. Und dann können wir den Button
verbinden. In Ordnung, lass mich das kopieren und hier oben eine Funktion
erstellen. Oben in der Datei. Ich nenne es Show UI. Übrigens ist es normalerweise
eine gute Idee, Ihr Backend,
wie ich bereits erwähnt habe, also Ihre Funktionalität
, von Ihrem Frontend, Ihrer Benutzeroberfläche, zu
trennen. Normalerweise würde ich
diese Funktion in einem separaten Modul neben
diesem Posttransfer-Modul haben. In diesem Fall belasse
ich
es hier, da es sich um eine sehr einfache Benutzeroberfläche handelt, und es ist nur für dieses
erste Projekt. In der nächsten Version werden
Sie jedoch
die Trennung zwischen der
Funktionalität und der Benutzeroberfläche sehen , was normalerweise eine
gute Vorgehensweise ist. So können Sie Ihre
Funktionen direkt aufrufen und Ihre Benutzeroberfläche
vollständig getrennt haben, völlig unabhängig von
Ihrer tatsächlichen Funktionalität. Aber lassen Sie es uns vorerst, wie
gesagt, hier belassen. Ich füge einfach
meinen UI-Code hier ein. Und lass es uns
ganz schnell testen. Sagen wir importieren,
posieren, übertragen. Okay, und wenn Sie Ihre Maya nicht
neu gestartet haben ,
möchten Sie das Modul
erneut laden. Lass mich das neu laden. Okay, da hast du's. Und ich kann sagen, dass Beiträge
die Übertragung unterstreichen, die andere Score-Benutzeroberfläche anzeigen. Und nennen wir diese
Funktion. Da hast du es. Okay. Der letzte Schritt besteht nun darin, die Schaltfläche
zu verbinden. Und die Schaltfläche hier
übernimmt diesen Befehl. Ich drücke die Eingabetaste, wie ich bereits sagte, wenn Sie etwas in
mehreren Zeilen haben ,
spielt es keine Rolle. Python wird sich nicht beschweren. Sie können jedes Argument
in einer anderen Zeile haben , wenn Sie möchten. Also machen wir das einfach um
des Beispiels willen. Befehl entspricht meiner
ausgewählten Übertragungsfunktion. Da hast du es. Lassen Sie uns das jetzt testen. Fehler bei der Übertragung ausgewählt. Okay, okay. Natürlich haben wir
gerade darüber gesprochen. Wir brauchen, ich werde das Sternmuster
benutzen. Das ist eine Art
Catch-All-Catch-All-Syntax , um das Argument
abzufangen. Und wenn ich schon dabei bin, füge
ich einen Docstring hinzu
, den ich vergessen habe zu schreiben. Überträgt das ausgewählte Rig der Pose
Forest auf den Rest der Auswahl. Nun, Star Args ist etwas Besonderes, wir müssen dafür nicht wirklich
eine Beschreibung hinzufügen, aber Ashley, nun, wir tun
es, weil es einen Zweck hat. Nennen wir das einfach Catch. Alle vier
von mir übergebenen Argumente geben nichts zurück. lassen wir uns also
nicht entgehen. Ja. Okay. Und jetzt, ärmer, zeige
ich Ihnen, vielleicht lassen Sie uns einfach einen einfachen Docstring
hinzufügen. Zeige die Benutzeroberfläche für das
Tool, das auf dem Tool basiert, mxnet, weniger Erklärung, aber
lassen Sie uns es trotzdem dort hinzufügen. Okay, lassen Sie uns das ausführen. Lassen Sie mich dieses Tool schließen. Da haben wir es. Jetzt funktioniert es. Bitte wählen Sie mehr als ein Rig aus. Wenn wir nichts ausgewählt haben
, werden wir aufgefordert, etwas
auszuwählen. Und zum Schluss lassen Sie mich weitermachen und einen netteren Beitrag
erstellen,
um unser Tool richtig zu testen. Okay, wir haben eine etwas
bessere Pose, kein fantastisches Neuro-Meisterwerk. Ich bin mir sicher, dass du es besser
kannst als ich, aber es ist schöner als das
Schreckliche, das wir zuvor hatten. Lassen Sie uns das Tool also einem
eher nützlichen als einem netteren Test unterziehen. Wählen wir also alle diese Controller
aus. Ich möchte die
Baseball-Rolle nicht wählen, weil dadurch die Charaktere
nur in diese Position
gebracht werden . Und los geht's, wähle alle meine Steuerelemente aus, Ziel, eins, Ziel auch. Lass uns überweisen. Der Prozess läuft derzeit
durch viele Controller und
ist etwas langsam. Aber da hast du es. Unsere Posen, lass mich die Kurven
einschalten. Sieht genauso aus. Da hast du es also, um dein erstes Jahr
gestohlen zu haben, ich teile das mit deinen Freunden, benutze es bei deiner Arbeit. Dies ist ein echtes Arbeitsinstrument
, von dem Sie profitieren können.
29. Projektrückblick: Zum Abschluss des Projekts möchte
ich nun kurz
zusammenfassen, was wir gelernt haben. Lass es mich hier schreiben. Wir werden also eine Menge Dinge lernen. Werde etwas über
Listen und Tupel lernen. Wir werden etwas über Wörterbücher lernen, wir haben gelernt, wie man durch
Elemente in einer Liste iteriert. Wir werden mehr darüber lernen,
wie man mit Zeichenketten umgeht. Wir werden mehr
darüber erfahren, ob Statements mehr über Funktionen erfahren
werden. Wir haben gelernt, wie Sie
Ihre Augen darauf richten können,
wie Sie
UI-Elemente mithilfe von Layouts handhaben und verwalten. Wir werden lernen, wie man
mit Objekten und
Notizen in der Szene interagiert . Wie man Attribute festlegt und erhält, wie man mit Rigs interagiert und wie man Dinge wirklich
aufteilt
, damit wir die Informationen
und Daten erhalten , die wir benötigen. Nun, das ist eine der wichtigsten
Erkenntnisse dieses Projekts. Das verwendet jetzt diese
beiden Datentypen und dies sind die wichtigsten
Datentypen zum Speichern von Daten. Jetzt wissen Sie, wie Sie Daten
für jeden beliebigen Zweck abfragen ,
speichern und bearbeiten können. Denken Sie daran, dass wir Listen
verwenden um Auswahlen abzufragen und zu
speichern, um Listen von Steuerelementen
zu erstellen, Listen mit Namespaces,
Attributen usw. zu erstellen.
Können wir
Wörterbücher verwenden, um
eine Zuordnung zwischen Attributen
und ihren Werten zu erstellen ? Das sind also sehr
einfache Konzepte, aber sie sind extrem leistungsfähig
und werden sich für Sie
in komplexeren
Anwendungsfällen niederschlagen . Herzlichen Glückwunsch zum
Abschluss des Projekts, und jetzt sind Sie bereit
für das nächste.
30. Deep Dive - Saiten: Wir werden
mehr über Zeichenketten lernen. Zeichenketten sind in einfachen Worten
eine Folge von Zeichen. Sie können sie sich als Text vorstellen. Sie können also
Zeichenketten mit Anführungszeichen erstellen. Dies können einfache Anführungszeichen, doppelte Anführungszeichen oder dreifache Anführungszeichen sein. In diesem Fall gibt es
drei dreifache Anführungszeichen, entweder drei einfache Anführungszeichen
oder drei doppelte Anführungszeichen. Also
das ist zB eine Zeichenfolge, und drei einfache Anführungszeichen
sind auch eine Zeichenfolge. Dreifache Anführungszeichen sind jedoch
normalerweise
entweder
Textblöcken oder Docstrings vorbehalten . Normalerweise sind sie
nur für Docstrings reserviert. Aber du könntest Textblöcke
erstellen, erstellen. Wenn Sie also einfache und doppelte Anführungszeichen haben ,
Zeichenfolge eins, z. B. Zeichenfolge zwei, können Sie diese Zeichenfolge nur als einzelne Zeile
erstellen. Aber wenn Sie Zeichenketten in einem Dokument haben, ,
solange sie diese Zeichenfolge öffnen
und schließen können
Sie darin schreiben,
solange sie diese Zeichenfolge öffnen
und schließen. Und dort
werden die neuen Zeilen für Sie gespeichert. Das ist also so etwas
wie ein Textblock. Und das wird auch
bei den dreifachen, einzelnen Saiten der Fall sein. Also ich sehe hier irgendwie, solange das Anfangs- und
das Endanführungszeichen
vom gleichen Zeittyp sind, ist die Zeichenfolge gültig. Und mit derselben, derselben Logik. Wenn Sie Anführungszeichen
in Ihrer Zeichenfolge haben möchten. Also lass mich, lass mich
das einfach ausdrucken. Zuerst. Lassen Sie uns die Zeichenfolge drucken. Wie Sie sehen, wird es
ohne Anführungszeichen gedruckt. Nehmen wir an, ich
möchte es mit Stiefeln drucken. Ich kann es in doppelte
Anführungszeichen setzen. Da hast du es. Wenn ich mit einfachen Anführungszeichen wollte, gibt es zwei Möglichkeiten, das zu tun. Erstens kann ich
die Anführungszeichen vertauschen. Oder zwei, ich kann die Anführungszeichen überspringen. Lass mich dir zeigen
, was das bedeutet. Was passiert, wenn ich
hier ein Angebot poste? Nun, Python wird denken , dass Sie hier in der
neuen Zeichenfolge sind. Das wird, das ist im Grunde eine leere Zeichenfolge und es
wird dir eine Fehlermeldung geben. Wie kann ich
es also so machen, dass ich einfache Anführungszeichen
haben kann und immer noch einfache Anführungszeichen darin
haben kann. Sie können diese einfachen
Anführungszeichen umgehen, indem Sie einen umgekehrten Schrägstrich verwenden. Und das wird
genauso funktionieren. Du
sagst Python also im Grunde, dies nicht das
Ende meiner Zeichenfolge ist und dies ist auch nicht
das Ende meiner Zeichenfolge. Du fliehst, indem du
diese, diese Zitate umgehst. Aber so viel Sie können, ist
es einfacher, die Arten von Anführungszeichen zu
mischen, zu vereinfachen. Dieser Backslash dient
einem anderen Zweck. Es gibt eine spezielle Art von Charakteren, die als
Escape-Charaktere bezeichnet werden. Diese Backslash und beachten Sie nur, dass
es kein Schrägstrich ist, es ist ein umgekehrter Schrägstrich,
der als
Escape-Zeichen dient . Lassen Sie mich Ihnen zeigen, was
ich damit meine. Das gebräuchlichste
Übersprungszeichen ist der umgekehrte Schrägstrich n, und dadurch wird
eine neue Zeile für Sie erstellt. Also lass mich dir zeigen, was ich meine. Geben wir Zeile eins ein, einen umgekehrten Schrägstrich n Zeile, um dies zu
vermeiden. Sie sehen also, dass
wir nicht
den umgekehrten Schrägstrich drucken , an dem wir eine neue Zeile
erhalten. Wir sind, wenn ich
den Backslash nicht hätte, hätte
ich eine einzige Zeile. Das ist also einer der
häufigsten Fluchtcharaktere. Ein anderer ist der umgekehrte Schrägstrich
d, was Tab bedeutet. Du rückst sozusagen ein
, als
würdest du die Tabulatortaste drücken. Sie können sie auch mischen. Wir können eine neue Zeile haben, umgekehrten Schrägstrich n und einen Tabulator, einen
umgekehrten Schrägstrich, einen umgekehrten Schrägstrich t. Und dann hast du so
etwas. Wenn sie
mehr Einrückungen haben wollte, kannst du
natürlich
mehr Tee und anderes T machen Was ist
also, wenn du
tatsächlich einen umgekehrten Schrägstrich n drucken möchtest? Nehmen wir an, Sie möchten genau
diese Zeichenfolge drucken lassen. Wenn ich es jetzt ausführe, erhalte
ich eine
neue Zeile zwischen,
zwischen diesen beiden Teilzeichenfolgen. Eine Teilzeichenfolge ist einfach
ein Teil einer Zeichenfolge. Zeile zwei ist in diesem
Fall also eine Teilzeichenfolge. Zeile eins ist eine Teilzeichenfolge, und das Escape-Zeichen
n ist ebenfalls eine Teilzeichenfolge. Nehmen wir also an, wir
wollen genau das drucken. Nun, du kannst tatsächlich entkommen, dem Charakter
entkommen und das mit demselben umgekehrten Schrägstrich. Was passieren wird,
ist dieser Backslash. Der erste Backslash wird Python
anweisen,
dies nicht zu lesen , da das Escape-Zeichen
ein Sonderzeichen ist , einfach
als rohe Zeichenfolge. Also, wenn ich drucken würde, verstehst du das
jetzt. So
kannst du ihm entkommen. Jetzt gibt es eine andere Möglichkeit,
ein Sonderzeichen zu überspringen , zu entkommen
oder es zu ignorieren. Wenn ich das also
noch einmal ausdrucke, erhalte ich eine neue Zeile. Wenn ich
vor dieser Zeichenfolge ein R
eintippe, erhalte ich
das gleiche Ergebnis. Jetzt sind sie normalerweise für
sogenannte Ablehnungen
reserviert. Dies ist eine spezielle Art von Ausdruck für die
Suche nach Zeichenketten. Aber in diesem Fall sind sie
es, das bedeutet, dass dies eine Zeilenfolge
ist. Das bedeutet, dass Sonderzeichen nicht interpretiert
werden . Er wird Rho sein, einfach alles, was sich in
der Schnur befindet, wird so
gedruckt, wie es ist. Das ist also eine andere
Möglichkeit, dem zu entkommen. Das ist also besonders
nützlich,
wenn Sie mit Teilen
innerhalb oder innerhalb von Windows zu tun haben , der Dateipfad in etwa
so aussehen könnte. Lassen Sie mich z. B. eine neue Variable erstellen. Ein Dateipfad könnte etwa so
aussehen wie C Doppelpunkt, ein Pfad zu einer Datei, Punkt dx dy, z. B. Da hast du es. Nehmen wir an, dies ist ein
Ordner- oder Dateipfad. Also ein paar Ordner oder
Verzeichnisse und dann unsere Datei, wenn ich das ausdrucken würde, wurde genau
das gedruckt, was ich eingegeben habe. Und der Grund dafür ist, dass
ich den Schrägstrich verwende. Das war also mein Fehler. Das tut mir leid. Lassen Sie mich
das schnell auf den Backslash umstellen. Wie Sie sehen können, ist
der Schrägstrich absolut sicher zu verwenden, aber der umgekehrte Schrägstrich wird anders
interpretiert. Du siehst also, dass mein, mein A geändert wurde. Verwandeln wir uns in diese Charaktere. Dann haben wir nach dem Pfad
den Tabulator, der t ist. Dann wandte sich der umgekehrte Schrägstrich F diesem anderen Zeichen
zu. Das wollen wir eindeutig nicht. Du könntest also einfach diesen Charakteren
entkommen, aber du musst raten oder du
musst wissen, welche. Wir müssen überspringen. A, wir müssen P-I nicht entkommen. Wir müssen t entkommen
und wir müssen f entkommen. Das ist
also das
Ergebnis, das wir wollen. Oder wir könnten rohe Zeichenketten verwenden. Lege einfach einen RB weit hinter die Saite und wir
erhalten das gleiche Ergebnis. Zeichenketten werden also
für viele Dinge verwendet, auf Dateipfade zuzugreifen, Variablen zu erstellen, Namen zu deklarieren oder Dinge zu
beschriften. Aber die gebräuchlichste Operation, die
Sie mit Zeichenketten ausführen werden, oder eine der
gebräuchlichsten Operationen heißt Verkettung, was im Grunde das Zusammenfügen von Zeichenketten bedeutet
. Lassen Sie mich Ihnen zeigen, wie
das aussehen könnte. Nennen wir das
mit einer Variablen namens S. Wir beginnen
sie als leere Zeichenfolge. Und ich sage „
S plus“ ist „Hallo“. Und ich werde es hier
unten so sagen, dass Plus dem
Raum entspricht und das S
plus der Welt entspricht. Jetzt lass mich S drucken. Jetzt heißt es Hallo Welt. Also, was passiert hier? Diese Notation plus ist gleich, das ist im Grunde gleichbedeutend
mit S verloren, hallo. Das passiert hier, wir erhalten den vorherigen
Wert von S, was eine leere Zeichenfolge ist, und fügen hallo hinzu. Und dann speichern wir das. Wir überschreiben im Grunde
die S-Variable. Dann hier unten ist
das gleichbedeutend damit, dasselbe noch einmal zu sagen, nimm den vorherigen Wert von S, was wir gerade getan haben. Und wieder das
Geschichtenerzählen,
das im Grunde dieselbe Variable
überschreibt. Mit dem Pluszeichen können
Sie also Zeichenketten zusammenfügen, aber es gibt auch andere Möglichkeiten, Zeichenketten
zusammenzufügen. Eine der gebräuchlichsten
und ich würde sagen, mächtigsten Methoden zum Verketten
von Zeichenketten ist die
Verwendung der Punktformatfunktion. Lass uns sehen, wie das funktioniert. Lassen Sie uns also eine Zeichenfolge erstellen. Lass mich zwei lockige Zahnspangen machen, dann einen Unterstrich, dann geschweifte
Tumorspangen. Was also passieren wird, ist diese geschweiften Klammern zu
Platzhaltern werden oder etwas
ersetzen. Nun, wenn ich jetzt S
drucken würde, würden
wir genau das bekommen, was wir gerade getippt haben. Aber wenn ich stattdessen das Punktformat verwende
, ist dieses Format eine Funktion
, die in Zeichenketten eingebaut ist. Und ich übergebe zwei Variablen, sagen
wir zwei Zeichenketten, hallo und nochmal Welt. Jetzt drucken wir es aus. Sie dieses
Format sehen können, verwenden wir die geschweiften Klammern als Platzhalter, um sie durch das zu ersetzen,
was ich hier eingegeben habe. Und das kann etwas sein, etwas anderes, das keine Zeichenfolge
ist. Dies könnte eine Zahl sein, z. B. wenn ich die Zahl 100 eingebe, wird das Format ersetzt. Es ist klug genug zu
wissen, dass es das kann, es kann das mit Zeichenketten. Wenn ich
mit dem Pluszeichen
eine Zeichenfolge und eine Zahl 100 hinzufügen würde , erhalte
ich eine Fehlermeldung,
da Python Zeichenfolge und eine Ganzzahl
nicht verketten kann. Aber die Punktformatfunktion
ist intelligent genug, um das zu wissen. Es gibt eine andere Möglichkeit,
das Punktformat zu verwenden , ist die Verwendung
von Variablen. Wir können Variablen
innerhalb dieser geschweiften Klammern angeben. Ich kann sagen, dass die
erste Variante hoch sein wird. Variable zwei wird, sagen
wir einfach, Zahl sein. Sagen wir, es ist taub. Also, wenn ich das jetzt starte, bekommen
wir eine Fehlermeldung weil es
sich über einen Schlüsselfehler beschweren wird weil wir der Funktion im Grunde nicht
sagen,
welcher, welcher dieser beiden
Werte zu welchem Schlüssel gehört. Also lasst uns das reparieren. Ich kann sagen, dass hi, hallo hoch ist, also hoch ist hallo
und num ist 100. Da hast du es. Das heißt also, da wir diese Schlüsselwortargumente
verwenden, bedeutet das, dass Sie an
die Arbeit gehen, auch wenn wir die Reihenfolge umdrehen . Hallo, einhundert. Nun, was sehr cool
daran ist, ist, dass Sie dieselben Variablen
wiederverwenden können , die Sie hier haben. Nehmen wir an, Sie möchten in dieser Zeichenfolge ein paar Mal Hallo
sagen. Du kannst einfach sagen, es müssen keine Unterstriche
sein. Lass uns einfach ein Leerzeichen setzen.
Und ich werde Höhe verwenden. Also ersetzen wir jetzt
vier verschiedene Orte. Wir verwenden jedoch
nur zwei Variablen. Also die Variable hi,
naja, im Grunde haben wir
innerhalb dieser Platzhalter platziert. Wenn wir diese
Schlüsselwörter nicht hätten, würde sich Python beschweren. Lassen Sie mich also darauf zurückkommen, wie
wir das ursprünglich hatten. Sag hallo. Einhundert. Python wird sich beschweren,
weil wir nicht
genügend Ersatz für
diese Platzhalter bereitgestellt haben . In diesem Fall
müssten wir also Hallo und Hallo sagen, was viel Tippen ist. Sie können also sehen, wie nützlich die Verwendung
der Keywords ist. Jetzt gibt es noch eine weitere Möglichkeit
, die Formatierungsfunktion zu verwenden. Und zwar durch die Verwendung,
durch die Verwendung von Indizes. Lassen Sie mich also schnell zu
nur zwei Platzhaltern zurückkehren. Ich könnte das also noch
einmal machen und es wird
einfach der Reihe nach ersetzt. Aber ich könnte gebrauchen,
auch Indizes verwenden. Und was diese Zahlen bedeuten
werden. Dies stellt die Reihenfolge dar
, in der Sie Ihre
Variablen hier platzieren. Und wir beginnen bei
Null zu zählen , genauso wie
wir es mit Listen tun. Sie können das als
das gleiche Ergebnis sehen. Nun, wenn ich diese Indizes
umdrehen würde, würden wir
jetzt die Reihenfolge umdrehen. Und jetzt können wir
dasselbe tun wie mit den Schlüsselwörtern. Ich kann sagen, dass ich hier Hallo sagen
möchte. Nach Orten, die einen Index auf Null setzen. Lass uns nochmal Hallo sagen. Geben wir die Zahl 100 ein. Da hast du es. Also noch einmal, einfach zwei Variablen verwenden, können
wir sie mischen und anpassen, indem wir die Indexzahlen
verwenden. Lassen Sie mich Ihnen nun eine weitere Möglichkeit
zeigen Zeichenketten zu verketten. Und das ist irgendwie die
klassische Art, das zu tun. Ich schreibe
Prozentzeichen s, lasse ein
Leerzeichen und tippe einfach Welt ein. Das wird jetzt
unser Platzhalter sein. Und um es zu ersetzen,
lasse ich ein Leerzeichen, füge ein Prozentzeichen und tippe dann etwas anderes ein. Lass uns nochmal Hallo sagen. Jetzt können Sie sehen, dass alles, was ich hier rechts
eintippe, durch dieses
Prozentzeichen s ersetzt
wird . Indem Sie eine Zahl eingeben, die ersetzt
wird. Jetzt könnte ich auch mehrere machen. Wir sehen den Sinus S. Aber in diesem Fall muss ich eine Liste oder ein Tupel
angeben. Also werde ich ein Tupel verwenden. Ich kann Hallo sagen. Palmer Planets, dieser Fall. Und jedes dieser Elemente
wird durch h ersetzt, eines dieser Elemente im Tupel. Sie geben
dir also alle irgendwie das gleiche Ergebnis. Ich bevorzuge das
Punktformat, weil es Ihnen viele,
viele verschiedene Kombinationen
ermöglicht viele verschiedene Kombinationen und Ihnen ein
bisschen mehr Flexibilität bietet. Sie können jedoch je nach dem Code, den
Sie schreiben, auswählen
,
was für Sie funktioniert . Nun, unter der Haube, ist
eine Zeichenfolge ein bisschen mehr als nur eine Abfolge
von Zeichen. Es ist ein iterierbares Objekt. Das bedeutet, dass Sie
es genauso wiederholen
können wie
wir es mit Listen tun. Also lass mich dir zeigen, was ich meine. Lassen Sie mich eine weitere Zeichenfolge erstellen. Nennen wir es Barcelona, z. B. jetzt, ähnlich oder genauso
wie wir es mit Listen gemacht haben, kann ich. Geben Sie einen Index an, indem Sie
diese eckigen Klammern verwenden. Und wenn ich
den Index Null angebe, weil wir bei
Null anfangen zu zählen, erhalte ich den Buchstaben b. Wenn ich Index Nummer zwei mache, erhalte
ich das kleine R, weil
es der zweite Index ist. Wenn ich nach meinem
Index minus eins fragen würde, was der letzte Index in der Liste oder in diesem
Fall die Zeichenfolge ist. Dann nehme ich den Buchstaben a. Jetzt können
wir mit der gleichen Logik über die
Zeichenfolge iterieren, indem wir eine for-Schleife verwenden. Also können wir für ins sagen, print i, und es wird jeden einzelnen Buchstaben in dieser Zeichenfolge drucken. Unter der Haube ist
eine Zeichenfolge also eher
ein Array oder eine Liste. ist einfach so, dass jeder Es ist einfach so, dass jeder
Gegenstand darin ein Charakter ist. Und es ist auch insofern besonders, als wir bestimmte
Arten von Operationen ausführen
können, genau wie wir es bei der
Verkettung und anderen gesehen haben. Spezifische Operationen, die für Zeichenketten integriert
sind. Lassen Sie mich Ihnen einige
dieser Operationen zeigen. Eine Sache, die Sie mit Zeichenketten
machen können ist Häkchen oder Unterzeichenfolgen. Die Teilzeichenfolge ist
im Grunde ein
Teil einer Zeichenfolge oder
etwas, von dem Sie erwarten
würden, dass es sich
innerhalb einer Zeichenfolge befindet. Lassen Sie mich diese
variable Zeichenfolge umbenennen. Lassen Sie mich eine neue
Variable namens sub string erstellen. Rufen wir an,
machen wir diese Teilzeichenfolge, haben wir die Teilzeichenfolge, sie ist in diesem Fall ausgeliehen oder zusammengebrochen. Dann kann ich das
Schlüsselwort in verwenden, um einen Vergleich durchzuführen. Ich kann Unterzeichenfolge
in einer Zeichenfolge sagen. Diese Operation
gibt mir also einen Booleschen Wert. Wir sagen entweder wahr, wenn die Teilzeichenfolge in dieser
Zeichenfolge enthalten ist, oder falsch, wenn sie nicht enthalten ist. Lassen Sie mich das Ergebnis
in einer Variablen namens
result speichern und dieses Ergebnis drucken. Da hast du es. Es ist wahr, weil sich die Teilzeichenfolge in Barcelona
befindet. Nun, Barcelona hat kein
H. Also lass mich danach suchen. In Barcelona gibt es kein h, also kriege ich Schrauben. Eine andere Möglichkeit, nach Teilzeichenfolgen zu
suchen, besteht darin in
Zeichenketten
eine integrierte Funktion namens starts with zu verwenden. Lassen Sie mich also Rühring Bar nennen
. Und lassen Sie mich diese
Operation durch eine Zeichenfolge ersetzen , die mit einer Teilzeichenfolge beginnt. Damit wird geprüft, ob die Zeichenfolge Barcelona mit einem Balken
beginnt. Auch hier erhalten wir einen
booleschen Wert. Das ist wahr. Wenn ich es z.B. durch high ersetze wird
es falsch sagen, weil
es damit nicht anfängt. Beachten Sie nun, dass hier
auch zwischen Groß- und Kleinschreibung unterschieden wird. Also wenn ich, wenn ich Balken in Kleinbuchstaben mache, wirst
du falsch sagen, weil es damit
nicht installiert wird. Und es gibt das andere Ende
dieser Gleichung,
das mit endet. Lassen Sie mich das jetzt ausführen. Es ist falsch, weil Barcelona
nicht mit Bar endet, sondern Barcelona endet mit NA
, also das wird wahr sein. Das sind also zwei eingebaute
Funktionen für Zeichenketten. Sie können auch die Groß- und
Kleinschreibung einer Zeichenfolge ändern. Es gibt zwei weitere
eingebaute Punkte. Es gibt viele eingebaute
Funktionen für Zeichenketten, aber ich zeige Ihnen nur die
gebräuchlichsten und nützlichsten. Ein anderes ist Opera. Dadurch wird Ihre
Zeichenfolge in einen Großbuchstaben umgewandelt. Also lassen Sie uns das in
derselben Variablen zeichnen. Opera wird groß geschrieben und
Kleinbuchstaben bewirken das Gegenteil,
nämlich Kleinbuchstaben. In diesem Fall gibt es also
nur einen Großbuchstaben. Also wird das
in Kleinbuchstaben umgewandelt, kleiner. Und nach der gleichen Konvention gibt es eine Funktion
namens Titel. Das wird, das wird
deine Zeichenfolge in
Form eines Titels machen . Das ist sehr nützlich für
Dinge wie FirstName, z.B. wenn wir John Smith sagen wollen, titeln Sie jeden
Großbuchstaben oder jeden ersten
Buchstaben in der Zeichenfolge. Es ist intelligent genug, um sich mit Räumen
auszukennen. Wird z. B. einen Großbuchstaben haben. Wie ich bereits erwähnt habe, gibt es viele eingebaute Funktionen in Strings, aber lassen Sie mich
Ihnen nur ein paar mehr zeigen. Bevor wir das abschließen. Sie können
Teile einer Zeichenfolge ersetzen. Du kannst String Dot Replace sagen. Diese Funktion
akzeptiert zwei Argumente. Das, was Sie ersetzen möchten, sagen
wir, wir möchten diesen Nachnamen
ersetzen. Und die Teilzeichenfolge, die
Sie durch diese Breite ersetzen möchten. Nehmen wir an, wir
ersetzen das durch Williams, also ersetzen wir das. Dies ist sehr nützlich, um
Dinge wie Leerzeichen zu entfernen, z. B. wenn Sie ein Leerzeichen ersetzen möchten, ein Leerzeichen eingeben
können. Eliminiere einfach den Raum. Du kannst es z.B. durch
eine leere Zeichenfolge ersetzen und ich werde das Leerzeichen einfach
weglassen. Das Letzte, was ich dir zeigen
möchte, ist, wie man die Fäden teilt. Stellen
wir uns vor, wir wollen
den Namen übrigens aufteilen ,
dieses Leerzeichen hier. Verwenden wir diese Split-Funktion. Und als erstes Argument wird das Zeichen
verwendet, nach dem
Sie teilen möchten,
bei dem es sich um ein Leerzeichen handelt. Also geben wir ihm einfach ein Leerzeichen. Lassen Sie uns den Code ausführen. Also ich bekomme eine Zeichenfolge,
tut mir leid, ich bekomme eine Liste. Ich muss
alles auflisten, was
vor und nach diesem Leerzeichen war . Nun, wenn ich mehr Leerzeichen habe, sagen
wir, ich tippe hier
etwas anderes ein. Jetzt haben wir drei Leerzeichen, was bedeutet, dass wir
vier Abschnitte erhalten. Wenn es nun überhaupt
keine Leerzeichen gäbe, würde es nichts finden,
nach dem es aufgeteilt werden könnte. Also gibt es
mir einfach dieselbe Zeichenfolge, die ursprüngliche Zeichenfolge,
aber als Liste. Und das funktioniert mit allen Charakteren, mit
denen du dich trennen möchtest. Nehmen wir an, ich habe einige Perioden und
möchte mich mit diesen teilen. Jetzt habe ich dieselben
vier Abschnitte. Nun gibt es noch ein Argument
, das diese Funktion benötigt, und das ist die Anzahl der Vorkommen, die
Sie aufteilen möchten. In der Standardeinstellung
werden sie also alle ausführen. Jede einzelne Periode
, die es in
diesem Fall findet ,
wird aufgeteilt. Aber ich kann dich bitten,
einfach den ersten zu machen, z.B. wird
es den ersten teilen
und dann den Rest ignorieren. Ich kann es bitten, nur zwei zu machen. Und da hast du es. Die ersten beiden werden
aufgeteilt und die letzte, wir bleiben wie sie sind. Das war also nur eine kurze
Einführung in Zeichenketten. Es gibt noch viel mehr, was
Sie mit ihnen machen können. Ich ermutige Sie wirklich, mit ihnen zu
experimentieren und zu spielen. Und ich
empfehle Ihnen auch dringend, die Dokumentation für Python
online zu
lesen, da ist eine Menge Zeug drin. Auch dies war nur
eine einfache Einführung, aber ich habe Ihnen einige der meiner Meinung nach gebräuchlichsten Operationen gezeigt ,
die Sie mit
Zeichenketten ausführen können, die Ihnen
bei Ihrer
täglichen Codierung helfen werden . Hoffentlich kennen Sie sich mit
Saiten
besser aus und hoffentlich war
es klar genug, dass Sie sich
viel wohler fühlen werden , mit ihnen zu
arbeiten.
31. Deep Dive - Loops: Okay, lasst uns mehr
über Loops in Python lernen. Looping bedeutet im Grunde,
etwas immer und
immer wieder zu tun . In Python gibt es zwei Haupttypen
von Schleifen. Eine davon ist eine For-Schleife, andere ist eine While-Schleife. Gehen wir also
die For-Schleife durch. Erstklässler für Loop. Es ist sehr einfach. Sie verwenden
das Schlüsselwort für Sie. Wir sagen für etwas
oder für jeden Gegenstand. Lassen Sie uns also für ein Element in der Liste eine Liste erstellen. Lass uns einfach eine
Liste mit Zahlen haben, 12,3, und dann hast du einen Doppelpunkt. Und dann
hast du innerhalb dieser Schleife diese Einbuchtung. Innerhalb dieser Schleife werden
Sie irgendeine
Art von Operation ausführen. Lassen Sie uns jetzt einfach
den Artikel drucken, z. B. lassen Sie mich das ausführen. Wie Sie sehen können, drucken
wir 123. Was also passiert, ist, dass wir im Grunde sagen,
dass
jedes Element in dieser Liste in dieser
Variablen namens item
gespeichert wird . Jetzt habe ich diese Variable gewählt, du kannst sie anders nennen. Normalerweise siehst du so
etwas wie Ich.
Also für I in der Liste können
wir I ausdrucken Los
geht's. Das bedeutet also, einfach jeden von
ihnen
durchzugehen und ihn durch den Wert
dieses Elements in der Liste zu
ersetzen . Lassen Sie uns das ein
wenig ändern und 12.3 sagen. Jetzt das gleiche Ergebnis. Nehmen wir nun an, wir möchten die Zahlen 1-100
drucken. Es gibt also eine Funktion namens Bereich, die
Ihnen im Grunde einen Zahlenbereich gibt. Nehmen wir an, wir wollen 100 Zahlen. Lassen Sie uns I im Bereich 100 drucken. Lass uns drucken, dass etwas
passiert ist, wir bekommen 99. Mal sehen warum. Lassen Sie uns diesen
Schraubenschlüssel tatsächlich etwas kleiner machen. Sagen wir fünf, z. B. erhalten
wir die Zahlen 0-4. Das liegt also daran, dass
die Bereichsfunktion bei Null zu zählen
beginnt. Wir könnten das in Ordnung bringen. Wir könnten sagen, wir könnten einen echten Schraubenschlüssel
weitergeben. Wenn Sie nur eine einzelne Zahl
übergeben, beginnt
sie bei Null
bis zu der Zahl davor, der von Ihnen angegebenen Zahl
, zu zählen bis zu der Zahl davor, der von Ihnen angegebenen Zahl
, . Aber wenn wir
1—5 angeben, erhalten
wir in diesem Fall eins bis
vier, denn diese Zahl, die zweite Zahl, ist
nicht, sie ist exklusiv. Das bedeutet, dass Sie eine hinzufügen müssen
, um die gewünschte Nummer
des gewünschten Bereichs zu erreichen. Wenn wir also sagen, dass der Bereich eins bis sechs tatsächlich eins bis fünf
ergibt, kann das
etwas verwirrend sein, aber so funktioniert diese
Funktion. Dafür gibt es natürlich Gründe, aber man
muss wirklich nur wissen,
dass es so funktioniert. Hervorragend. Also
gibt uns die Filiale eins bis fünf. Nun, wenn Sie sehen wollen,
was Schraubenschlüssel tatsächlich tun, ist,
eine Liste dieser Zahlen zu erstellen, wir arbeiten
immer noch einfach mit einer Liste. Hervorragend. Wir speichern also diesen Wert jeder
dieser Zahlen
in dieser Variablen I, aber das bedeutet nicht, dass
wir ihn verwenden müssen. Nehmen wir an, wir möchten Hallo Freund 100 Mal
drucken. Wir können einfach sagen, gib mir einen Bereich von 100 Zahlen. Mir ist egal, was sie sind
, weil ich sie nicht brauche. Ich brauche nur die Liste,
um sie
100 Mal durchgehen und
diese Zeichenfolge 100 Mal drucken zu können . Hallo, print, los geht's. Aber wir könnten auch
ein bisschen rechnen. Wir könnten beispielsweise Hallo mal zwei sagen, sodass jedes Element im Bereich mit zwei multipliziert
wird. Das drucken wir. Und da hast du es. Sie erhalten also dieses Ergebnis.
Die For-Schleife verwendet also ein iterierbares Objekt,
etwas, durch das sie iterieren
kann. Es können LEDs sein, normalerweise eine Liste, es könnte auch ein Tupel
sein, z. B. erstellen
wir
anstelle einer Liste ein Tupel, das wie eine Liste ist, aber
Sie können es nicht ändern. Also wird es dreimal gedruckt. Oder wir könnten auch eine Zeichenfolge
verwenden, z. B. können
wir a, b, c, d sagen. Wir können, wir können
über eine Zeichenfolge iterieren. Und was wird passieren? Lassen Sie mich in diesem Fall r drucken, damit
es einfach jedes dieser Zeichen
in
der Zeichenfolge
durchläuft . Nach der gleichen Logik
könnten wir eigentlich
alles drucken, was wir wollen, und diese Zeichenfolge als das Ding
verwenden, das
uns die Anzahl
der Schleifen gibt, die wir mit unserer For-Schleife
machen werden . So funktioniert die
For-Schleife. Nun, die while-Schleife
benötigt nichts, was du kannst, ein Objekt, über das ich iterieren
kann, ein Objekt, über das ich iterieren
kann, sondern eine Bedingung. Das heißt also, solange eine Bedingung wahr ist, solange etwas wahr ist. Mach etwas innerhalb
dieser Schleife. In diesem Fall könnte ich also noch
einmal drucken, hallo Freund. Wenn ich das mache, wenn ich diesen Code jetzt ausführe, treten
wir in
eine sogenannte Endlosschleife ein. Das liegt daran, dass wahr immer wahr sein
wird. Es wird also niemals etwas aufhalten , das
Sie berücksichtigen müssen. Und Sie müssen vorsichtig
sein wenn Sie While-Loops
verwenden. Sie müssen
sicherstellen, dass Sie
Ihren Zustand irgendwann aktualisieren . Also lasst uns etwas tun,
das wir aktualisieren können. Nehmen wir an, wir wollen
anfangen, Zahlen zu zählen. Wir beginnen mit der Zählung bei Null. Und wir werden sagen,
obwohl die Zählung geringer ist, tut es uns leid. Während zählen, ja, solange die
Zählung weniger als fünf ist, z. B. drucken Sie Hallo Freund. Nun, wie die aktuelle
Serie ,
wird dieser Code wieder für immer laufen. Es wird eine weitere
Endlosschleife sein, da das
Zählen dieses Falls
immer weniger als fünf ergibt. Es sei denn, ich aktualisiere meine Variable. Ich kann sagen,
zählen ist gleich Zahl plus eins. Ich füge der Zählung im Grunde
eine Eins hinzu. Jedes Mal, wenn wir enden, machen wir eine Schleife,
wir treten in diese Schleife ein. Was hier also passieren wird, ist, dass die While-Schleife
die Anzahl überprüft, wenn weniger als fünf gezählt
wird. Ja. Dann führe diese Operationen hier aus. Nachdem wir nun Hallo Freund gedruckt
haben, fügen wir eins hinzu, um zu zählen. Das würde den Account
zu einem machen, oder? Also gehen wir wieder in
die Schleife,
oder die While-Schleife überprüft erneut, Zähler weniger als fünf
ist? Ja, drucke Hallo Freund. Dann werden wir noch
eins hinzufügen, um zu zählen, und so weiter und so fort,
bis wir bei fünf sind. Und dann
überprüft die While-Schleife , ob sie weniger als fünf zählt. Nein. Dann wird es beendet und mit dem weitergemacht,
was nach der Schleife ist. Also lass mich
nach dem Loop etwas ausdrucken. Nur um dieses Beispiel
etwas klarer zu machen. Und lassen Sie uns einfach diesen Code ausführen. Lassen Sie mich hier mein
Ausgabefenster leeren. Lassen Sie uns diesen Code ausführen. Wie Sie sehen können, ist
nichts passiert. Warum ist das so? Nun, weil ich vergessen habe,
das Konto zurückzusetzen , weil der
Zähler fünf ist. Der Rollup fragt
also, ob weniger als fünf gezählt werden soll? Nein, es
macht eigentlich nichts. Und es geht direkt zum
Drucken der While-Loop. Setzen wir also den Zähler wieder auf Null und führen den Code erneut aus. Da hast du es. Jetzt drucken wir
Hallo Freund 12345 mal
und dann beenden wir den Vorgang. Lassen Sie uns also die
Zählvariable überprüfen. Sie können sehen, dass es ab 01234 geht. Das letzte Mal
läuft es um fünf Uhr, was bedeutet, dass die
Schleife nicht beginnt. Hervorragend. Und dann drucken wir das, was auch immer nach der Schleife kommt. Übrigens kann ich, ich kann diese
Codezeile ein bisschen einfacher machen. Aber zu sagen,
dass
Plus gleich Eins ist, ist eine Abkürzung für das, was bedeutet, dass Sie einfach
eins zu dieser Variablen hinzufügen und
es funktioniert genauso. Das sind also While-Loops. Wieder einmal arbeiten sie
mit dieser Bedingung. Sie müssen also darauf
achten,
diesen Zustand jedes Mal zu aktualisieren , wenn
Sie sich innerhalb der While-Schleife befinden. Andernfalls besteht die
Gefahr eine Endlosschleife entsteht, die Ihre Anwendung im Grunde
zum Absturz bringt. Denn nach einer Weile geht
der Speicher aus oder es tritt ein
sogenannter Segmentierungsfehler auf, was bedeutet, dass es
versucht, auf
Speicher zuzugreifen , auf den Sie keinen Zugriff
haben sollten, sodass es einfach abstürzt. Es ist nicht das Ende der
Welt, es passiert jedem, es wird
dir irgendwann passieren. Sie müssen nur Ihre Arbeit
neu starten. Der Weg,
die While-Schleife zu beenden,
besteht also erneut darin, die Bedingung zu verwenden. Aber es gibt noch eine andere
Möglichkeit, die While-Schleife zu beenden. Nehmen wir an, wir möchten aus
irgendeinem Grund das Konto
beenden. Wenn das Konto gleich drei ist, wollen
wir aufhören. Wir könnten also einfach sagen, wenn die Zählung weniger
als vier ist, hör auf. Wir könnten aber auch sagen, ob die
Zählung drei Pausen entspricht. Lassen Sie uns das jetzt ausführen. Da hast du es. Also hören
wir jetzt um drei auf. Sie denken also vielleicht, das bedeutet, dass wir die Bedingung nicht
brauchen. Wir könnten einfach sagen: Es ist wahr. Führe das alles aus. Wenn die Zählung gleich 33 ist, brechen
wir einfach ab. Solange wir die
Zählvariable immer noch erhöhen, funktioniert das. Das ist jetzt komisch. Das ist
kein wirklich netter While-Loop, aber ich verwende ihn nur als
Beispiel, um es dir zu zeigen. Technisch gesehen
sollte das für immer laufen. Aber die Pause, diese Break-Anweisung, wird die Schleife
im Grunde verlassen. Sehen wir uns das in Aktion an. Da hast du es. Wir haben gedruckt, wir haben
Hallo Freund dreimal gedruckt. Das liegt daran, dass ich
meine Print-Anweisung für
die Count-Variable entfernt habe . Lassen Sie mich das hinzufügen.
Wir wollen also nicht 0123 und machen einfach Schluss. Also tun wir nicht, wir
drucken danach keine drei. Jetzt können wir
dieselbe Break-Anweisung verwenden um die Aufwärtsschleife zu stoppen. Lassen Sie mich also weitermachen und noch einmal
über 100 Zahlen
für I im Bereich 100 wiederholen. Und lassen Sie uns das ausdrucken. Ich lasse, lass es mich 20 machen, damit es nicht
zu lange dauert. Also drucken
wir die Zahlen 0-19. Und dann
drucken wir diese Zeichenfolge. Es schaltet das um, um zu sagen. Wenn wir also die
For-Schleife an einer Ortsnummer stoppen wollen, können
wir sagen, ob I
gleich zehn ist, also können wir brechen. Da hast du es. Wenn wir also neun sind, bin ich
das nächste Mal zehn, und dann brechen wir
aus dem Kreis aus. Das ist also eine weitere Möglichkeit, der Schleife
ein Ende zu setzen. Ein weiteres sehr nützliches
Schlüsselwort ist der Schlüssel, diese Aussage, und seine
kontinuierliche Aussage. Das funktioniert jetzt
sowohl für Loops als auch für While Loops. Die
Continue-Anweisung
stoppt die
Ausführung des Codes an diesem Punkt und kehrt zur Schleife zurück und geht
zur
nächsten Iteration der Schleife über. Also, was dieser Hang sein soll,
ist ein Sprint mit
jeder Zahl von 0-19. Aber wir setzen dieses Häkchen, wenn ich bin, dass die aktuelle
Iteration zehn ist, fahren wir fort, was bedeutet, dass
wir nicht auf
diese gedruckte Aussage eingehen werden. Schauen wir uns an, wie das funktioniert. Da haben wir es. Wir gehen 01 234-567-8910
und wir gehen zu 11. Lassen Sie uns das jetzt
etwas offensichtlicher machen. Nehmen wir an, wir möchten nur Zahlen
drucken, die durch zwei teilbar
sind. Nehmen wir also an, wenn ich modulo
zwei ungleich Null, bedeutet das, dass die Zahl nicht durch zwei teilbar
ist. Wir werden mit der nächsten Iteration fortfahren
und diese Zahl
nicht drucken. Da hast du es. Wir haben also 0246810. Sie sehen, dass im Grunde
jede zweite Zahl
übersprungen wird , weil sie
nicht durch zwei teilbar sind. Nun, das
entspricht der Aussage ob die Zahl durch zwei
teilbar ist, wenn ich zwei modulo, ist
das Ergebnis Null. Miete. Sonst mache ich nichts. Ja, Sie können sehen, dass
es das gleiche Ergebnis ist. Es ist also das gleiche Ergebnis. Wir verwenden nur die
Continue-Anweisung , um diese Logik umzukehren. Und Sie fragen sich vielleicht
warum, warum tun wir das? Nun, stell dir vor, du willst hier
einfach
weiter Code schreiben. Also mehr Code und
dann immer mehr. Das gibt Ihnen
die Möglichkeit, sich nicht um die Einrückung kümmern zu
müssen und einfach einen
kurzen Haken zu setzen, um
die Ausführung des Codes
an der von Ihnen gewünschten Stelle zu stoppen . Und gehen Sie zurück und fahren Sie mit
dem nächsten Punkt fort,
welche Krankheit auch immer, in diesem
Fall ist es eine Liste von Zahlen. Da hast du es also. Bei Loops und While Loops handelt es sich um sehr einfache Konzepte, einfach immer
wieder etwas getan wird. Aber sie sind äußerst
nützlich, extrem leistungsfähig, und Sie werden sie auf Ihrer Codierungsreise häufig verwenden.
32. Deep Dive - Listen, Tupel, Sets: Lassen Sie uns über Listen sprechen. Listen sind eine Sammlung
von Objekten. Und was ich mit Objekt meine, ist
jede Art von Python-Objekt. Es kann eine Zeichenfolge sein, es kann eine Funktion,
eine Ganzzahl, ein Float sein. Es kann sogar eine andere Liste sein. Sie können Listen ineinander
verschachteln lassen. Das werde ich dir zeigen. Und ich wollte auch über
zwei andere Typen
sprechen , nämlich Tupel und Mengen. Also werden wir
über diese drei sprechen. Alle diese drei
können insofern als
ähnlich angesehen werden , als
sie alle eine
Sammlung von Objekten speichern. Und was Sie
mit Tupeln und Mengen erreichen können. Sie können
dies auch mit Listen erreichen. In den meisten Fällen
können Sie einfach Listen verwenden. Und sie sind wirklich einer
der am häufigsten verwendeten Datentypen in Python für den Umgang mit
Sammlungen von Objekten. Sie können sich also an weniger halten,
als Sie erreichen können. Das Gleiche, was Sie mit einem Bolzen und Sätzen
erreichen können . Vor diesem Hintergrund verhalten
sie sich sehr
unterschiedlich und sie haben sehr einzigartige Anwendungsfälle. Lassen Sie mich also mit Listen beginnen und dann werden wir uns mit Tupeln und Mengen befassen. Lassen Sie uns unsere Liste erstellen. Es gibt zwei Möglichkeiten, eine
Liste zu erstellen. Ich werde eine
Variable namens mylist erstellen. Jetzt
rufe ich meine Variablenliste absichtlich nicht weil list der eigentliche
Listentyp in Python I ist und ich das nicht überschreiben
möchte. Das werde ich
dir gleich zeigen. Also
nenne ich das meine Liste. Und ich werde die Liste
erstellen. Um einen Alias zu erstellen, verwenden Sie also eckige Klammern und trennen dann Ihre
Elemente durch ein Komma. Also gaben sie plötzlich
Zahlen an. Ireland Meter,
sprinte diese MyList. Da hast du es. Die andere Möglichkeit, eine Liste zu
erstellen, besteht darin etwas in eine Liste umzuwandeln. die gleiche Weise können Sie es mit
Zeichenketten oder mit einer Ganzzahl machen , z. B. gibt es einen Listentyp und Sie können etwas
in eine Liste einfügen. Wie Sie vielleicht bereits wissen, verhalten sich Zeichenketten
unter der Haube wie Listen. Wir können also tatsächlich
eine Zeichenfolge in eine Liste umwandeln. Wir speichern
es in einer Variablen namens a. Das bringe ich einfach
mit. Was passieren wird
, ist, dass die Zeichenfolge in ihre Teile,
in ihr Merkmal
zerlegt wird und
das Ergebnis wird eine Liste sein. Das sind also zwei Möglichkeiten, eine
Liste zu erstellen. Deshalb vermeide ich es, meine Variablenliste
aufzurufen. Denn wenn ich das tun würde, würde
ich
das einfach überschreiben und dann wäre es
im Grunde kaputt. Es gibt Möglichkeiten,
das zu beheben, übrigens, lassen Sie mich Ihnen zeigen, dass ich,
wenn ich das tun würde, eine
Fehlermeldung erhalte, weil ich jetzt die Funktionalität
dieses Listenschlüsselworts
praktisch außer Kraft gesetzt habe. Wenn dir das jemals passiert, kannst
du „Liste löschen“ sagen. Sie werden auflisten. Und jetzt sollten sie
wieder funktionieren , weil wir diese Funktionalität
zurücksetzen können. Großartig. Was können
wir also mit Listen machen? Das Erste, was wir
mit Listen machen können, ist eine Schleife über sie oder eine Iteration
über ihre Mitglieder. Also können wir für I in der Liste sagen, ich
ausdrucken und los geht's. Wir können auf jedes
ihrer Mitglieder zugreifen,
indem wir einfach einen For-Loop verwenden. Das wird etwas
sehr Alltägliches sein. Sie werden
übrigens Listen durchgehen. Sie können aber auch überprüfen, ob etwas in unserer Liste enthalten ist. Wir können sagen, lassen Sie uns
eine Variable namens result erstellen. Und sagen wir, lassen Sie uns überprüfen,
ob die Nummer zwei
in der Liste steht . Um sich anzumelden. Wir können das Ergebnis ausdrucken. Da hast du es. Diese Überprüfung
gibt uns also einen booleschen Wert, entweder wahr oder falsch. Das können wir auch in einer
if-Anweisung verwenden. Wir können sagen, ob zwei auf meiner Liste stehen. Lassen Sie uns einfach die Liste ausdrucken. Wenn wir nun
nach etwas anderem suchen, sagen
wir Nummer zehn, das ist nicht in der Liste enthalten. Es wird nichts drucken.
Sagen wir also, lassen Sie uns eine Else-Anweisung hinzufügen
und sagen, drucken, nicht in der Liste. Großartig. Wie ich bereits erwähnt habe, kann
Ihre Liste
jede Art von Objekten enthalten. Du kannst Zahlen haben,
du kannst eine Zeichenfolge haben, du kannst Floats haben. ZB können Sie sogar eine
Liste in dieser Liste haben. Lassen Sie mich also eine weitere Liste
mit einfach zwei Zahlen erstellen. Lassen Sie uns diese Liste tatsächlich
durchgehen. Oder in meiner Liste. Hallo. Da hast du es. Wie Sie sehen können, haben wir
diese Zeichenfolge und wir
haben sogar die Liste in
dieser anderen Liste. Es ist sehr nützlich zu überprüfen, ob etwas in Ihrer Liste enthalten ist. Sie können aber auch Artikel
aus Ihrer Liste abrufen. Lassen Sie mich also eine einfachere Liste erstellen , da diese
etwas chaotisch geworden ist. Lassen Sie mich drei Zeichenketten hinzufügen, 1 ,
s, und dann nur die Zahl
drei, das ist alles. Damit wir also ein
Element aus einer Liste abrufen
können, verwenden wir den Index, und zwar
die eckigen Klammern. Lassen Sie mich Indizes
visueller erklären. Stellen Sie sich vor, Sie haben
Ihre Liste hier. Nehmen wir an, wir haben eine Liste
mit vier Elementen. Jedes Element hat einen Index, und es ist im
Grunde alles von links nach rechts geordnet, und wir beginnen bei Null zu zählen. Das mag manchmal
verwirrend sein, aber das erste Element
in der Liste ist die Indexnummer Null
ist das Null-Element. Der zweite wird einer sein. Die dritte wird darin bestehen,
sich eins zu leisten, werden drei sein. Jetzt gibt es eine andere Möglichkeit,
Indexindizes zu erhalten , indem
negative Zahlen verwendet werden. Also lass mich das rückgängig machen. Lassen Sie mich diese
Indizes hier unten platzieren. Wir können es in
umgekehrter Reihenfolge machen. Wir können sagen, dass der letzte Wert in der Liste der
Index minus eins sein wird. Dann wird der
vorletzte minus zwei sein. Der drittletzte minus
drei. Minus vier. Wir beginnen nicht bei Null
, weil wir natürlich nicht minus Null
sagen können . Wenn Sie also jemals
den ersten Index oder das
erste Element in der Liste abrufen möchten , sagen
Sie einfach Null. Wenn Sie das
letzte Element der Liste abrufen möchten, können
Sie entweder wissen, was der letzte Index ist. Dies wäre
die Anzahl der Elemente in
der Liste, wäre
die Anzahl der in diesem Fall sind es vier Elemente minus eins, da
wir bei Null anfangen zu zählen. Und das wird
dein letzter Index sein, der
das letzte Element sein wird. Oder Sie können auch
einfach minus
eins eingeben , ohne zu wissen, wie
viele Elemente in der Liste enthalten sind. Kehren wir also zu
unserem Code zurück , um die
Elemente anhand der Indizes abzurufen. Wir verwenden die Notation mit eckigen
Klammern. Und in diese
eckige Klammer setzen
wir den Index und wir wollen, also wenn wir unser Element wollen, lassen Sie mich das in einer Variablen speichern. Lassen Sie mich es einfach direkt
ausdrucken. Ich werde das
erste Element in der Liste drucken, das wird die Zeichenfolge 10 sein. Wenn ich das zweite Element haben möchte, wird
es die erste
Indexnummer eins nach dem anderen sein. Der dritte wird Index Nummer zwei
sein. Wenn ich nun die Indizes durchgehe, sagen
wir, ich möchte den vierten, aber es gibt
keinen vierten in der Liste, dann erhalte ich die
Fehlermeldung, dass der Index eisenreich ist. Nach der gleichen Logik
, die ich Ihnen gerade gezeigt habe, können
Sie nun die letzte erhalten, die minus
eins ist, also drei. Wir fahren mit dem vorletzten
fort, es wird minus zwei sein und so weiter und so fort. Es gibt eine, es gibt zwei Möglichkeiten, Ihre Grenzen zu kennen
, um an das Limit oder ans Ende Ihrer Liste
zu gelangen. Das ist natürlich ein
Abrufen, bei dem
nur das letzte Element
mit dem Index minus eins ermittelt wird. Sie können aber auch überprüfen,
wie lang Ihre Liste ist. Ich kann sagen, dass ich die
Funktion Len L-E-N verwenden kann. Gib meine Liste hinein. Lassen Sie mich die Länge des Ergebnisses ausdrucken. Damit habe ich drei,
das liegt daran, dass die Liste
drei Elemente enthält. Wenn ich noch einen hinzufüge, sind es
jetzt vier. Sie können dies also verwenden, um auch den letzten Artikel zu
erhalten oder einfach um zu wissen, wie
viele Artikel erwartet werden. Denn manchmal hat
man eine Liste mit Hunderten oder Tausenden von Artikeln und kann nicht immer den Überblick
behalten. Das ist also eine Möglichkeit, diesen Wert immer
abzufragen. Was wir
jetzt tun können, ist meine Liste zu sagen. Um das letzte Element zu bekommen, kann
ich die Länge minus eins berechnen , weil wir bei Null anfangen
zu zählen. Das wird uns also vier geben. Da hast du es. Sie können auch nicht nur
einen Artikel aus der Liste abrufen, Bora, einen Teil der Elemente aus der Liste können Sie, das
nennt man Slicing. Sie können Ihre Liste ausschneiden und
einen Teil dieser Liste als
Kopie erhalten einen Teil dieser Liste als , damit ich
Ihnen zeigen kann, wie das funktioniert. Für diese verwenden wir auch die Notation mit eckigen Klammern und wir verwenden auch Indizes, die bei Null
beginnen. Aber jetzt, da
wir einen Bereich verwenden, verwenden
wir den Doppelpunkt in einem Doppelpunkt in eckigen
Klammern. Also fordern wir an,
holen wir uns eine Kopie oder holen wir uns eine Liste von Listen, die die ersten
drei Elemente in unserer Liste sind. Das heißt, wir wollen von Index
Null zu Index Nummer zwei. Lassen Sie uns also
vom Index Null als
ersten Index anfragen und mit
Index Nummer zwei fortfahren. Lassen Sie uns das nun in
einer Variablen namens range speichern. Jetzt
rufe ich diesen Variablenschlüssel absichtlich nicht weil es
eine andere Funktion
namens range gibt , die in Python
integriert ist. Lass es mich dir ganz
schnell zeigen, aber das tut es. Das nennt man Schraubenschlüssel. Und ich werde
einen Bereich von fünf Zahlen anfordern. Es wird mir also eine Liste
mit fünf Zahlen von
Null bis vier geben , weil wir bei Null
anfangen zu zählen. Wenn ich also
diesen Variablenbereich aufrufen würde, würde ich ihn überschreiben. Und normalerweise ist es nein, es ist kein Problem Wenn
ich
die Bereichsfunktion in meinem
Code nicht wirklich benötige , ist das kein Problem, aber es wird normalerweise empfohlen, sie
nicht zu überschreiben. Integrierte Funktionen sind in Python
eingebaute Typen. Gehen wir also zurück zu unserem Schneiden. Lass mich nach Orange drucken. Also
fordern wir erneut von Index Null bis Index zwei an. Also sollten wir
diese drei Punkte bekommen , die logischerweise
Sinn machen, oder? Aber wir haben es geschafft. Wir haben die ersten beiden. Der Grund dafür
ist, dass in diesem Slicing der erste Index, den Sie
angeben, enthalten wird. Der zweite Index, den Sie
angeben, ist jedoch nicht inklusiv, sondern exklusiv,
was bedeutet, dass Sie
alles bis zu dem
Element vor diesem Index abrufen . Wenn wir also das dritte
Element erhalten wollen, das Index zwei ist, müssen
wir eins dazu hinzufügen. Und jetzt bekommen wir, was wir wollen. Das kann manchmal etwas
verwirrend sein. Und es gibt natürlich
mehrere Gründe, warum das so funktioniert. Aber mit etwas Übung wird dir das
zur Selbstverständlichkeit werden. Es gibt noch ein Element, das
wir dem Schneiden hinzufügen können, und das ist der Schritt. Wenn wir
hier in den eckigen Klammern eine weitere Spalte hinzufügen, ist der Schritt
standardmäßig
eins und der Schritt besteht
darin , die
von
Ihnen angeforderte Kopie der Liste zurückzugeben . Lass mich das z.B. machen. Standardmäßig ist dieser Schritt also einer, was bedeutet, dass wir jeden einzelnen Artikel
im angeforderten Bereich
erhalten . Wenn ich Schritt zwei machen würde, würden wir im Grunde
jeden zweiten Artikel bekommen. So
können Sie also auch mit dem Schneiden umgehen. Ich wollte Ihnen auch
zeigen, dass Sie nicht unbedingt standardmäßig
Indizes angeben müssen. Wenn Sie es nicht wissen, wenn Sie
keine Indexnummer angeben. Der erste Platz hier, dies wird der
allererste Index sein. Und standardmäßig ist
dies das Ende der Liste. Also, wenn ich das einfach tun würde, würde
ich eine Kopie
der Liste mit jedem
einzelnen Element darin bekommen . Da hast du es. Wenn ich nun sagen würde, dass ich
alles außer dem ersten will , könnte
ich bei
Index eins beginnen und
diesen im zweiten leer lassen und einfach das Licht
am Ende der Liste einschalten . Und das Gegenteil ist dasselbe. Wir können einfach
drei eingeben und wir
werden bis zum
zweiten Index der Liste weitermachen. Okay, lassen Sie uns über eine
der wichtigsten Eigenschaften von Listen sprechen . eine Liste so
einzigartig macht , ist, dass sie
unveränderlich ist. Was nun veränderlich bedeutet,
ist, dass sie an Ort und Stelle geändert
werden können . Und es gibt etwas, bei dem
Sie dieser
Immobilie vorsichtig
sein und es im Hinterkopf behalten müssen. Lassen Sie mich also eine leere Liste erstellen, diese eckigen Klammern,
das ist eine leere Liste. Und lassen Sie mich dieser Liste
etwas hinzufügen. Um der Liste etwas hinzuzufügen, können
Sie Punkte anhängen. Fügen wir eine einfachere Zeichenfolge hinzu. Ich kann, sagen wir eins. Und lassen Sie uns dieses
Ergebnis ausdrucken. Es ist gedruckt. Lassen Sie uns also eine Liste drucken. Bevor wir eine Zahl hinzufügen, sind wir, bevor wir ein Element hinzufügen, und dann, nachdem wir das Element
hinzugefügt haben. Wenn ich das geklärt habe,
führen wir den Code erneut aus. Wie Sie sehen können, erhalten
wir zuerst eine leere Liste. Und dann haben wir diese Listen
mit einem einzigen Element. Das macht Sinn, oder? Jetzt. Was passiert, wenn ich
eine weitere Variable hinzufüge und dieser Variablen eine
zuweise? Lassen Sie uns nun
a und B drucken. A und B. Fügen
wir etwas zu a und lassen Sie uns erneut a und B drucken. Also lass mich, lass uns drucken, lass es uns ein kleines Etikett geben. Wir wissen also, welcher welcher
ist, sagen wir B, B. Und lassen Sie uns das Gleiche hier oben tun. Ich
erstelle wieder eine leere Liste. Ich weise diesem Interlaced
eine Variable namens a zu. Und dann erstelle ich eine
Variable namens B und weise A zu Soweit
so gut, richtig,
also sollten sowohl a als auch B
im Wesentlichen leere Listen sein. Dann drucke ich diese Zentralisten. Lassen Sie mich mein Ausgabefenster leeren. Dann füge ich für eine
Sekunde etwas
hinzu und überlege,
was deiner Meinung nach
passieren wird , wenn wir
A und B erneut drucken. Jetzt hat ein hat, hat ein
Element drin. Aber was ist passiert? Interessant. Also sind a und B zuerst leer, und dann haben sowohl a als auch
B ein Element. Lassen Sie uns das jetzt
noch klarer machen. Jetzt füge ich
etwas hinzu, das sein soll. Ich werde nur darauf hinweisen,
tut mir leid, eine Zeichenfolge, die zwei sagt. Lassen Sie uns das noch einmal drucken. Also sind sowohl a als auch B gleich. Das ist seltsam, weil man
denken würde , dass A und B unabhängig
wären. Dies ist etwas, das
Sie
bei der Verwendung von Listen sehr
sorgfältig abwägen Sie
bei der Verwendung von Listen sehr
sorgfältig müssen,
da diese Sie
überraschen können. Das nennt man einen Zeiger. Im
Speicher befindet sich immer ein Zeiger auf die Liste
, die Sie erstellt haben. So wird aus einem Teichzeiger. Und was auch immer Sie mit a machen, auch wenn Sie es b zuweisen, b ist im Grunde
keine neue Liste. B zeigt auf a.
Was auch immer mit a passiert,
wird sich in B widerspiegeln. Was auch immer mit a passiert,
wird sich in B widerspiegeln Weil B einfach
zum ursprünglichen Zeiger a zurückkehrt.
Das ist sehr nützlich, weil
Sie damit den
Überblick über viele Daten behalten, Ihre Daten ändern,
ändern können Überblick über viele Daten behalten, Ihre Daten ändern, ,
wo immer Sie möchten, und immer noch dieselbe
Liste von Elementen im Speicher haben. Es kann jedoch verwirrend sein,
wenn Sie erwarten, dass zwei verschiedene Listen mit zwei
verschiedenen Listen
funktionieren. Um das zu beheben, müssen Sie
, wenn Sie zwei verschiedene Listen haben möchten, nur zwei leere Listen
erstellen. Und dann ist das, was
Sie erwarten würden. Jetzt
verhalten sich a und B getrennt. Das ist also, das ist Wandelbarkeit. Wie Sie gesehen haben,
beginnen wir mit
einer leeren Liste und
ändern sie dann an Ort und Stelle. Das bedeutet also, dass wir
Dinge hinzufügen können , indem
wir Dinge anhängen. Und das bedeutet auch, dass wir Dinge von der Liste
entfernen können. Gehen wir zurück zu einer einzigen
leeren Liste namens a. Lassen Sie uns, lassen Sie uns nein,
lassen Sie uns sie nicht leer machen. Geben wir ihm ein paar
Fäden hinein. Also hat a jetzt zwei Zeichenketten. Wir können Dinge von
mir entfernen , indem wir die Funktion Entfernen verwenden. Lassen Sie uns zwei entfernen und
dann drucken. Okay. Da hast du es. Also hat a jetzt nur noch
11 Zeichenketten drin. Wenn Sie nun versuchen,
etwas zu entfernen , das nicht
in der Liste enthalten ist, z. B. diese Zeichenfolge drei zu
entfernen, erhalten Sie eine Fehlermeldung,
da dort steht, dass x, was Sie
entfernen möchten, nicht im Listensymbol enthalten
ist. Prüfen. Oder eine einfache Möglichkeit,
diesen Fehler zu vermeiden, besteht darin, zu sagen drei in einer Liste stehen, sie
dann entfernen,
andernfalls nichts tun. Nehmen wir an, wir
möchten stattdessen einen entfernen. Da hast du es. Jetzt ist einer weg. Ich möchte Ihnen
zwei weitere Funktionen
, die sehr nützlich sind, in einer Liste zeigen . Gehen wir also zurück zu unserer
Liste und lassen Sie uns tippen. Fügen wir
noch ein paar Zeichenketten hinzu. Das ist eine Null. Fügen Sie einen Namen hinzu,
sagen wir John Sample. Sie können den
Index finden, an dem Sie ein Element suchen es eine Funktion
namens Index gibt. Und du gibst das Element ein, das
du zu finden versuchst. Wenn wir z. B. nach der Zeichenfolge Null
suchen, auch wenn sie Null heißt, wird
sie nicht
am Index Null sein, oder? Es ist Index Nummer zwei , weil es das dritte
Element in der Liste ist. Aber wenn Sie das nicht wüssten
, könnten Sie es abfragen. Man könnte sagen, okay, Index Null. Lassen Sie uns dieses Ergebnis in
einer Variablen namens result zeichnen. Und drucken. Da hast du es. Nummer zwei, wenn ich nach
John frage und wir den
Index Nummer drei bekommen. Wenn ich nun nach etwas anderem frage, nach
etwas, das nicht existiert, erhalten
wir dieselbe Fehlermeldung weil etwas nicht in der Liste enthalten
ist. In diesem Fall würden wir auch eine if-Anweisung
machen, um zu überprüfen, ob etwas in einem ist , und das
dann ähnlich machen, wie wir es zuvor gemacht
haben. Die letzte Funktion, die
ich
Ihnen zeigen möchte , ähnelt der Funktion Anhängen. Eine Liste, die weniger als dieser
Fall ist, wird ein Punkt angehängt. Wir fügen der
Liste am Ende der Liste einen neuen Artikel hinzu. Also, wenn ich das mache und einen ausdrucke, siehst
du, dass der neue Artikel am Ende sein
wird. Was ist, wenn ich
es am Anfang hinzufügen möchte? Es gibt eine weitere
Funktion namens Insert. Und dann geben Sie ihm
den Index, an dem Sie einfügen
möchten , und dann die Elemente. Diese fügen also das
neue Element am Anfang ein. Nun, wenn du es
zweitens wolltest, sagen wir, wir wollen es nach einem. Dann können wir sagen, okay, füge bei Index Nummer eins ein. Und jetzt ist es eins und dann das neue Element und dann
der Rest der Liste. So
können Sie Dinge,
was Sie wollen, in die Liste einfügen . Und mit der gleichen Methode könnte ich Ihnen noch zeigen , dass
Sie
Dinge per Index aus der Liste entfernen können . Also habe ich dir dort gezeigt,
entferne die Remote-Funktion, die einen
Artikel anhand seines Namens entfernen würde. In diesem Fall entfernen wir also
die Zeichenfolge namens one. Wenn Sie jedoch per Index
entfernen möchten, können
Sie die
Funktion pop verwenden. Standardmäßig entfernt pop
das letzte Element der Liste. In diesem Fall ist das letzte
Element der Liste also John. Pub wird John entfernen. Wir poppen zweimal, John
entfernt und dann entfernen
wir Null. Wir sollten also
bei diesen beiden Elementen bleiben. Da hast du es. Aber jetzt kannst du auch ein Argument
an pop übergeben, und das wird der Index sein. Nehmen wir an, Sie möchten
das erste Element entfernen ,
das ist diese Zeichenfolge. Das sagt eine Sache aus,
den Index Null. Und jetzt arbeite damit. Wenn Sie also
zwei der ersten Elemente entfernen möchten, die ersten beiden
Elemente in der Liste. Sie können Pop zweimal
mit dem Index Null machen weil beim ersten Mal die Nummer eins entfernt
wird, bleibt
uns diese, diese Liste. Jetzt ist das erste Element zu schreiben,
also
geben wir wieder Null und zwei,
das heißt, jetzt ist das erste
Element weg. Jetzt sind wir also bei
Null und John, weiter. Da haben wir es. Und natürlich nach derselben Logik einfach entfernen, könnten
Sie
nach derselben Logik einfach entfernen, sagen wir, wir wollten
diese Zeichenfolge, die zwei ist, entfernen. Wir geben den Index Nummer eins ein und haben das Ergebnis. Okay, bevor wir das abschließen, wollte
ich
Ihnen etwas zeigen, das manche Leute verwirrend sein
kann. Eine Liste in einer Liste haben. Denn wie ich bereits erwähnt habe, kann
alles eine
Liste aufgenommen werden,
einschließlich einer anderen Liste. Lassen Sie mich das also tun. Lassen Sie mich sagen, wir haben eine Liste mit einem Element und dann haben wir eine weitere Liste mit
einem anderen Element. Also, was passiert hier? Unsere Hauptliste. Sie können also anhand
dieser eckigen Klammern
sehen , dass zwei Elemente enthalten sind, und jedes dieser
Elemente ist eine Liste. Was ist, wenn ich
auf die erste Liste zugreifen möchte? Ganz einfach. Ich sage einfach, okay, gib mir das erste
Element von Liste a. Und dieses Element
wird natürlich die Liste sein, die
diese Zeichenfolge enthält, die eins sagt. Was ist, wenn ich
den ersten Artikel von
dieser Liste haben möchte ? Sie können einfach
derselben Konvention folgen. Sie können den ersten
Artikel aus dieser Liste abrufen, und das wird jetzt einer sein. Wenn ich nun Änderungen vornehmen würde, lassen Sie mich diese Liste
so ändern, dass sie ihre ursprüngliche Liste ist. Ich habe drei Gegenstände hineingelegt, nur drei Zahlen, 12,3. Was glaubst du, wird da
einfach gedruckt? Es? Druckt einen aus. Was ist, wenn ich Nummer zwei haben
möchte? Dann bekomme ich, ich bekomme die, ich muss die erste Liste auf
der MainList bekommen ,
wobei Index Null umgangen wird. Und wenn ich diese Liste
habe, möchte ich den ersten
Punkt dieser Liste haben
, und zwar diese Nummer
zwei. Und da hast du es. Was ist, wenn ich
zu dieser Saite hier drüben will? Nun, ich brauche den
zweiten Punkt in der Hauptliste, das wäre die Liste
, auf die ich zu kommen versuche. Das wird also
Index Nummer eins sein. Und aus dieser Liste
möchte ich das erste Element holen, das einzige Element, das die hohe
Indexzahl Null wäre. Nun, das funktioniert mit so
vielen Levels, wie Sie möchten, und hier kann es etwas
verwirrend werden. Stellen Sie sich nun vor, dass in dieser
inneren Liste eine weitere Liste mit
einem anderen Element enthalten ist, nur einer einzigen Zahl. Um dazu zu kommen, müssen
wir die erste Liste
und dann die Art des
ersten Elements in unserer Hauptliste
und dann das erste Element
in dieser Bestellliste abrufen und dann die Art des
ersten Elements in unserer Hauptliste . Das ist nur Rekursion, die Stufe für Stufe geht. Jetzt bekommen wir also den ersten
Eintrag aus der Hauptliste, und das wird diese Liste hier sein. Dann holen Sie sich das erste
Element aus dieser Liste, das wir dort sein werden, die nächste Ebene der Liste. Und dann bekommen wir das
erste Objekt daraus, das ist
die Zeichenfolge,
die wir wollen, das ist dieser hier drüben. Da hast du es. Ich
wollte dir das zeigen , weil es logisch
Sinn macht. Aber diese Art von
Syntax zu sehen , kann
etwas verwirrend sein. Und es wird
verwirrend sein , bis Sie
mehr Übung damit haben. Also hab keine Angst davor. Lass dich nicht, lass dich nicht
entmutigen, es zu versuchen. Nur weil es ein
bisschen kryptisch ist. Es macht durchaus Sinn, wenn
Sie es ein paar Mal gemacht haben. Das ist also eine Liste. Lassen Sie mich Ihnen jetzt
ganz schnell zeigen, was Tupel und Sets bewirken werden. Ähnlich wie Listen. Sie speichern
Elemente in sich. Sie können also sehr ähnliche
Dinge tun, aber ein Tupel. Der Unterschied besteht jetzt darin, dass
ein Tupel
Klammern anstelle
von eckigen Klammern verwendet . Lassen Sie mich also drucken, lassen Sie mich das erste
Element dieses Tupels abrufen. gleichen Konvention wie bei der Liste erhalten
eckige Klammern das erste Element. Der Hauptunterschied besteht darin
, dass Tupel nicht
modifiziert werden können und sie auch nicht, wir haben nicht das
gleiche Konzept
wie Zeiger mit Top. Wenn ich also eine Variable b
zuweisen würde, den Wert von a
, der unser Tupel ist. Sie wären im Grunde
zwei verschiedene Kopien desselben Tupels. Wie ich bereits sagte, können
Listen
an Ort und Stelle geändert werden, Tupel jedoch nicht. Wenn Sie also versuchen,
etwas an ein Tupel anzuhängen, erhalten
Sie im Grunde
einen Fehler, wenn mein Tippfehler behoben wurde, da Tupel
kein Attribut haben, anhängen. Verwenden Sie also immer dann ein Tupel, wenn Sie wissen, dass Sie Ihre Liste nicht ändern
müssen. Ansonsten ein vereinfachter
Dualitätsanalyst. Nun, das andere Element, das
ich
Ihnen zeigen möchte , ist ein sogenanntes Set. Jetzt können Sie
ein Set auf diese Weise initialisieren. Oder mit geschweiften Klammern. Dies kann verwirrend sein, da geschweifte Klammern auch
nützliche Wörterbücher sind. Ich empfehle Ihnen also, Set
einzugeben. Das ist jetzt ein leeres Set. Lass mich das ausdrucken. Das ist ein leeres Set. Jetzt würde ich
sagen, du kannst sie ändern, du kannst auch etwas hinzufügen. Ich sagte, es gibt keine
Methode namens Append. Wenn ich das versuche,
bekommst du ein Oder. Es gibt eine andere
Methode namens Hinzufügen. Sie können einem Set etwas hinzufügen. Da hast du es. Also habe ich einen hinzugefügt. Nun, der Unterschied zu Sets, was ihn einzigartig macht, ist, dass jeder Wert in
ihnen einzigartig sein muss. Wenn ich eine Liste hätte, machen
wir eine leere Liste. Lassen Sie mich den gleichen
Wert zweimal an eine Liste anhängen. Lass uns das ausdrucken. Meine Liste heißt also B und
sollte zwei Zeichenketten
enthalten, sagen wir eine. Da hast du es. Das gilt für Listen. Wenn ich versuchen würde,
dasselbe mit Sets zu machen, wirst
du sehen, dass
ich nur 11 Artikel darin habe. Und das ist sehr nützlich, um einen einzigartigen Satz von Elementen zu
behalten. Jetzt können Sie diese
Breite mit Listen replizieren, z. B. nehmen
wir an, Sie
fügen einer Liste etwas hinzu. Nehmen wir an, Sie haben Ihre Liste und Sie haben einen Wert, den
Sie hinzufügen möchten. Nehmen wir an, der Wert ist die Zeichenfolge mit diesen
Zahlen darin. Sie können nachahmen, was ich gesagt
habe, indem Sie sagen , dass ein
Wert, der nicht in der Liste enthalten ist, also Liste a,
dann können Sie ihn hinzufügen. Sie fügen diesen Wert nur hinzu,
wenn er nicht in der Liste enthalten ist. Das ist also ein ähnliches
Verhalten wie das, was Sets tun. Aber etwas anderes
, was Sie mit
einem Set machen können , ist, dass Sie ihm eine Liste geben können. Und es wird
die Liste einschränken, bis sie
nur noch eindeutige Werte enthält. Also lass mich dir das zeigen. Nehmen wir an, ich gebe eine Liste. Und ich sage, ich gebe ihm eine Liste mit
einigen doppelten Werten, eins bis zwei. Da hast du es. Also, sobald ich gedruckt habe, lassen Sie mich
diese Petitionen loswerden. Sobald ich das ausgedruckt habe, werden
Sie meinen
Suchbaum eingrenzen meine Liste auf
eindeutige Werte einschränken. Dies kann also noch einmal sehr nützlich
sein, wenn Sie Werte
innerhalb Ihrer
Elementsammlung nicht wiederholen möchten . Und das kannst du auch, nein, tut mir leid, das kannst du nicht. weitere Besonderheit von
Mengen
ist , dass Sie
Elemente aus einer Menge nicht auf die gleiche Weise
abrufen können Elemente aus einer Menge nicht auf die gleiche Weise bei Listen und Tupeln. Sie können durch
ein gültiges Set iterieren. Sie können jedes
einzelne Element
in einer Menge überprüfen , indem Sie eine For-Schleife verwenden, aber Sie können Elemente
in einer Menge nicht mithilfe von Indizes abrufen. Der Grund dafür ist, dass
Sätze,
ähnlich wie bei Wörterbüchern, nicht geordnet sind. Es gibt einen technischen
Grund
dafür , der eigentlich HashSets
heißt. Und sie benutzen Zeiger. Aber es gibt grundsätzlich
sehr effiziente. Sie können Elemente in
einem Set viel schneller finden als in einer Liste. Das heißt aber auch
, dass Sie die Indizes nicht verfolgen, Sie behalten nicht den
Überblick. Sie können
diese Art von Operation also nicht tun . Wenn Sie also über einen Index auf
etwas zugreifen müssen, verwenden
Sie eine Liste. Wenn du es nicht tust. Aber wenn Sie eine
wirklich große Sammlung
von Elementen behalten möchten und Sie möchten, dass
sie alle einzigartig sind, dann können Sie ein
Set für diesen Zweck verwenden. Da hast du es,
Listen, Tupel und Sets. Dies sind sehr
leistungsstarke Datentypen , die Ihnen beim Codieren
sehr helfen werden. Und hoffentlich konnte ich Ihnen helfen, sich mit ihnen
vertraut zu machen.
33. Deep Dive - Wörterbücher: Lassen Sie uns über
Python-Wörterbücher sprechen. Jetzt kannst du dir ein Wörterbuch vorstellen
, so
etwas wie eine
Zuordnung zwischen zwei Dingen, zwischen einem Schlüssel und einem Wert. Also ähnlich wie in einem echten
Wörterbuch, in dem Sie eine
Auszeichnung haben und eine
Definition für dieses Wort haben. Der Schlüssel wäre die Station, die Definition wäre
der Wert dieses Schlüssels. Oder wie ein Telefonbuch, sagen
wir zum Beispiel, wir haben einen Namen. Wir haben Rachel und wir haben
Rachels Telefonnummer. Wir haben Reihen, wir haben Rosen. Telefonnummer, z. B.
Rachel wäre der Schlüssel und Ross wäre die
Zeilen wären ein weiterer Schlüssel und die Telefonnummern oder die Werte für
jeden dieser Schlüssel. Lassen Sie uns das also in
ein echtes Python-Wörterbuch übersetzen. Die Syntax zum Erstellen von Wörterbüchern
verwendet geschweifte Klammern. Lassen Sie mich das übersetzen. Rachel Rose bringt
Telefonnummern in ein Wörterbuch. Sie müssen also die
geschweiften Klammern oder geschweiften Klammern verwenden. Und dann
haben Sie darin jedes Element in einem Wörterbuch, das ein Schlüsselpaar
und ein Wert sein wird. Und das ist
durch einen Doppelpunkt getrennt. Sie haben einen wichtigen Doppelpunktwert. Dies wird der erste
Eintrag im Wörterbuch sein. Und dann trennen Sie jedes Element, Element durch ein Komma. Geh. Und wenn wir
eine weitere Telefonnummer hinzufügen möchten eine weitere Telefonnummer unter der wir das nicht in Ihren Leitungen
tun müssen. Diese können übrigens alle in
einer einzigen Zeile stehen. Also
lass es uns so machen. Lass uns eine neue
Telefonnummer und einen traurigen Kommentar hinzufügen, Monica, und dann
noch eine Telefonnummer. Das wäre also ein Wörterbuch. Und lassen Sie uns es in
einer Variablen namens phones speichern. Ich, lass mich es einfach ausdrucken, um zu sehen, wie das aussieht. Es sieht genauso aus
wie das, was wir gerade eingegeben haben. Was ist also das
Besondere an Wörterbüchern? Das Erste ist
, dass wir, wie gesagt, eine Übersicht über sie, das
Angebot an Schlüsseln und Werten haben können . Und Sie können auf
diese Schlüssel und Werte zugreifen. Sie können also
einfach auf diese Werte zugreifen , indem Sie auf den Schlüssel zugreifen. Nehmen wir an, wir wollen
Rachels Telefonnummer. Sagen wir einfach Rich und
wir wollen ihre Telefonnummer. dem Schlüssel können Sie auf den Wert
einer Telefonnummer zugreifen Mit dem Schlüssel können Sie auf den Wert
einer Telefonnummer zugreifen. Dazu verwenden
wir die Notation mit eckigen
Klammern, ähnlich wie wir auf
Indizes in der Liste zugreifen. Aber statt einer Zahl, statt eines Index, geben
wir einen Schlüssel an. Geben wir also Rachel an, z. B. lassen Sie mich diese
Rachel-Nummer anrufen, z. B. lassen Sie uns diese Nummer einfach ausdrucken. Und da hast du es. So beantworten
wir die Telefonnummer. Wir können
dasselbe mit Ross machen. Und hier wird zwischen Groß- und Kleinschreibung unterschieden.
Übrigens. Das ist Ross gefälschte Telefonnummer. Wenn ich der Groß- und Kleinschreibung nicht folge, z. B. in Kleinbuchstaben, erhalte
ich eine Fehlermeldung, die
besagt, dass es in
diesem Wörterbuch keinen Schlüssel gibt, den
Schlüssel mit dem Namen Ross. Auch hier liest man aufgrund
der Berücksichtigung von Groß- und Kleinschreibung
Werte aus einem Schlüssel auf
diese Weise. Wie schreiben wir einen neuen Schlüssel? Nehmen wir an, wir möchten eine
neue Telefonnummer hinzufügen. Nehmen wir an, wir wollen, lassen Sie uns das
Wörterbuch jetzt ausdrucken. Lassen Sie mich zunächst
mein Ausgabefenster löschen. Lass uns eine neue Telefonnummer hinzufügen. Wir werden also Telefone haben, die dieselbe Syntax
verwenden,
die Syntax mit eckigen Klammern
, die wir verwenden, um Werte zu erhalten. Aber jetzt kannst du deinen neuen Schlüssel
schreiben. Also fügen wir Joey hinzu. Wenn wir das jetzt tun, werden
wir versuchen, einen
Wert aus dem Join-Schlüssel zu erhalten. Aber wenn du Gleichheit machst und dann in diesem Fall eine neue
Telefonnummer, dann werden wir einen
neuen Eintrag im Wörterbuch erstellen. Wir werden einen
neuen Schlüssel und einen neuen Wert erstellen. Also lasst uns Freude hinzufügen. Dann lassen Sie uns das
Wörterbuch noch einmal ausdrucken. Das war, bevor wir Joey hinzugefügt haben, und dann,
nachdem wir Joe hinzugefügt haben. Joe ist hier, Joe ist jetzt am Ende. Sie stellen fest
, dass das Wörterbuch nicht unbedingt in der
Reihenfolge
ist, in der wir es erstellen. Beispiel haben wir Rachel
am Anfang hinzugefügt,
aber sie ist auf dem zweiten Platz aufgetaucht. Warum ist das so? Der Grund dafür
ist, dass Wörterbücher so erstellt
werden, dass
sie sehr effizient sind. Sie müssen
die Reihenfolge nicht im Auge behalten , da es
ein Mapping gibt und
unter der Haube wird
dies als Zeiger bezeichnet. Die Schlüssel. Zeigen direkt auf
den Wert, den sie haben. Und es gibt eine, es gibt
eine kleine technische Erklärung, auf die wir jetzt
nicht eingehen müssen. Das bedeutet jedoch
, dass Sie
die Reihenfolge der Schlüssel nicht benötigen ,
aber Sie müssen
die Schlüssel nicht
in der richtigen Reihenfolge halten , da Sie
einfach über den Schlüssel auf den
Wert zugreifen können , egal wo im
Wörterbuch sich dieser Schlüssel befindet. Vor diesem Hintergrund
gibt es drei
Haupteigenschaften, die Wörterbücher ,
und das macht sie in Python
sehr einzigartig. Eine davon ist, wie ich gerade sagte,
sie sind ungeordnet, was bedeutet, dass
die Schlüssel nicht in der richtigen Reihenfolge sind. Das andere ist, dass auf den
Tasten nicht in der richtigen Reihenfolge steht. Der andere ist, dass
die Schlüssel einzigartig sind. Sehen wir uns ein Beispiel dafür an. Fügen wir Joey noch einmal hinzu. Lassen Sie uns eigentlich
versuchen, eine neue, eine neue Rachel hinzuzufügen. Ich gebe einfach
0000 ein, um es deutlich zu machen. Lassen Sie uns nun
diesen Code ausführen. Wie Sie mich sehen können, müssen
wir das nicht. Rachels, es gibt
nur eine Rachel. Was wir getan haben, ist das außer Kraft zu setzen. Und in diesem Fall
wurde daraus eine Ganzzahl. Es ist also nur eine
einzelne Null, weil mehrere Nullen keinen Sinn machen. Das ist also eine tatsächliche Zahl. Aber wenn ich
daraus eine Zeichenfolge mache, werden wir alle Nullen sehen,
die wir hinzugefügt haben. Wie Sie sehen können,
haben wir Rachel überschrieben, wir haben keinen neuen Rachel-Schlüssel erstellt
. Das ist also die zweite wichtige
Eigenschaft des Wörterbuchs. Die Schlüssel sind einzigartig und die dritte wichtige Eigenschaft ist, dass die Wörterbücher veränderbar sind,
was bedeutet, dass wir sie ändern können, wir können sie nach und nach ändern. Wie wir gerade gesehen haben, wir ein Wörterbuch erstellt
und dann
ändern wir das
ursprüngliche Wörterbuch. Das macht
sie veränderbar, sodass Sie sie ändern können, Sie können sie hinzufügen, Sie können Schlüssel und
Werte in einem Wörterbuch entfernen. Jetzt noch etwas, auf das Sie
achten sollten , wenn
etwas veränderlich ist. Wenn Sie gesehen haben, dass
Listen veränderbar sind
und Sie
immer auf diese Leads hinweisen
, die Sie ändern. Lassen Sie mich Ihnen
ein weiteres Beispiel dafür zeigen. Ich erstelle ein
leeres Wörterbuch namens a speichere es in einer Variablen a. Und ich erstelle
eine neue Variable B. Ich sage, B ist gleich a.
Also a ist ein leeres Wörterbuch. Und ein leeres Wörterbuch, einfach diese beiden verschnörkelten Klammern. Sie können auch tippen, diktieren, angekreuzt
eingeben und Klammern öffnen
und schließen. Dadurch erhalten
Sie das gleiche Ergebnis. Also a ist ein leeres
Wörterbuch, b ist gleich a. Lassen Sie uns
nun einen Wert,
einen Schlüssel und einen Wert zu a hinzufügen .
Nehmen wir an, a ist gleich Eins. Und lassen Sie uns a drucken
und lassen Sie uns B drucken. Also, was denken Sie? Nehmen Sie sich einen Moment Zeit, um darüber
nachzudenken, was
passieren wird. Aber wenn wir einem oder OneNote einen Schlüssel und einen
Wert hinzufügen, tun wir
technisch gesehen nichts, um richtig zu sein. Lassen Sie uns also diesen
Code ausführen und das Ergebnis drucken. Wie Sie nun sehen können, sind A
und B genau gleich. Ein weiterer
wichtiger Aspekt
der Veränderlichkeit von
Wörterbüchern ist , dass sie einmal erstellt werden und Sie immer dasselbe Wörterbuch im Auge
behalten. Also selbst wenn wir das
mehreren Variablen zuweisen, selbst wenn ich zuweise, erstelle eine Variable namens c
und weise V2 diese zu. Und dann drucke ich c. Sie sind alle immer noch
dasselbe Wörterbuch, obwohl Sie
drei Variablen haben, haben
sie dasselbe Wörterbuch. Wenn ich z. B. jetzt C nehme und
dem eine neue Taste hinzufüge und C sage. Also drei, seit dem dritten Buchstaben
im Alphabet,
lass mich das nochmal ausdrucken. Wie Sie sehen können, haben alle A, B und C dasselbe Update da sie alle
dasselbe Wörterbuch verfolgen. Wenn Sie dies vermeiden möchten, wenn Sie möchten, dass sie
unabhängige Wörterbücher sind
, dann
initialisieren oder
erstellen Sie einfach ein Wörterbuch für jede dieser Variablen. Da hast du es. Sie können sehen, dass A einen eindeutigen Schlüssel hat, B leer ist, und dann sehen, weil
wir einen Schlüssel hinzugefügt haben, zu C hat seine eigenen Werte. Das sind also die
drei wichtigsten Eigenschaften , an die Sie
sich bei Wörterbüchern erinnern sollten. Auch hier
sind die Schlüssel nicht in Ordnung. Das liegt daran, dass Sie Werte
aus den Namen der
Schlüssel erhalten , die bereinigt wurden, nicht aus der Reihenfolge
des Wörterbuchs. Die Schlüssel sind einzigartig
, sodass Sie einen Wert aus einem Schlüssel abrufen können
. Wenn Sie mehrere Schlüssel haben und nicht wirklich wissen könnten , welchen Wert Sie
aus den Schlüsseln ziehen sollen, oder? Deshalb müssen wir dafür sorgen, dass sie einzigartig sind. Und veränderbar bedeutet, dass
Sie das
Wörterbuch im Handumdrehen ändern können. Dafür
gibt es für jedes
einzelne Wörterbuch nur eine Kopie, die
immer geändert wird, auch wenn Sie sie
anderen Variablen zuweisen. Okay, lassen Sie mich Ihnen jetzt
einige gängige Operationen in
Bezug auf Wörterbücher zeigen . Lassen Sie mich mit einigen ein neues
Wörterbuch erstellen. Schlüssel und Werte sind darin enthalten. Nehmen wir a, eins, b, zwei und c. Der Wert
von c wird drei sein. Hervorragend. So können Sie überprüfen, ob etwas in einem Wörterbuch
steht. die gleiche Weise können wir überprüfen, ob
einige Nachrichtenanalysten, wir können fragen, ob z. B. ein Wörterbuch a ist, lassen Sie mich den Namen
dieses Wörterbuchs ändern. Nennen wir es, nennen wir es
einfach Diktion, Wörterbuch. Wörterbuch. Wenn a im Wörterbuch steht, drucken Sie es aus. Ja. Andernfalls drucken Sie. Nein. Geh. Also steht a in
Wörterbüchern und wir bekommen ja. Sagen wir f. Wenn nicht, ist es kein Wörterbuch,
also sagen wir Nein. Hervorragend. Was
passiert also, wenn Sie versuchen, den Wert eines Schlüssels zu ermitteln
, der nicht existiert. haben wir schon gesehen, sagen
wir, wenn das, was wir wissen, nicht im Wörterbuch
steht. Versuchen wir,
diesen Wert direkt zu drucken. Wir werden eine Fehlermeldung bekommen. Und dieser Fehler ist ein wichtiger Fehler , weil F nicht
im Wörterbuch steht. Es gibt zwei Möglichkeiten, um zu
überprüfen, ob es einen Schlüssel im Wörterbuch gibt,
und falls ja, den Wert daraus abzurufen. Eine Möglichkeit ist, wenn wir, wie wir es hier bereits getan haben, sagen können, ob f
im Wörterbuch steht, dann den Wert von
f ausdrucken . Lassen Sie mich also die Else-Anweisung
loswerden. Wir werden also nur versuchen, auf
den Wert zuzugreifen , wenn f
im Wörterbuch steht. Jetzt können wir das mit einem tun, wir wissen, dass es bereits
im Wörterbuch steht. Und dann bekommen wir den Wert. Jetzt gibt es eine andere
Möglichkeit, einen Wert zu erhalten. Und kugelsicher
ist ein bisschen. Wörterbücher haben eine
Funktion namens get. Jetzt ist get dasselbe, macht im Wesentlichen dasselbe
wie die Notation mit eckigen Klammern. Ich kann sagen, lassen Sie uns das
in einer Variablen namens value speichern. Ich kann den Wert des Schlüssels ermitteln. Und ich kann es drucken, das ist eins, wie
wir bereits wissen. Wenn der Schlüssel jedoch nicht existiert, gibt Ihnen
get
einen Standardwert. In diesem Fall erhalten
wir also ,
da f nicht existiert den
Standardwert None,
da f nicht existiert. Sie können dafür aber auch
einen Standardwert angeben. Das ist also
wie ein Schalter und sag, wenn der Schlüssel existiert, gib mir den Wert des Schlüssels, andernfalls gib mir
einen anderen, einen anderen Wert. In diesem Fall könnte ich sagen, dass die
Standardwerte eine Zeichenfolge mit
einem einzigen Bindestrich sein werden, zB und los geht's. Da f also nicht
im Wörterbuch steht, erhalten
wir
den Standardwert
, den Bindestrich. Jetzt lassen wir
das hier
wegen der
IF-Aussage hier oben drucken . Und los geht's,
wir haben den Strich. Also nur um das noch einmal zu verdeutlichen. Das ist so,
als würde man sagen, wir haben einen Schlüssel und
wir wollen, dass die Kinder f sind. Kann sagen, ob key can dictionary den Wert
dieses Schlüssels aus unserem Wörterbuch ausdrucken kann. Der Schlüssel wird nun diese
Variable sein, die wir erstellt haben. Andernfalls geben Sie
einen Standardwert aus. In diesem Fall erstellen
wir
diesen Wert als Variable, der Standardwert
ist ein Bindestrich. Wenn also die Schlüssel im Wörterbuch
den
Wert dieses Schlüssels drucken, geben Sie
andernfalls den
Standardwert aus . Lass uns das ausführen. Wir erhalten einen Standardwert. Diese Funktion zum Abrufen von Punkten macht genau dasselbe wie
diese wenigen Logikzeilen. Raster. So können wir
auf Werte von
Schlüsseln zugreifen und
neue Schlüssel in ein Wörterbuch schreiben. Wie löschen wir nun
Schlüssel aus einem Wörterbuch? Lassen Sie uns dieses
Wörterbuch hier vereinfachen. Lass uns einfach den A-Schlüssel lassen. Und lassen Sie mich,
nur um des Beispiels willen, einen neuen
Schlüssel hinzufügen, der B sein wird Nun wieder dieselbe, dieselbe,
dieselbe Syntax. Aber jetzt tun wir das Gleiche. Also ist Schlüssel B jetzt gleich. Lassen Sie mich jetzt a
aus dem Wörterbuch entfernen. Um einen Schlüssel zu entfernen, gibt es eine Funktion namens Pop. Pop entfernt ein, nimmt den Namen eines Schlüssels und wir entfernen ihn
aus dem Wörterbuch. Lassen Sie uns also dieses Wörterbuch ausdrucken. Denken Sie daran, dass wir
das Wörterbuch mit einem
einzigen Schlüssel initialisieren , das ist a. Wir fügen b hinzu und dann poppen wir, es wird a daraus entfernen. Jetzt ist also unser neues
Wörterbuch da. Jetzt hat das Pumpen einen kleinen Nebeneffekt. Das heißt, Sie erhalten den Wert des Schlüssels, den Sie
entfernen, den Sie entfernt haben. Wenn ich also das Ergebnis
von pop in dieser Variablen speichere, erhalte
ich den Wert von a, wir
aus dem Wörterbuch entfernt haben. Das ist Wert eins. Nun, Sie sollten
sich bewusst sein, dass, wenn Sie pop einen Schlüssel
geben, der nicht existiert, z. B. f. Auch hier gibt
pop einen Schlüsselfehler aus, Auch hier gibt
pop einen Schlüsselfehler aus,
weil der Schlüssel nicht existiert. Wenn Sie also
Pub verwenden, ist es gut zu überprüfen ob Ihr Schlüssel
im Wörterbuch steht, dann können Sie ihn entfernen. Pop verfügt jedoch über eine weitere
Funktion , mit der Sie nicht
überprüfen müssen , ob sich ein Schlüssel
im Wörterbuch befindet. Und zwar durch die Angabe
eines separaten Arguments. Zweites Argument, tut mir leid. Wenn wir das wieder alleine
ausführen, erhalten
wir eine Fehlermeldung, weil F nicht im Wörterbuch
steht. Wenn wir jedoch
ein zweites Argument angeben, so wie GET einen Standardwert
hat, erhält
pub einen
Standardwert von vier. Wenn ich also nicht tippe, z. B. I. Print removed, drucke ich
die, die Remote-Variable. Es wird sich nicht beschweren
und es
wird mir tatsächlich diesen Standardwert geben. Wir versuchen es bereitzustellen. Es gibt also keinen Schlüssel mit dem Namen f. Daher wird standardmäßig
dieser Standardwert verwendet. Wenn ich das
in einen anderen Strich ändere, zB dasselbe wie zuvor. Nun,
da f nicht existiert, wird
das der Standardwert sein. Aber wenn wir versuchen, a zu poppen, erhalten
wir
den Wert von a weil a tatsächlich existiert. Das hat nicht geklappt , weil ich nicht den gesamten Code
ausgeführt habe. Es tut mir leid, ich muss den gesamten Code
ausführen. Da hast du es. Also jetzt wurde der Wert pro
Sprint entfernt. Zweiter Druck, das Ergebnis im
Wörterbuch nach dem Poppen von a. Aber auch hier
können wir jetzt den gesamten Code ausführen. Wenn ich F entferne, enthält das
resultierende Wörterbuch immer noch sowohl a als auch
dann die Beta, die wir hinzugefügt haben. Und dann haben wir
den Standardwert aus dem
Schlüssel gedruckt , den wir nicht entfernen konnten. Das Letzte, was ich Ihnen über
Wörterbücher zeigen
möchte , ist, wie Sie eine Liste von Schlüsseln und Werten
erhalten. Lassen Sie mich also den Rest
dieses Codes löschen und meinem Wörterbuch ein paar
weitere Schlüssel hinzufügen. Noch einmal das gleiche Beispiel. Nehmen wir an, ich möchte
wissen, welche Schlüssel
im Wörterbuch stehen. Stellen Sie sich vor, dieses Wörterbuch enthält Tausende von Elementen. Wörterbücher haben eine
Funktion namens Schlüssel. Und dadurch erhalten
Sie
eine Liste der Werte
dieser Schlüssel. Entschuldigung, jetzt
erhalten Sie eine Liste der Schlüssel im Wörterbuch. Wenn wir das also in einer
Variablen speichern und dann drucken, lassen Sie mich mein Ausgabefenster leeren. Da hast du es. Sie erhalten also eine Liste der Schlüssel
in diesem Wörterbuch. Damit Sie diese Liste verwenden können, um
auf
Werte daraus zuzugreifen. Oder wenn Sie
eine einfache Liste von Werten
ohne die darin enthaltenen Schlüssel haben möchten , gibt es eine Funktion
namens Werte. Und ich gebe Ihnen einfach eine Liste der Werte
im Wörterbuch. Denken Sie jetzt daran, dass
Wörterbücher keine Reihenfolge haben. Die Reihenfolge dieser Werte
sowie die
Reihenfolge der Schlüssel machen also sowie die
Reihenfolge der Schlüssel nichts
aus, was Sie erwarten könnten. In diesem Fall haben wir die Werte
gedruckt, aber Sie können sehen, dass sie nicht in der Reihenfolge
sind
, in der wir sie eingegeben haben, was
in Ordnung ist. Dies ist nur eine Liste von Werten, aber normalerweise möchten wir Werte von einem Schlüssel
abfragen, nicht direkt von hier aus. Und es gibt noch eine
Funktion, die ich Ihnen zeigen
möchte , die Items
heißt, aber Islands gibt Ihnen eine Liste die die Schlüssel- und
Wertepaare in Form von Tupeln enthält . Lassen Sie mich das also
in einer Variablen namens
items speichern und ausdrucken. Sie haben also einen Schlüssel, tut mir leid, Sie haben eine Liste. Und in dieser Liste haben Sie diese Paare, die Tupel sind. Und Sie haben den Schlüssel und
den Wert für diesen Schlüssel. Schlüssel und Wert, Schlüssel und Wert. Auf diese Weise könnten Sie also tatsächlich alle Schlüssel
im Wörterbuch wiederholen. Wörterbuchschlüssel. Das werden also vier Schlüssel-Punktschlüssel
im Wörterbuch sein. Und es würde jeden
Schlüssel im Wörterbuch drucken. Wenn wir nun Werte eingeben
und für den Wert sagen,
in Werten, sind die Werte sortiert,
nicht wie bei mir im Volumenstil. Was ist mein Fehler? Für Volumenwerte? Dann überprüfen wir diese Werte. Jetzt können Sie
dasselbe auch mit Gegenständen tun. Aber denk jetzt an diese Gegenstände. Wenn ich, wenn ich einfach Elemente ausdrucke, mir diese Elemente jedes, jedes Element in der Liste, den Schlüssel und den Wert merke. Das kannst du auspacken. Das nennt man Auspacken. Wenn Sie mehrere
Werte in einem Tupel oder einer Liste haben, können
Sie diese
direkt in der For-Schleife entpacken. Sie können für den Schlüsselkommawert sagen. Also im Grunde für jeden
Artikel in der Liste. Lass mich, lass mich dir das zuerst
zeigen. Lassen Sie uns jedes
Element in der Liste ausdrucken. Also wie du gesehen hast, habe ich das entfernt. Wie Sie sehen können,
ist jedes Element ein Paar, ein Paar
aus einem Schlüssel und einem Wert. Wir können also sagen, wir können
diese für den Schlüsselkommawert entpacken. In jedem Artikel des Wörterbuchs. Das können wir tatsächlich separat ausdrucken. G-Punkt-Wert. Also haben wir eine und wir haben eine. Wir werden sehen wo drei. Oder wir können sie
in der Print-Erklärung zusammenfassen. So. Und obwohl wir das gleiche Ergebnis erzielen, weil
wir ein Tupel drucken. Aber lassen Sie mich
das in Form einer Zeichenfolge, eines
d- und c-Werts tun , sodass wir eine Funktion im Punktformat
verwenden können. Und es sollte ein
bisschen klarer sein. Also Schlüssel a und der
Wert von a ist Eins. Also noch einmal, das heißt,
die Funktion des Eisens zu nutzen und jeden dieser
Gegenstände als Schlüssel und Wert
auszupacken. Das sind Wörterbücher. Ich glaube, ich habe dir einige
der wichtigsten Dinge gezeigt , die du mit ihnen machen
kannst. Aber sie haben natürlich noch viel
mehr zu bieten. Sie sind ein fantastisches
Tool für den Umgang mit Daten. Ich ermutige Sie dringend, ein
bisschen mehr mit ihnen zu
spielen. Vor diesem Hintergrund sollten
Sie jedoch über genügend Kenntnisse verfügen , um sie bei
Ihrer täglichen Codierung
effizienter einsetzen zu können .
34. Abschlussprojekt - Pose Library: Intro: In diesem Projekt
werden wir eine Postbibliothek erstellen. Für diese Postbibliothek, die so aussieht. Wir haben bereits
die Funktionen geschrieben , die wir benötigen und die aus dem
vorherigen Projekt stammen. Sie werden
lernen, wie Sie
ein völlig neues Tool erstellen , das den Code
nutzt, der entweder von
Ihnen oder von jemand anderem
für ein anderes Projekt
geschrieben wurde. Die Hauptsache, die wir auf
diesem anderen Code aufbauen müssen , ist die Möglichkeit, Posen in Dateien
zu speichern. Sie werden also lernen,
wie man mit Dateien umgeht. Der zweite Teil der Arbeit wird
in die Erstellung der Benutzeroberfläche gehen. Die Benutzeroberfläche ist
etwas komplexer. Es hat einen zusammenklappbaren Bereich. Wir nehmen die Eingaben
des Benutzers entgegen und es gibt eine Liste von Posen, die
aus Dateien auf der Festplatte stammen. Der Vorteil
des Speicherns von
zwei Prozessdateien besteht nun darin, dass wir sie jetzt in meinen Sitzungen oder sogar
mit anderen Personen
auf
verschiedenen Computern teilen
können meinen Sitzungen oder sogar
mit anderen Personen
auf . Lassen Sie mich Ihnen zeigen,
wie dieses Tool funktioniert. Ich habe bereits
einige Beiträge im Voraus gespeichert. Wir können sie
auf einen einzelnen Charakter anwenden , wie wir
es bereits gesehen haben, oder auf mehrere Charaktere. Ich habe Sitzplätze. Und wir können auch
Posen aus der Szene speichern. Nehmen wir also an,
wir wollen eine Pose für diese Requisite
speichern. Lass uns den Hut auf den Boden legen. Wir werden
es benennen, vor Ort. Speichern Sie die Pose. Und wenn ich diese Pose speichere, siehst
du, dass sie hier sofort
auftauchte. Und das wird in einer Datei gespeichert. Es
kann also auch hier
sitzungs- oder computerübergreifend
mit anderen Personen geteilt werden . Dann kann ich weitermachen
und diese Pose auf diese Charaktere anwenden . Das ist also ein Tool, das
wir erstellen werden.
35. Das Python-Paket erstellen: Das erste, was wir tun
werden, ist
die Dateistruktur für unseren Code zu erstellen . Gehen wir also zurück zu PyCharm und wir haben
hier die anderen Module aus unseren anderen Projekten. Jetzt
erstelle ich ein neues, aber ich werde ein
Verzeichnis erstellen, da dieses mehr Teile
benötigt als
die anderen Projekte. Also klicke ich mit der rechten Maustaste
in das Stammverzeichnis unseres Projekts und klicke auf Neu. Ich werde ein
neues Python-Paket erstellen. Dann geben wir ihm einen Namen. Ich nenne es
Pose Underscore Library. Jetzt hat PyCharm
einen neuen Ordner oder
ein neues Verzeichnis mit
einer Datei darin erstellt . Ich werde gleich zu
dieser Datei zurückkehren. Aber wenn Sie sich den
Ordner selbst ansehen, ist
dies einfach ein Skriptverzeichnis für Ihre Maya in Ihrem Maya-Ordner für
Dokumente. Und darin befindet sich dieses Verzeichnis mit einer einzigen Datei
namens underscore,
underscore init, underscore,
underscore dot PY. Dann
erstelle ich eine weitere Datei, nur eine einzige Python-Datei. Dort
werden wir
diesen Code strukturieren oder dieses Projekt
wird die Funktionalität von der Benutzeroberfläche
trennen. Dies ist im Allgemeinen
eine gute Praxis. Etwas, das wir zuvor
für die Postübertragung getan haben,
ist, die Benutzeroberfläche direkt
im Posttransfer-Modul zu erstellen, das eine Funktionalität enthält. Ich habe mich dafür entschieden,
weil wir
ein erstes Tool verwenden, mit
dem wir eine Benutzeroberfläche erstellt haben. Und es war auch
etwas einfacher, aber normalerweise wird empfohlen Ihre Benutzeroberfläche
von Ihren Funktionen
zu trennen. Das gibt Ihnen die
Möglichkeit, die Funktionalität wiederzuverwenden, was wir mit diesem Projekt
tun werden, und Ihre Benutzeroberfläche
vollständig getrennt zu halten. Das gibt
Ihnen auch die Möglichkeit, mehrere Benutzeroberflächen zu erstellen, nutzen die dieselbe Funktionalität
von einem einzigen Ort aus
nutzen. Also werde ich eine Python-Datei
erstellen. Ich nenne es Core. Ich rufe an, ich nenne
es Core, weil dies die Kernfunktion
der Bibliothek sein
wird. Und ich werde
eine weitere Datei namens UI Goes erstellen. Unser UI-Code wird hier leben. Gehen wir jetzt zurück. Lassen Sie uns
dem Kernmodul etwas hinzufügen. Lassen Sie uns einfach eine
Testfunktion hinzufügen, damit
wir sie testen und
sicherstellen können, dass sie funktioniert. Ich gebe Hello
Core Four, Pose Library ein. Großartig. Nun, was macht eine Datei? Wenn wir es uns ansehen, ist es
eigentlich völlig leer. Es ist einfach eine Textdatei, die double
underscore init,
double underscore dot p-y heißt . Wenn ich diese Datei nicht hätte, würde
Maya uns
einen Fehler geben oder Python würde
uns einen Fehler geben, weil dies
die Datei ist , die Python anweist, das Verzeichnis als Modul
zu behandeln. Also lassen Sie mich diese Datei löschen. Es wird sich
hier in PyCharm widerspiegeln. Versuchen wir,
diese Funktion zu importieren. Lass mich zurück zu Maya gehen. Öffnen wir den Skript-Editor. Wir nennen das Postbibliothek. Also sagen wir aus der
Pose Library, Import Core. Und wir wissen, dass Core eine Funktion
namens Hello hat , die einfach unsere Hallo-Nachricht
ausdruckt. Lassen Sie mich das
ein bisschen größer machen. Lassen Sie uns den Code ausführen. Sie können sehen Python kein Modul
mit dem Namen Pose Library sagt. Was passiert nun, wenn wir
diese Init-Datei von Verwandten hinzufügen? Lassen Sie uns
eine neue Python-Datei erstellen. Ich werde
kein Python-Paket erstellen. Übrigens, wenn
Sie Python-Paket sagen, scheint
Pycharm einfach
ein Verzeichnis mit dieser Init-Datei zu erstellen . Aber in diesem Fall
erstelle ich eine Python-Datei. Ich
nenne es einfach underscore, underscore init, underscore,
underscore dot p-y. Lassen Sie uns versuchen,
das noch einmal auszuführen. Da hast du es. Jetzt funktioniert unser Code
und wir erhalten diese Nachricht von unserer Funktion. Das ist also wichtig
an Inuit-Akten. Du musst
nichts in sie hineinlegen. Du kannst, wenn du willst. Aber sie müssen da sein, damit das Verzeichnis als Modul
behandelt wird. Wenn Sie Submodule haben, wird
es der gleiche Fall sein. Nennen wir es, nennen wir dieses neue Modul.
Dies ist ein Beispiel. Sie sehen, da ist eine
Init-Datei drin. Und dann können Sie Ihrem neuen Modul weitere
Python-Dateien hinzufügen . Es
ist also wieder einmal, es sagt Python einfach
, dieses Verzeichnis als
Modul zu behandeln ,
damit sie es importieren können. Toll, lass mich das löschen. Und da hast du es. Wir haben also die Struktur, die
wir verwenden werden, um unsere beiden Kernelemente zu erstellen, die
alle Funktionen bieten, und die Benutzeroberfläche wird alle
UI-Elemente enthalten.
36. Mit Dateien arbeiten: Wie ich bereits erwähnt habe, werden
wir den größten Teil des Codes aus
dem
vorherigen Projekt
wiederverwenden . Aber eine wichtige Sache, die
wir hinzufügen müssen, ist die Möglichkeit, Dateien zu speichern. Also lasst uns lernen
, wie man mit Dateien arbeitet. Bevor wir anfangen, Posen zu speichern. Ich habe hier ein Verzeichnis erstellt. Das ist direkt unter meinem C-Laufwerk. Es gibt einen Python-Demo-Ordner und dann einen Postlibrary-Ordner. Ich werde meine Datei hier
speichern. Beginnen wir einfach mit einer einfachen
Textdatei, damit wir
lernen können , wie man
Dateien von Grund auf neu erstellt. Ich rufe an, ich gebe meinen Pfad zu
meinem Verzeichnis als ihren Pfad an. Ich füge hier ein R hinzu. Ich glaube nicht, dass einem dieser
Charaktere entkommen wird. Wissen. Aber wenn du z.B. eine N-Like-Nose-Bibliothek hättest, wird
dein Charakter entkommen. Wie Sie sehen können, ist der
Bindestrich ein umgekehrter Schrägstrich, n ist das Rückgabezeichen. Es wird dir eine neue Zeile geben. Es teilt den Pfad also
tatsächlich in zwei Linien auf. Also, wenn
Ihr Pfad in Ihrem,
in Ihrem Verzeichnis aus irgendeinem Grund ein Sonderzeichen hat ,
das Escape-Zeichen genannt wird. Und eine andere
wäre T zB Library. Das würde dir eine Rechnung geben. Oder ein A gibt dir
einen zusätzlichen Charakter. Eine Möglichkeit, dies zu vermeiden,
besteht darin, diesen Fluchtcharakteren zu
entkommen. ZB zurück zur Nose-Bibliothek, was wiederum zurück zu
Backslash n eine neue Zeile ist. Wenn ich einen neuen Backslash hinzufüge, wird dieser ignoriert. Oder Sie können einen Schrägstrich machen. Und das wird das Problem auch
vermeiden. Wenn Sie jedoch Teile aus Windows kopieren und
einfügen, erhalten
Sie normalerweise diesen umgekehrten Schrägstrich. also manchmal etwas
mühsam sein, alles mit
zwei Schrägstrichen zu ersetzen kann also manchmal etwas
mühsam sein, alles mit
zwei Schrägstrichen zu ersetzen. Eine einfache Möglichkeit, dies zu tun,
besteht darin , einfach ein R
vor diese Zeichenfolge zu setzen. Und dadurch wird daraus
eine sogenannte Rohzeichenfolge. Eine Pfeilzeichenfolge
bedeutet im Grunde, dass
alle Escape-Zeichen ignoriert werden.
Diese Zwecke. Jetzt wird das R auch für
sogenannte Rejects verwendet
, eine Ausdruckssprache , mit der Sie Zeichenketten analysieren können. Aber das wollten wir hier nicht anfassen. Es ist einfach
gut zu wissen, dass R eigentlich für Reklamationen gedacht ist. Aber wir können es verwenden, um Probleme zu
vermeiden,
wie zum Beispiel, dass diese neue Zeile diese Escape-Zeichen
sind. Okay, lassen Sie mich das
wieder auf meinen eigentlichen Weg bringen. Und jetzt brauche ich einen Dateinamen. Dateiname, wir
nennen ihn Textpunkt TXT. Und das muss eine Schnur
sein, oder? Also eigentlich können wir das, lasst uns das zusammen verbinden. Ich werde dir etwas zeigen. Ich werde das Betriebssystemmodul verwenden. Also gebe ich import OS ein. Und ich werde sagen, dass der vollständige
Pfad dem OS-Punktpfad entspricht. Steht also immer für
Betriebssystem. Das ist also eine Bibliothek, die sich
mit Betriebssystemaktionen befasst . Darin ist ein Pfadmodul enthalten
, das Ihnen bei Dateipfaden hilft. Und es gibt eine Join-Funktion , mit der Sie mehrere Pfade
verbinden können. Wenn Sie also
mehrere Verzeichnisse haben und diese
zusammenfügen möchten, könnten
wir das einfach tun, z. B. sagen
wir, das dx dy testen. Oder wir könnten auch
sagen, dass Sie den Weg verloren haben. Beispielsweise fehlen uns der
Backslash und der Plus-Dateiname. Aber sie haben immer
Path Join, gibt uns diesen Backslash automatisch und wir stellen sicher, dass
der Pfad gültig ist. Und wenn es irgendwelche
Fluchtcharaktere gibt, wird
er ihnen
auch für uns entkommen , sodass wir uns
keine Sorgen machen müssen , dass auf dem Pfad etwas Funkiges
passiert. Ich sage ihr
Pfadkoma, Dateinamen. Schließ dich den beiden für mich an. Wir werden den vollständigen
Pfad drucken. Und da hast du es. Dies ist ein vollständiger Pfad
zu unserer Datei, file. Also werde ich diesen Dateipfad tatsächlich
aufrufen. Großartig. Also jetzt existiert diese Datei offensichtlich
noch nicht. Wir werden es erstellen. Um eine Datei zu erstellen, verwenden
wir eine Funktion namens open. Nennen wir das. Nennen wir das F. Nennen wir die Datei f.
Ich nenne sie nicht file,
weil die Datei eine weitere
eingebaute Funktion in Python ist. Und ich
möchte es nicht überschreiben. Ich könnte es also
Unterstrichdatei nennen, aber in diesem Fall nenne ich es
einfach f. Jetzt wollen wir mit einem Pfad
öffnen. Und wenn Sie
dann eine Datei öffnen, müssen
Sie den Modus wählen,
den Modus, in dem
Sie sie öffnen möchten, und das ist eine einzelne Zeichenfolge. Die wichtigsten Modi, die Sie möchten. Ich beschloss, in die
Datei zu schreiben oder die Datei zu lesen. In diesem Fall
wollen wir also eine neue Datei schreiben. Also sagen wir Datei Öffnen,
öffnen Sie den Dateipfad
im Schreibmodus. Dann
sagen wir F-Punkt, oder? Was Sie also erhalten, wenn
Sie eine neue Datei öffnen ist eigentlich ein Dateiobjekt. Schauen wir uns an, wie
das aussieht. Wenn ich einfach f ausdrucke ,
wird mir sagen, dass
dies eine offene Datei ist. Würde den Modus an
eine Adresse im Speicher schreiben. Wenn ich sage, gib mir den Typ, dann
gibt
dir diese Funktion den Typ eines Objekts. Es wird mir sagen,
dass dieser Typ Datei ist, weshalb ich meine Datei,
meine Variablendatei, nicht benennen
wollte , weil ich diese Zeit überschreiben
würde. Großartig. Jetzt wissen wir also, dass
f ein Dateiobjekt ist. Ein Objekt ist in Python wirklich jeder
Typ, z. B. sind
Zeichenketten Objekte,
Listen sind Objekte. Genau wie diese haben auch diese Dateiobjekte eine
Funktion namens write. Die Schreibfunktion lautet kin, ein Text oder eine
Zeichenfolge mit etwas Text und einigen Texten für meine Datei. Hervorragend. Ein
wichtiger Aspekt, den Sie
bei Dateien beachten sollten , ist, dass Sie eine Datei schließen müssen, sobald Sie sie
geöffnet
haben. Um eine Datei zu schließen. Sie können in diesem Fall f, Punkt schließen und dann diese Funktion
aufrufen. Wenn Sie dies nicht tun,
bleibt Ihre Datei möglicherweise geöffnet und Sie
könnten beschädigt werden und kaputt gehen. Also heißt es normalerweise, es ist immer eine sehr gute Idee, gute Praxis, Ihre Dateien zu
schließen. Lassen Sie mich also diesen Code ausführen. Und lass uns weitermachen und
sehen, was passiert ist. Hervorragend, wir haben also eine neue, eine neue Textdatei mit den Texten, die wir darin
geschrieben haben. Großartig. Der nächste Schritt ist das Lesen von Dateien. Lassen Sie mich diese Datei
mit einigen neuen Texten modifizieren , damit
sie aus Python lesen. Lass uns, lass uns einen neuen Text schreiben. Lesen Sie aus Python. Speichern wir die Datei. Das Lesen ist dem Schreiben sehr
ähnlich. Das alles bleibt beim Alten. Wir möchten die Datei immer noch öffnen, aber wir möchten
sie im Lesemodus öffnen. Das wäre unser derselbe offene
Dateipfad oder wie der Modus. Und jetzt wollen
wir diese Datei lesen, anstatt zu schreiben . Also werde ich das alles löschen und die Funktion
Punkt rechts verwenden. Nun, tut mir leid, Funktion lesen. Und ich werde das Rote,
was auch immer wir aus der Datei lesen,
in einer Variablen namens contents speichern was auch immer wir aus der Datei lesen . Und read gibt Ihnen eine Zeichenfolge mit dem Inhalt der Datei. Und dann noch einmal, nach dem Lesen,
wollen wir diese Datei schließen. Dann werde ich Kontinente
drucken. Und da hast du es. Der Inhalt ist also
genau die Zeichenfolge , die wir aus der Datei erhalten haben. Das sind die Grundlagen der
Arbeit mit Dateien. Es ist sehr einfach,
es ist sehr einfach. Das Wichtigste, woran Sie sich erinnern sollten,
ist das Schließen Ihrer Datei. Wenn Sie sich jetzt keine
Gedanken über das Schließen der Datei machen möchten, da dies sehr
leicht zu vergessen ist. Es gibt eine andere
Möglichkeit, dies zu tun, und ich empfehle
Ihnen, dies auf diese Weise zu tun. Ich werde einen
sogenannten Kontextmanager verwenden. Geben wir nun Breite,
geöffneter Dateipfad ein. Das ist dasselbe, was wir
oben besprochen haben. Wir werden die
Datei im Radian-Modus öffnen. Du tippst als f und dann als Doppelpunkt. Und innerhalb dieser
Breitenangabe werde
ich sagen, dass Inhalt gleich f Punkt gelesen ist,
genau wie zuvor. Was hier also passiert ist,
dass wir
die Datei immer noch im Radian-Modus öffnen, wo sie immer noch in der Variablen
f gespeichert wird. Aber wir machen das
in diesem Kontextmanager. Ein Kontextmanager
stellt sicher, dass etwas passiert, bevor Ihr
Code ausgeführt wird. Bevor wir also die Datei lesen, wird
etwas passieren. Und es stellt auch sicher, dass
nach der Ausführung Ihres Codes
etwas
passiert, bevor den nächsten Codezeilen fortgefahren wird. In diesem Fall
müssen wir die Datei also nicht
mehr schließen , da der
Kontextmanager sie für uns schließt. Und dann
brauchen wir diese Folie auch nicht. Lassen Sie uns nun sehen, ob wir
dieselben Ergebnisse erzielen wie wir. Wir haben genau das gleiche Ergebnis erzielt. Also können wir dasselbe tun,
wenn wir in eine Datei schreiben. Wir können das
in den richtigen Modus schalten. Und natürlich
müssen wir f nicht als Variable verwenden. Wir können zu Ihrer Information verwenden, wenn wir wollen
oder was auch immer Sie wollen, solange das so ist,
liegt es an Ihnen. Solange Sie
diese Variable natürlich in Ihrem Code wiederverwenden . Also öffne die Datei und
nenne sie etwas, wird etwas tun, das
wir gerade schreiben. Schreiben wir also einen neuen Text. Lassen Sie uns diesen Code ausführen. Und wenn wir die Datei überprüfen, wurde
unser neuer Text in die Datei
geschrieben. Du kannst es also so oder so machen. Sie können die Datei
manuell öffnen und bei
Bedarf manuell schließen. Aber ich empfehle dringend,
einfach
dieses Muster zu verwenden , das ist
der Context Manager.
37. Posen in JSON-Dateien speichern: Wir wissen, wie man Dateien erstellt. Jetzt sind wir bereit,
Posen zu speichern. Wir werden
ein spezielles Format für
Dateien namens Jason verwenden . Jason, das JSON-Format ist dem Aussehen von
Wörterbüchern
sehr ähnlich. In Python gibt es eine Bibliothek, die speziell für
diese Art von Dateien entwickelt
wurde . Also lasst uns eine
Pose aufstellen, die wir retten können. Wir werden unseren
Postüberweisungscode verwenden. Und wir werden
all diese Serien behalten. Lass mich hier eine Pause einlegen
und Pose Transfer sagen. Und unsere Funktion
hieß GET post deck. Und wir müssen den Namespace
übergeben. Toll, also lasst
uns, lasst uns den Beitrag für
diesen Hut hier unten veröffentlichen. Und der Namespace dieses
Charakters ist Luna, eins. Das ist ein neuer Charakter
, den ich gerade hinzugefügt habe. Nennen wir diese Pose. Pose entspricht einer Überweisung
, die gepostet wird. Mal sehen, wie das aussieht. Lass mich einfach diese Pose mitbringen. Okay, da hast du's. Es ist dieses Wörterbuch mit einigen Werten. Dieses
kleine Wörterbuch. Das ist toll, nur für den Hut. Jetzt wollen wir diese Datei
speichern. Da wir jetzt
das JSON-Format verwenden, werde
ich das angeben und das als
Erweiterungsnamen für diese Datei
beibehalten. Und das werden wir tun, wir werden auch den
Context Manager verwenden. Ich nenne das
nochmal F, der Einfachheit halber. Aber jetzt
verwenden wir, anstatt Epitaphien zu verwenden,
richtig, etwas. Wir werden die
JSON-Bibliothek verwenden , die wir importiert haben. Also noch einmal
JSON importieren und das ist Jason
ohne JSON. Und wir werden diese
Bibliothek verwenden, um die Datei zu schreiben. Jetzt
nennt die JSON-Bibliothek es dumped. Sie werden im Grunde ein Wörterbuch in
eine Datei kopieren. Jetzt müssen wir, wir
müssen die Post weitergeben. Lassen Sie mich etwas expliziter sein
und es Post Dict nennen. Wir werden das
Post-Dict darin
ablegen, solange wir die Datei noch öffnen und
schließen müssen. Was wir nun tun werden, um dieses Dateiobjekt an
den JSON-Punktdump zu
übergeben . Lass uns das ausführen und sehen
, wie es aussieht. Wir gehen hier zu unserem Ordner. Wir haben diese Textdatei, wieder mit unserem Wörterbuch. Und genau das wollen wir. Jetzt haben wir unsere
Beiträge in einer Datei gespeichert. Nun
möchte ich die Datei jetzt noch ein
bisschen schöner
formatieren. Aber das Gute an der Verwendung der JSON-Bibliothek ist, dass
Sie genau das tun können. Es gibt ein Argument
namens Indent. Ich werde sagen, dass ich eine Supplementation möchte oder
daran teilnehme. Wenn ich diesen Code also erneut ausführe, wird das
Wörterbuch erneut in die Datei geschrieben. Dieses Mal, nett formatiert. Hier gibt es vier
Einrückungsfelder, und so ist es einfacher
zu lesen. Lassen Sie uns also den Code
erstellen, der gespeichert werden
soll. Oder vielleicht ist die Art und Weise, wie
wir
damit arbeiten werden , der
Name der Datei, der Name der Beiträge. Und natürlich werden der
Kontext der Datei die tatsächlichen
Werte des Beitrags
sein. Gehen wir also zu PyCharm und gehen
wir zu unserem Kernmodul. Fangen wir bei Null an. Wir werden, wir werden
das Betriebssystemmodul brauchen. Wir werden
die JSON-Bibliothek benötigen oder es sind immer Bibliothek
und JSON-Bibliothek. Lassen Sie uns das alles
in ein Kreisdiagramm bringen. Großartig. Wir müssen also wissen, da dies der Code
sein wird, der Code für unser Tool, wir werden wissen wollen wo wir die Posen speichern. Also werde ich das zu einer globalen Variablen machen
. Du nennst es dort Root. Was ich nun mit
globaler Variable meine, ist, dass diese Variable für alles innerhalb
dieses Moduls
zugänglich sein wird . Auch wenn wir eine Funktion erstellen. Nehmen wir an, wir haben
diese Funktion hier. Wir können eine globale
Variable innerhalb
dieser Funktion verwenden , da
sie außerhalb
des Geltungsbereichs dieser Funktion liegt. Wenn ich nun hier
eine weitere Variable erstellen würde, ist
diese Variable nur innerhalb
dieser Funktion
verfügbar, wiederum wegen des Gültigkeitsbereichs. Das ist also eine großartige
Sache an globalen Variablen. Und weil es globale gibt, die Konvention darin,
sie alle großzuschreiben. Das ist jetzt nicht nötig. Dies wird Ihren Code nicht
beschädigen, wenn Sie hier Kleinbuchstaben verwenden. Aber als Konvention, um deutlich zu machen , dass es sich um
eine globale Variable
handelt, ist dies eine wichtige Variable die einen Wert
definiert, den
Sie konstant haben möchten. Wir schaffen es. Großbuchstaben. Großartig. Also wollen wir auch die Erweiterung
wissen. Also werden wir eine Erweiterung
schreiben. Lass uns einfach EXT machen. Die Erweiterung wird Dot JSON sein. Hervorragend. Also müssen wir eine
Funktion erstellen, um Bytes zu schreiben. Geben wir def,
right, pose to file ein. Jetzt müssen wir wissen, wie der
Beitrag heißen wird. Wir nehmen ein
Argument namens postnatal an. Wir müssen den Inhalt
der Datei kennen, oder? Also brauchen wir diese Wörterbücher. Hervorragend. Insofern
werden
wir im Grunde das tun, was wir in
Maya gemacht haben , mit einigen Änderungen. Der Dateipfad wird also das Stammverzeichnis
sein, das
für unsere Zwecke eine Art
globales Verzeichnis ist , das hier definiert ist. Wer diese Funktion nutzt, muss also nicht wissen,
wo er die Beiträge speichern muss. Das definieren wir im Tool. Aber wir müssen den Namen kennen. Nun, der Name der Pose enthält
nicht die, die Erweiterung, weil wir nicht wollen, wer diesen Weg benutzt. Wir möchten nur, dass sie
uns einen Namen der Beiträge geben. Wir kümmern
uns um diese Verlängerung. Also lasst uns anrufen, lasst uns eine
neue Variable namens filename erstellen. Und wir werden einfach diesen Namen und die
Erweiterung zusammenfügen. Lassen Sie mich den
Zeitraum hier und die Verlängerung loswerden. Wir werden uns
innerhalb dieser Funktion darum kümmern. Das ist also
zuerst der Beitragsname, Punkterweiterung, die
Punkterweiterung, der
Posenname und dann EXE-Erweiterung mit
dem Punkt. Großartig. Und jetzt können wir das
Stammverzeichnis und den Dateinamen verbinden, und das ist unser Dateipfad. Hervorragend. Dann wird uns das Post-Wörterbuch zur Verfügung gestellt
. Wir müssen es nicht bekommen. Dann speichern wir die Datei einfach. Und das war's. Es ist großartig. Lass es uns ganz schnell testen. Gehen wir also zurück zu Maya. Und lassen Sie uns einen neuen Python-Tab erstellen. Wir werden
aus der Fotobibliothek importieren. Kern importieren. Ich werde den Kern tatsächlich als
Bibliothekskern benennen, nur um es ein
bisschen expliziter zu machen, Bibliothekskern Punkte in die Datei
schreiben. Und wir brauchen ein
Gegenwörterbuch. Also lass mich, lass mich, lass mich
Beiträge importieren, importieren, unterstreichen, übertragen. Und holen wir uns beide Wörterbücher auf
die gleiche Weise wie zuvor. Machen Sie ein paar,
fügen Sie das hier ein. Also müssen wir die
Pose benennen, die sein wird, nennen
wir sie einfach die erste Pose. Und wir müssen
das Wörterbuchdikt bereitstellen. Großartig. Lassen Sie mich also einfach sicherstellen , dass meine Auswahl immer noch da
ist. Wähle den Hut aus. Wir holen uns
das Posenwörterbuch. Kann das dann in eine Datei schreiben. Objekt hat kein Attribut,
oder? Datei posten. Weil wir das nicht getan haben, haben
wir das natürlich nicht neu geladen. Lass uns neu laden.
Weil wir Code hinzugefügt haben, müssen wir dieses Modul neu laden. Da hast du es. Wenn wir jetzt unsere Datei überprüfen, haben
wir einen neuen Ich habe
einen Tippfehler gemacht, es tut mir leid, zuerst, nehmen wir an, sollte zuerst sein, aber was wir haben den
Inhalt des Beitrags darin. Großartig. Jetzt können wir also zwei Dateien
posten.
38. Posen aus JSON-Dateien lesen: Jetzt müssen wir die Posen
aus einer Datei oder einen
Beitrag aus einer Datei lesen . Lassen Sie uns also eine neue Funktion
namens Red Hose aus einer Datei erstellen. Und alles, was wir
hier brauchen, übrigens, ich lasse zwei Leerzeichen
zwischen meinen Funktionen, nur um es ein bisschen
übersichtlicher oder organisierter zu machen. Alles, was wir für diese
Funktion benötigen, ist ein Dateipfad. Nun, das geschieht auf
ähnliche Weise wie das Schreiben von Dateien, aber wir müssen das Gegenteil tun. Natürlich müssen wir es lesen. Also werden wir
den Context Manager verwenden. Wir werden die
Datei im Radian-Modus öffnen. Und wir werden wieder
die JSON-Bibliothek verwenden ,
aber um die Datei zu lesen. Jetzt wird dump
ein Wörterbuch in
eine Datei ausgeben und load wird
ein Wörterbuch aus einer Datei laden. Jetzt müssen wir
der Ladefunktion nur noch die Datei zur Verfügung stellen , aus der wir laden möchten. Und das speichern wir
in einer Variablen, die wir entweder als Pulls Data bezeichnen
können , weil
es das ist, was es ist. Oder poste das Diktat. Wir werden uns daraus ein
Wörterbuch holen. Der Context Manager
kümmert sich natürlich darum,
die Datei für uns zu schließen , und dann können
wir die Pose zurückgeben. Nun, das Coole
an Kontext-Managern ist, dass selbst wenn Sie in sie
zurückkehren, was bedeutet, dass wir die Funktion
beenden, sie die Datei trotzdem schließt,
bevor Sie die Funktion verlassen. Das ist also das
Tolle Kontext-Managern, egal was Sie tun,
sie stellen sicher, dass was auch immer
getan werden muss, wenn Sie
die Ausführung des Codes
in ihnen beenden , es passiert. Großartig. Das sind wir also, wir können
jetzt eine Datei lesen. Lassen Sie uns das schnell testen. Also wollen wir lesen. Lass es uns hier machen. Pose aus Datei,
entspricht Bibliothekskern. Lesen Sie Prosa, Beiträge aus einer Datei. Und der Dateipfad sind natürlich diese Dateien hier, wir
wollen den ersten Beitrag lesen, also lass mich das kopieren. Geben wir diesen Dateipfad an. Ich werde es einfach schreiben. Für einen Ehepartner einschließlich meines Tippfehlers. Wir sollen JSON mit Punkten versehen. Und dann können wir
Pose aus Galle drucken. Und da
wir einige Änderungen vorgenommen haben, müssen
wir unser Modul natürlich neu laden. Und dann kann ich meine Funktion benutzen. Jetzt heißt es, dass der Dateiname ungültig ist. Okay, das ist mein Fluchtcharakter. Okay, lassen Sie mich einfach
das r vor
dieser Zeichenfolge hinzufügen , um zu vermeiden, dass Zeichen
maskiert werden. Und da hast du es. Jetzt ist post from file
is the director ein Wörterbuch, das direkt
aus dem Inhalt dieser Datei stammt . Hervorragend, jetzt können wir Dateien
lesen und schreiben. Bevor ich weitermache, möchte
ich nicht vergessen, meine Doc-Strings zu erledigen. tut mir leid. Let's
do ride schuldet also Daten der Datei. Dann ist der Beitragsname eine
Zeichenfolge der resultierenden Datei. Beispiel. Auch hier liegt es an Ihnen, was Sie in
das Dokument eingeben. Solange es so
beschreibend und nützlich genug ist. Pausiere den Akt
und wir sagen Inhalt der Pose. Und in diesem Fall geben wir
nichts zurück. Dann machen wir dasselbe
für die Lesefunktion. Brücke, Posendaten. Datei. Der Dateipfad
wird eine Zeichenfolge sein. Ich denke, dieser ist
sehr selbsterklärend. Lass uns einfach eine Datei zum Lesen
hinzufügen. Und dann
wird der Rückgabewert ein Wörterbuch sein. Ein Wörterbuch. Als Nächstes müssen wir wissen, welche Posen
wir im Verzeichnis haben, damit wir die Bibliothek damit
füllen können . Das bedeutet, dass wir alle Dateien
in diesem von uns ausgewählten
Stammverzeichnis speichern müssen . Also wie gesagt, der Name
der Datei ist der
Name der Pose und der Inhalt
der Datei ist
die Werte für den Beitrag. Also lass uns weitermachen und die Dateien in
dieses Verzeichnis
holen. Wir können die
Betriebssystembibliothek wieder verwenden. Lass mich wieder hierher gehen. Lassen Sie mich
den ganzen Code löschen, sodass wir ihn nicht mehr benötigen. Lassen Sie uns einfach
die Betriebssystembibliothek verlassen. Das Verzeichnis, mit dem wir
arbeiten. Stellen wir es wieder rein. In der Betriebssystembibliothek gibt es dort eine Funktion namens list. Was es braucht, ist
ein Verzeichnispfad, und es gibt Ihnen
eine Liste
aller Inhalte in diesem Verzeichnis. Wir können also sagen, da es sich um eine Liste handelt,
können wir diese Liste durchgehen. Wir können dafür sagen, denn der Artikel ist
immer gedankenlos da. Lassen Sie uns diesen Artikel einfach ausdrucken. Da hast du es. Was es sind, sind die drei Dateien,
die wir bisher erstellt
haben, sind
zwei Posen und eine TXT-Datei. Jetzt wollen wir es nicht in einer C-Datei
haben, wir wollen nur die JSON-Dateien. Und wir wollen auch
die Dateipfade dieser,
dieser Datei wissen , oder? Moment haben wir also die Datei, den Namen der Datei, aber wir wollen den
vollständigen Dateipfad erhalten. Ich werde also eine Funktion erstellen, die ein Wörterbuch
hat, das den Namen der Pose enthält, sagen
wir den Namen des Beitrags. Und es wird auch
den Pfad zu der Datei haben , die
den Inhalt für diesen Beitrag enthält. Gehen wir zurück zu PyCharm und
beginnen, diese Funktion zu schreiben. Stellen wir es hier oben hin. Ich werde, da
wir aus dieser Pose ein Wörterbuch
bekommen, nenne
ich es Wörterbuch für Posen
abrufen. Jetzt werde
ich noch einmal
den Docstring hinzufügen, weil ich
weiß, was ich erwarte. Gutes Wörterbuch
mit einem sehr guten Niveau. Moses. Und ich werde ein Beispiel ausführen. Das Wörterbuch wird
ungefähr so aussehen. Wir werden den
Postnamen als Schlüssel und den Pfad zur Pose
als Wert haben, fünf. Aber das bedeutet jetzt auch, dass die
Dateien eindeutig sein müssen, da wir uns darauf verlassen, dass der Name
der Datei der
Name der Pose ist. Wir beschränken das Tool auch , Posen nicht
duplizieren zu können. Aber ich denke, das ist okay. Entschuldigung, keine doppelten Impulse. Sie können
die Pose duplizieren, Sie können den Namen der Pose nicht
duplizieren. Wir geben ein Wörterbuch
zurück. Okay, also noch einmal, wir wollen, wir wollen, wir wollen den
gesamten Inhalt in
unserem Stammverzeichnis auflisten . Also
sagen wir noch einmal, Punkt in unserer Liste dort, wir werden
unser Stammverzeichnis verwenden. Eigentlich
nenne ich diesen Dateinamen. Denn damit arbeiten
wir. Wir arbeiten mit Bänden. Jetzt. Lassen Sie uns ein
leeres Wörterbuch initialisieren. Wir werden es Posen nennen,
um ein leeres Wörterbuch zu sein. Und wir müssen zuerst
den Namen der Beiträge herausfinden. Der Hostname wird, wie gesagt, der Name der
Datei ohne die Erweiterung sein. Und wie gesagt, wir wollen nur
die Posen bekommen , die mit
Punkt json enden, weil das das Format
ist, das wir gewählt haben. In diesem Fall möchten wir diese TXT-Datei ignorieren, wenn
wir sie
haben . Also lass uns, lass uns zuerst
den Scheck einwerfen. Nehmen wir an, wenn der
Name des Dateiunterstrichs mit der Erweiterung endet, die X ist, machen
wir tatsächlich das Gegenteil. Wenn nicht der Dateiname und Sweat-Erweiterung, die wir
gewählt haben, dann Jason. Wir machen einfach
weiter und überspringen diese Datei. Hervorragend. Jetzt kommen wir zum
Beitragsnamen aus dieser Datei. Das ist wieder der Name
der Datei ohne die Erweiterung. Das können wir also tun, indem wir
den Dateinamen punktweise aufteilen. Wir teilen die Punkte nach
dem Punkt auf. Dadurch erhalten wir den
Namen der Datei, verbunden mit dem Namen der
Datei und der Erweiterung. Und wir wollen nur den
Namen der Datei, der
das erste
Element in dieser Liste ist. Wir haben also den Postnamen und jetzt wollen wir den
vollständigen Pfad zur Datei. Wir wollen den
Dateipfad also das Verzeichnis und
den Namen der Datei verknüpfen. Es wird also immer ein Punktpfad
am Gelenk
sein , wie wir
es zuvor getan haben. Wir werden
dem Stammverzeichnis beitreten. Und die Datei, die Datei, die wir
durch die Inspektion
des Inhalts dieses Stammverzeichnisses erhalten haben . Da hast du es. Das wird also der Dateipfad sein. Also sagen wir, ich hoffe,
wir fahren nicht zu schnell. Lassen Sie uns drucken,
was wir bisher haben. Nehmen wir an, der Hostname wird sein, mal sehen, was wir für den Postnamen
bekommen. Lassen Sie mich diese Zeile duplizieren. Wir werden die Pose drucken. Der Dateipfad wird der Dateipfad sein. Und hier drin, stellen
wir sicher, dass wir richtig überspringen. Also werden wir
sagen, es ist Überspringen. Und sagen wir den Dateinamen. Was wir überspringen. Was ich hier mache, ist, dass ich innerhalb der
gedruckten Erklärung
mache. Ich setze ein Komma und Sie können diese Weise mehrere Dinge
zusammen
drucken. Gehen wir also zurück zu Maya. Verwenden wir unsere Funktion
, die gute Beiträge
heißt und sie hier geladen hat. Da wir einige Änderungen
vorgenommen haben, laden
wir unser Modul erneut. Und lassen Sie uns einfach die
Bibliothek auf dem Kreis ausführen , der den Kernpunkt
unterstrichen und gepostet wird. Ich brauche momentan keine
Nachtransplantation. Großartig. Da hast du es. Also bekommen wir, wir
nehmen zum Beispiel das JSON oder wir bekommen den
Beitragsnamen daraus,
indem wir den Namen
der Datei aufteilen und nur den ersten Teil
nehmen. Und wir überspringen auch test.txt, weil es nicht mit Jason
endet, oder? Das sind also die Werte, die wir für das Wörterbuch
wollen. Wir wollen den Namen der
Pose, die wir bekommen haben. Und wir wollen den Pfad zu der
Datei, die den Inhalt enthält. Also bleibt
mir nur noch übrig, diese beiden Zeilen und
auch diese gedruckte Aussage zu löschen. Alles was wir noch tun müssen, ist unser Wörterbuch
zu füllen. Also unser leeres
Wörterbuch hier posiert. Jetzt sind die Schlüssel für
das Wörterbuch die Namen
des Beitrags und der Wert für jeden Schlüssel ist der
Dateiunterstrichpfad. Das ist alles was wir tun müssen. Und dann müssen wir das Wörterbuch
zurückgeben. Also lasst uns das testen. Lassen Sie uns diesen Code ausführen, das Modul
neu laden
und die Funktion ausführen. Es ist nichts passiert, weil wir natürlich
nicht drucken. Wir können das also in einer
Variablen namens Posen zeigen. Und drucke diese Variable aus. Lass mich, lass mich
mein Ausgabefenster leeren. Da hast du es. Jetzt haben wir ein Wörterbuch
mit mehreren Werten, die nur die Richtlinien sind
, die uns interessieren. Also teste die Pose, einen
Pfad zur Datei. Erste Pose und der
Pfad zur Datei. Jetzt siehst du, dass wir doppelte Schrägstriche
bekommen. Das liegt daran, dass wir die Funktion verwenden, die 0 ist ein Pfad
zum Verbinden. Es wird also
sicherstellen, dass Sie
einen gültigen Dateipfad erhalten , und er wird
keine Probleme verursachen. Diese
doppelten Schrägstriche zu haben
ist also überhaupt kein Problem. Wir können Dateien von ihnen lesen. Da hast du es.
Jetzt wissen wir also, dass wir damit unsere Bibliothek
füllen können.
39. Die UI erstellen: Jetzt, da wir über die
Funktionen verfügen, die wir benötigen, können
wir mit der Erstellung der Benutzeroberfläche fortfahren. Jetzt unterscheidet sich diese Benutzeroberfläche
von der vorherigen. Nicht nur das, es ist ein
bisschen komplexer, aber nicht wirklich viel. Aber hauptsächlich darin, dass wir jetzt
Eingaben vom Benutzer erhalten, sowohl durch die Auswahl
dieser Liste als auch durch eine Texteingabe. Wenn sie serbisch sind, bekommen
sie den Namen
des Posts, den sie speichern möchten. Lassen Sie uns kurz aufschlüsseln,
wie diese Benutzeroberfläche aufgebaut ist. Ich mache einen Screenshot ,
damit ich darauf zeichnen kann. Denken Sie daran, dass wir
über Layouts gesprochen haben und darüber, wie Layouts im Grunde das ausmachen,
was Benutzeroberflächen wirklich sind. In diesem Fall haben
wir also die Liste der Posen und
wir haben diesen Button hier. Das bedeutet, dass wir
ein Layout benötigen , das
von oben nach unten fließt. Das wäre ein Spaltenlayout. Dieser erste Abschnitt wird ein Spaltenlayout
sein. Dann haben wir diesen
zusammenklappbaren Abschnitt. Und das ist
zufällig ein weiteres Layout , in dem sich ein Layout befindet. Der Grund, warum wir diese
Dinge in Ihrem Layout benötigen, ist
, dass dieser nächste Abschnitt ebenfalls
von oben nach unten fließt. Wie Sie sehen können, haben
wir diese Zeile hier. Und dann haben wir die Pose, den Safe Pose-Button. Das wird also
ein anderes Spaltenlayout sein. Aber innerhalb dieses
Spaltenlayouts haben
wir diesen Text daneben. Wir haben dieses Eingabefeld , das ein Zeilenlayout
benötigt ,
da es
von links nach rechts fließt. Es ist also nicht wirklich
so kompliziert. Es sind nur ein paar Layouts, die den Ablauf dieses Tools
erstellen. Im Grunde haben wir ein
Spaltenlayout für Spalten-Layouts, ein Zeilenlayout und dann ein
zusätzliches zusammenklappbares Layout. Das ist also wirklich nur für Layouts, um dieses
Tool fertigzustellen. Lass uns Term kaufen und
anfangen, an unserem Code zu arbeiten. Wir organisieren unseren Code also noch einmal so, dass wir dieses Kernmodul haben
, das die Hauptfunktion hat. Und wir haben ein völlig
separates Modul , das für die Benutzeroberfläche bestimmt sein wird. Also alles, was
nur für die Benutzeroberfläche benötigt wird, wird hier sein. Alles, was mit
Funktionalität zu tun hat und wirklich
alles, was unabhängig von der Benutzeroberfläche
verwendet werden kann unabhängig von der Benutzeroberfläche
verwendet sollte außerhalb dieses
UI-Moduls bleiben. Ich gehe wahrscheinlich auf
den Kern ein. Wir müssen also etwas tun, das auch
für diese Art von Benutzeroberfläche anders
ist, da wir
Informationen abfragen oder Eingaben vom Benutzer über
die Benutzeroberfläche erhalten. Wir müssen unsere Benutzeroberflächenelemente
sehr spezifisch benennen , nicht
spezifisch, sondern eindeutig. Wir müssen unserem
Fenster einen eindeutigen Namen geben ,
damit wir die
Dinge in diesem Fenster abfragen können. Und wir müssen
all ihren UI-Elementen einen
bestimmten Namen geben , damit wir Informationen von ihnen
erhalten können. Beginnen wir damit,
das Fenster zu erstellen, das wir benötigen. Die Mayas haben diese Bibliothek gehört,
das ist deine Schulter. Aus der Maya-Eingabe, der
CMBS-Bibliothek, sehen
wir das S.
Und ich werde eine Funktion
namens show you why
erstellen. Jetzt verwende ich diesen Namen, um mit der anderen
Funktion in unseren beiden anderen Funktionen
konsistent zu bleiben . Darin müssen wir
wie
beim letzten Mal ein Fenster erstellen . Geben wir ihm einen Titel. Titel entspricht Posenbibliothek. Und dann müssen
wir, wie Sie sich erinnern, das Fenster zeigen. Also Cmd S Punkt Fenster anzeigen. Lass mich sichergehen, dass ich mir
nicht sicher bin, Fenster. Und dann müssen wir den Namen des Fensters, das
wir zeigen, eingeben. letzte Mal für das andere Tool
haben wir also mein anderes Seitenfenster, den internen Namen des Fensters, und wir haben Maya ihn uns geben lassen,
damit begonnen, ihn
in dieser Variablen zu speichern. Dann zeigen wir das einfach. Dieses Tool funktioniert nun so , dass Sie tatsächlich mehrere Kopien
dieses Fensters
öffnen können . Und das ist in Ordnung. Aber für die Postbibliothek wollen
wir, dass sie einzigartig ist. Wir möchten, dass immer
nur eine Kopie des Fensters
geöffnet ist. Aus diesem Grund werde
ich unserem
Fenster einen eindeutigen Namen geben. Ich werde
eine weitere globale Variable erstellen, okay, Levelvariable. Ich nenne
es einen Fensternamen. Dies wird der interne
Name der UI-Bibliothek sein. Ui. Wie bereits erwähnt,
wähle ich für
die globalen Variablen nur Großbuchstaben, da dies darauf hinweist, dass
es sich im gesamten Code um
einen konstanten Wert handelt. Also werden wir unser Fenster
mit diesem eindeutigen Namen
erstellen ,
anstatt meinen, ich wähle einen Namen für uns. Und dann
zeige ich den Fensternamen. Korrigiert. Gehen wir also zu Maya und sehen, wie
das aussieht. Also werden wir
aus der Postbibliothek
importieren, die Benutzeroberfläche importieren und Änderungen daran
vornehmen. Lassen Sie uns also unseren
Reload-Befehl bereit haben. Sagen wir, UI dot
show, underscore UI. Da hast du es. Das Fenster ist natürlich leer, aber wir haben den
Titel, den wir gewählt haben. Nun, wenn ich das noch einmal durchführe. Ohne das Fenster zu schließen, werden
Sie feststellen, dass
wir eine Fehlermeldung erhalten. Wir sagen, dass die
Benutzeroberfläche der Postbibliothek nicht einzigartig ist. Was hier passiert
ist, dass, wenn ich dieses Fenster schließe, der Name weg ist. Aber wenn ich es öffne und
versucht habe, es erneut zu starten, kann
ich das Fenster nicht erstellen. Sie können hier sehen als wir versuchen, das Fenster zu
erstellen, dass,
als wir versuchen, das Fenster zu
erstellen, beschwert wird, dass
der Name bereits existiert. Wir können also etwas dagegen tun, nämlich einfach
die Benutzeroberfläche zu löschen. Also können wir, wir können ein Häkchen hinzufügen,
bevor wir ein Fenster erstellen. Wir können überprüfen, ob die Benutzeroberfläche existiert. Wir können sagen, ob das CMBS-Punktfenster und dann der Fenstername, tut mir leid, Klammern
öffnen und schließen existiert. Weil es wahr ist. Wir fragen also ab, eigentlich müssen
wir diesen Wert abfragen. Oder ich kann einfach sagen, dass
Abfrage gleich wahr ist. Sie können auch q
ist gleich wahr schreiben, wenn Sie möchten, aber ich werde den
vollständigen Namen des Arguments schreiben. Die Abfrage entspricht „wahr“. Wenn das Fenster existiert, werden
wir dieses Fenster grundsätzlich löschen. Dies erfolgt über den
CMBS Dot Delete UI-Befehl. Und wir werden
den Namen dieses Fensters löschen. Name des Fensters. Großartig. Was also passieren wird, ist ,
wenn dieses Fenster bereits existiert, werden
wir es
komplett löschen und
ein neues von Grund auf neu erstellen. Schauen wir uns an, wie das
funktioniert. Da hast du es. Jetzt können wir diesen
Code mehrmals ausführen. Wir bekommen keine Fehler. Hervorragend. Als Nächstes müssen wir den oberen Teil
erstellen
, der zum Anwenden der Posen
verwendet wird. Wir benötigen also eine Liste und eine
Schaltfläche, die sich einem
Spaltenlayoutraster befinden
werden. Nennen wir diesen Abschnitt also den Abschnitt mit den
zutreffenden Beiträgen. Wir brauchen ein Spaltenlayout. Nehmen Sie das S-Punkt-Spaltenlayout an. Wenn Sie sich an das letzte Mal erinnern, haben wir die Einstellung „column
equals true“ geändert, sodass die Widgets
automatisch mit dem Fenster erweitert werden. Also werden wir das auch
in diesem Fall verwenden. Ich sage nur, dass
eine doppelte Spalte gleich wahr ist. Und denken Sie daran,
wenn wir eine Benutzeroberfläche erstellen, lege
ich fest, dass das Layout
das aktuelle übergeordnete Parlamentslayout
für alles andere wird das aktuelle übergeordnete Parlamentslayout , was
wir danach erstellen. Wir wissen also, dass wir eine Schaltfläche erstellen müssen
. Das ist einfach.
Wir kennen den Boden. Wir wissen, dass der Text in den unteren Lippen unter
dem Etikett Argument steht. Also sagen wir,
Label entspricht angewandter Pose. Und wir müssen der Schaltfläche einen
Befehl hinzufügen, aber unser Ansatz wird darin bestehen, zuerst das Skelett
der Benutzeroberfläche zu erstellen. Und dann stellen wir alle Verbindungen für die eigentliche
Funktionalität her, die wir haben. Wir haben also einen Button
und wir brauchen eine Liste. Um nun diese Art
von Liste zu erstellen, die wir wollen, gibt es einen Befehl
namens Text Scroll List. Woher weiß ich das jetzt? Ich, ich habe online nachgeschaut, ich habe online ein paar Beispiele gefunden. Und das war das
beste Widget, das ich für das gefunden habe, was wir tun wollen. Gehen wir also zu
den Beispielen dazu über. Scroll ist Tech Scroll
ist diese Dokumentation. Sehen Sie, was wir tun können. Allein die Anzahl der Zeilen,
Mehrfachauswahl. Wir könnten es vielleicht
einfach leer erstellen. Lassen Sie uns also einfach die Liste erstellen
und sehen, wie das aussieht. Das wird also CMBS sein, die Art Text Scroll List. Nennen
wir die nächste Scrollliste. Und mal sehen, wie das bisher
aussieht. Der Code, da hast du es. Wir haben eine Liste und wir haben
Glühbirnen auf Knopfdruck. Hervorragend. Lass uns diesen Abschnitt vorerst so belassen. Fahren wir mit dem
nächsten Sitzungsabschnitt fort. Wir versuchen erneut, das Skelett
so schnell wie möglich fertig zu stellen. Und dann gingen wir zurück
und polierten sie. Die Funktionalität als alle anderen Details
, die wir möglicherweise benötigen. Für unseren nächsten Abschnitt müssen
wir das klarstellen, wo
wir für unseren nächsten Abschnitt dieses wo
wir für unseren nächsten Abschnitt zusammenklappbare Layout benötigen. Nun, das ist eine Art von
Layout, das als Rahmenlayout bezeichnet wird. Rahmen angelegt. Sehen wir uns dazu
die Dokumentation an. Ich gehe noch einmal
direkt zu den Beispielen über. Das ist normalerweise der schnellste
Weg, um ein Beispiel für
dieses Rahmenlayout zu erhalten . Mit einem Etikett. Wir brauchen
ein Label, weil wir wollen, wir wollen, dass es so bleibt, dass es
uns den Namen dieses Abschnitts gibt. Diese
Bezeichnung für das Rahmenlayout entspricht also einer Zeichenfolge. Dieser Abschnitt wird also gespeichert. Abschnitt Pose. Hervorragend. Also
CMBS-Punktrahmen-Layout. Und sicherheitshalber rufen wir
das Label an. Pose. Hervorragend. Und dann haben
wir innerhalb dieses Layouts über
ein Spaltenlayout gesprochen. Lassen Sie uns das
Spaltenlayout erstellen, das wir in
diesem zweiten Abschnitt verwenden werden. Und lassen Sie uns das, was
wir hier haben, tatsächlich wiederverwenden. Weil wir die
gleiche Art von Layout benötigen. Wir möchten auch, dass es
so einstellbar ist, dass es sich
automatisch erweitert. Nun wissen wir, dass wir dieses
Zeilenlayout mit einem Namen, einer
Bezeichnung namens Name
und einem Textfeld
wollen . Die aktuelle Entschuldigung ist also
dieses Spaltenlayout, oder? Also wollen wir
unter diesem Spaltenlayout ein Zeilenlayout hinzufügen. Und wir wollen, dass es zwei
Elemente enthält. Erinnern Sie sich noch einmal
an unser vorheriges Beispiel,
es war eigentlich nicht im Stuhl, sondern in einem anderen Beispiel. Wir müssen, wir müssen die Anzahl der
Elemente
angeben, die Anzahl
der Spalten, die im Zeilenlayout enthalten sein
werden. Mal sehen, wie das gemacht wird. Wir gehen zur Dokumentation, die den Rollout
zeigt. Wir haben gemacht. Es gibt die Anzahl der Spalten an. Anzahl der Spalten
entspricht der Anzahl der Elemente, die wir in dieser Ebene haben möchten. Hervorragend. Die Anzahl der Spalten entspricht also
zwei, da
wir nur einen Text,
ein Textstück und auch
das Textfeld benötigen . Großartig. Jetzt, da unser Zeilenlayout das aktuelle übergeordnete Element
ist, können
wir unsere Bezeichnung
oder einen Text hinzufügen. Und wenn Sie sich
noch einmal an das vorherige Tool erinnern, können
wir das stehlen. So können wir den
Textbefehl mit dem Label stehlen. Wir können es einfach halten. Einfacher Text mit einem
Etikett und auf dem Etikett steht der Name. Großartig. Und dann neben dem
Text, Etikett, das hoch. Neben diesem Textlabel benötigen
wir ein Textfeld. Für das Textfeld gibt es ein sehr
praktisch benanntes Widget namens Textfeld
, und zwar dieses hier. Es gibt
Ihnen lediglich ein Feld zum Eingeben. Und wir können auch Informationen
aus diesem Textfeld abfragen. Schauen wir uns also kurz
die Beispiele an. Es sieht so aus, als könnten wir
es einfach aufrufen und es wird
uns dieses Textfeld geben. Also lass uns
weitermachen und das Textfeld ausfüllen. Da hast du es.
Schauen wir uns also an, was passiert, wie es bisher aussieht. Gehen wir zurück zu Maya
und führen unsere Benutzeroberfläche erneut aus. Okay, großartig. Es ist, als ob es einige
Fortschritte gibt, nicht erstaunlich. Unser zusammenklappbarer Bereich kollabiert
nicht wirklich. Es sieht einfach aus wie ein
weiteres Etikett. Und aus irgendeinem Grund nimmt
unser Textfeld nicht, es nimmt nicht
den gesamten Platz ein. Okay, das können wir reparieren. Aber lassen Sie uns das Hinzufügen aller
Schaltflächen
beenden und dann
kommen wir zurück und machen
diesen Abschnitt zusammenklappbar. Das Letzte, was wir
hinzufügen müssen, ist der Safe Post-Button. Das sollte einfach sein. Wir können sagen,
CMBS-Punktbutton, Label ist gleich Speichern. Nun, wenn wir
das jetzt ausführen und sehen, wie es
aussieht. Zu viele Kinder im
Layout, Zeilenlayout. Okay? Also noch einmal, wie ich bereits erwähnt habe, das aktuelle Elternteil
führt diesen Rollout durch. Wir könnten das also beheben, indem dem Rowley ein weiteres Kind
oder eine weitere Spalte zum Hinzufügen geben. Und das wird nie mehr der Fall sein. Aber jetzt
ist die Safe-Pause-Taste da und wir
wollen sie nicht dort haben. Wir wollen es in
diesem Abschnitt haben, oder? Wir müssen also
das übergeordnete Element vom aktuellen Zeilenlayout
zum vorherigen Teil,
dem Spaltenlayout, ändern das übergeordnete Element vom aktuellen Zeilenlayout
zum vorherigen Teil, . Wie machen wir das? Wir tun dies, indem Befehl set current,
toupper und function verwenden. Und es gibt eine ganz
spezielle Notation , dass meine Beine und das sind zwei Punkte. Ich werde hier
einen Kommentar abgeben. Layout als neue Eltern. Noch einmal das aktuelle
oder das aktuelle Layout. Das aktuelle übergeordnete Element
ist das Zeilenlayout. Also setzen wir das neue übergeordnete Element auf das vorherige
Spaltenlayout. Und jetzt
sollte sich unser Button in der Spalte und nicht in der Zeile befinden. Schon wieder. Da hast du es. Das sieht eher nach dem aus,
wonach wir suchen. Lassen Sie uns jetzt zurückkommen und
diesen Abschnitt tatsächlich zusammenbrechen lassen . Auch hier ist dieser zusammenklappbare
Abschnitt das Rahmenlayout. Wenn wir also zur
Dokumentation gehen, werden wir nach diesem Rahmenlayout suchen. Es gibt ein Argument
namens Collapse. Tut mir leid, es
heißt zusammenklappbar. Es kümmert sich um die Zusammenklappbarkeit
des Rahmenlayouts. Das ergibt Sinn. Also können wir einfach, es braucht einen Booleschen Wert. Wir können also einfach zusammenklappbar
sagen. Zusammenklappbar entspricht wahr. Und das
sollte das regeln. Laden Sie unseren Code neu
und führen Sie ihn erneut aus. Und da hast du es. Jetzt
kollabieren wir. Wir haben einen Bereich, der zusammengeklappt werden kann. Hervorragend. Das funktioniert also,
denn auch hier ist
das Spaltenlayout
diesem Rahmenlayout untergeordnet und alles andere in diesem Abschnitt befindet sich
unter diesem Spaltenlayout. Wir reduzieren also wirklich
diese Spaltenebene. Nun, das nächste, was wir hier
haben, ist dieser Abschnitt, dieser klassische Abschnitt
hat eine andere Farbe. Das haben wir in Stunden noch nicht, also lasst uns das ändern. Und dann wollen wir korrigieren, dass dieses
TextField zu kurz ist. Wir wollen,
dass es den gesamten verfügbaren Platz
einnimmt. Schauen wir uns an, wie wir
die Farbe unseres Rahmenlayouts ändern können. Zurück zur Dokumentation. Es gibt ein Argument
namens Hintergrundfarbe. Und es heißt, das ist die
Hintergrundfarbe des Steuerelements. Die Kontrolle dieses Falls
bedeutet ein UI-Element. Die Argumente
entsprechen Rot, Grün und Blau, da die RGB-Werte jede Komponente
den Wert 0-1 haben. Also, wie Sie wissen,
oder wie Sie vielleicht wissen, geht
RGB von 0 bis 255, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, tut, Maya möchte, dass du das
in einen Bereich von Null bis Eins übersetzst , was sehr einfach ist. Und es fragt nach einer Liste. In diesem Fall kann es sich um eine
Liste oder ein Tupel mit den Werten R, G und B, Rot G und B, Rot,
Grün und Blau handeln. Lassen Sie uns also weitermachen und
diesen Argumenthintergrund verwenden. Hintergrund, Farbe ist gleich,
ich verwende ein Tupel. Das sind nun die Werte
0-1 und es sind Gleitkommazahlen, wie Sie hier
in der Dokumentation sehen können, es ist eine Gleitkommazahl, weil darin
ein Dezimalpunkt enthalten ist. Das erste
, was ich tun werde,
ist eine Farbe zu bekommen, mit der
ich zufrieden bin. Sie können einen
beliebigen Satz von RGB-Werten wählen . Ich suche gerne
online nach einem RGB-Farbwähler. Zum Beispiel hat Google hier einen. Ich habe
eine leicht hellblaue Farbe gewählt. Also lass mich so
etwas finden. Und das sind die RGB-Werte. Wir können also diese Werte nehmen
und sie umrechnen, auch hier liegt der
Bereich bei 255. Das ist also der Maximalwert und der niedrigste
Wert ist Null. Wir können
diese Zahlen also von
diesem Wert aus umrechnen , um diesen Schlüssel
auf einen Bereich von Null bis Eins zu drehen. Lass mich das
kopieren und in Maya einfügen. Ich werde Python
für diese Konvertierung verwenden. Wir müssen also ein bisschen rechnen, denn das ist Komprimierung, aber es ist sehr einfache Mathematik. Nehmen wir also an, wenn unser
Wert für den RGB-Wert Null ist, das Äquivalent im Bereich von wäre
das Äquivalent im Bereich von
Null bis Eins Null, oder? Wenn Ihr RGB-Wert ist, ist
der Maximalwert 255, das Äquivalent im Bereich von Null
zu Eins wäre eins, in diesem Fall 1,1. Das bedeutet also, dass wir
nur unseren Wert durch 255 teilen müssen, und das ergibt
diesen Bereich. Also in diesem Fall habe ich das. Diese drei Zahlen hier. Alles was ich tun muss, wenn ich das Äquivalent dazu
im Bereich von Null bis Eins
wissen will , kann
ich einfach durch
255,0 dividieren , weil ich möchte, dass
ich einen resultierenden Float erhalte. Und das ist das Ergebnis. Lassen Sie uns das also
effizienter machen und eine einfache For-Schleife
für diese Werte erstellen. Also für den Wert an dieser Stelle
durch dieses Zahlentupel sage
ich Druckwert geteilt durch, geteilt durch 255,0. Das gibt mir die Werte, die wir wollen, dieser oder dieser Baum. Lass uns sie kopieren und
in unseren Code übernehmen. Nun, diese haben
viele Dezimalstellen, aber das alles
brauchen wir nicht wirklich. Wir machen das einfach. E-Mail-Adressen sollten ausreichen. Das wird also unser Rot sein. Das wird unser Blau sein. Entschuldigung, unser Grün, G, Rot, Grün und Blau. Da hast du es. Gehen wir zurück zu Maya und
sehen, wie das aussieht. Das ist der falsche Code. Das ist der Code
, den ich ausführen möchte. Da hast du es. sieht
dieser Abschnitt
ein bisschen schöner aus. Mir gefällt nicht, wie es mit dem Text
aussieht. Also werde ich
eine etwas dunklere Farbe wählen. Und da wir bereits
den Code für diese Übersetzung haben , können
wir das einfach hier
drin ausführen. Lassen Sie uns das
ganz schnell in unserem Code verwenden. Also nehme ich einfach die
ersten beiden Dezimalstellen. Ich
tippe einfach mit der Hand darauf. Es ist also zehn. Der
nächste ist 0,54 und der nächste ist 0,67. Geh, geh zurück, versuche es noch einmal. Und das ist schöner. Jetzt können
wir den Titel dieses Abschnitts sehen und wir haben
eine andere Farbe darauf. Natürlich können Sie die
gewünschte Farbe wählen. Das ist dein Werkzeug,
du hast die Kontrolle. Das nächste, worum wir uns kümmern
wollen, ist die Größe dieses TextFeldes. Eine einfache Möglichkeit, dies zu tun,
wäre , ihm eine feste Breite zu geben, sagen
wir 400 Pixel. Und damit ist alles erledigt. Das Problem ist, dass
wir das Fenster jetzt nicht, wir können
die Fenstergröße jetzt nicht unter 400 Pixel ändern,
was ein Problem ist. Stattdessen können
wir die Dimensionierung
über das Layout regeln. Die meiste Zeit, wenn
Sie sich damit auseinandersetzen müssen,
mit Größen und der Anpassung von
Widgets in der Benutzeroberfläche, die durch Layouts
gesteuert wird. Es besteht also eine gute Chance
, dass das Zeilenlayout, wir haben etwas für uns. Es ist genau hier. Es ist das erste Argument, das
wir sehen, eine einstellbare Spalte. Also schauen wir mal, was darin steht. Spezifizieren, gibt an,
welche Spalte
eine einstellbare Größe hat , die sich mit der
Größe des Layouts ändert. Das ist genau das,
was wir wollen und es braucht eine Ganzzahl als Argument. Also lasst uns weitermachen und das nutzen. Ich habe gerade die doppelte Spalte entspricht
der Anzahl der Spalten. Nehmen wir an, lassen Sie uns
das aus dem Textfeld entfernen. Wir wollen die
Größe im Zeilenlayout nicht festlegen. Wir möchten sagen, dass eine einstellbare
Spalte gleich ist. In diesem Fall beginnen die
Layouts
bei Eins zu zählen, nicht bei Null. Das wird also
die erste Spalte sein. Der erste Artikel wäre hier. Die zweite wäre das, was
wir anpassen wollen. Also werden wir
sagen, dass eine doppelte Spalte gleich wahr gleich zwei ist. Die zweite Spalte
sollte in der Größe veränderbar sein, weißt du, und los geht's. Das
wollen wir erreichen. Hervorragend. Die Benutzeroberfläche nimmt Gestalt an. Wir könnten es dabei belassen
, wenn du willst, aber ich denke, wir können ein paar Anpassungen vornehmen, um
es ein bisschen netter zu machen. Sie haben die Pause-Taste angewendet. Es könnte ein bisschen größer sein, da das der
Hauptknopf ist, den wir haben. könnte ein kleiner Zwischen unseren Elementen könnte ein kleiner
Abstand bestehen. Passen wir also den Abstand an, das Spaltenlayout als
Argument, das Zeilenabstand genannt wird. Stellen wir es auf zehn Pixel,
das ist z. B. ein bisschen viel. Lass es uns auf fünf halbieren. Und für die Schaltfläche sagen
wir eine Höhe von 60 Pixeln. Mal sehen, wie das aussieht. Das ist zu viel, aber ich finde den Abstand
etwas netter. Nennen wir es also die
Höhe in der Hälfte 30. Okay, das ist ein
bisschen besser. Und ich denke, der Safe Post-Button könnte auch etwas
größer sein. Also nehme ich dieses Argument und füge es
zu dieser sicheren Pause-Schaltfläche hinzu, aber ich werde
es 25 Pixel hoch machen. Es ist eine kleine Änderung, aber ich denke, das ist,
das ist ziemlich gut. Das Letzte, was wir tun möchten bevor wir
mit der Ausführung der Funktionen
auf der Benutzeroberfläche fortfahren , ist sicherzustellen,
dass die Liste
nur ein
Element gleichzeitig auswählen kann. Lassen Sie uns nun sehen, wie
das jetzt funktioniert. Wir können diese
Liste also zu Testzwecken vorab auffüllen. Wenn Sie sich die Beispiele ansehen, können
wir anhängen, lassen Sie uns dieses
Argument stehlen, z. B. anhängen. Nehmen wir doch einfach
die ersten drei Punkte. Wenn wir also sagen, dass Anhängen mindestens den Elementen
entspricht, werden
wir diese hinzufügen, wir werden
diese an die Liste in der Benutzeroberfläche anhängen. Also, wenn ich das aktualisieren würde, haben wir
jetzt all diese Artikel. Zufällig braucht
es also schon nur einen. Also die Auswahl von 11 auf
einmal, was großartig ist. Wenn Sie möchten, dass dies ein
Mehrfachauswahl-Doppelfeld ist. Für
das Zulässige gibt es eine Option .
Mehrfachauswahl entspricht wahr. Nun, wenn aus welchem Grund auch immer
für dieses oder ein anderes Tool, Sie wollten, dass es multifunktional ist. Um eine Mehrfachauswahl zu haben. Sie können zulassen, dass
Mehrfachauswahl gleich wahr ist. Und wenn wir die Auswahl
abfragen, erhalten
Sie eine Liste
der ausgewählten Objekte. Für dieses Tool möchten
wir jedoch jeweils nur
einen Beitrag bewerben. Also werde ich eigentlich explizit
sein und sagen Mehrfachauswahl
zulassen
ist falsch. Jetzt
ist das Standardverhalten natürlich falsch, aber ich denke, das
explizit zu haben,
wäre eine gute Ergänzung. Stellen wir es Seite an Seite. Ich finde, das sieht sehr ähnlich aus. Es ist
ziemlich genau das, was wir wollen. Lassen wir die Benutzeroberfläche also so. Fangen wir an,
die Funktion zu verbinden. Alles was wir tun.
40. Die Funktionalität verbinden und deine Tools teilen: Okay, wir können jetzt mit der Arbeit an
der Funktionalität der Benutzeroberfläche beginnen . Lassen Sie mich meinen Code aktualisieren. Deshalb hängen
wir jetzt zu
Testzwecken Elemente an, tun Sie es, aber das
wollen wir nicht tun. Wir möchten es auf der
Grundlage der vorhandenen
Dateien, die wir haben, auffüllen . Wir wollten eine
Funktion namens Add Pose erstellen. Übrigens, es tut mir leid, ich habe meiner Show-UI-Funktion keinen Docstring
hinzugefügt. Pose, Bibliothek, URL anzeigen. Dieser ist eher
zellenselbsterklärend, benötigt
also nicht wirklich den Docstring, aber ich möchte sicherstellen, dass ich bei den guten Gewohnheiten
bleibe. Also werden wir der Scrollliste eine
Pose hinzufügen. Und so, wie wir das machen, bekommen
wir einen Namen oder posten ihn. Und das werden wir der Liste
hinzufügen. Wie machen wir das? Nun, wir können
den gleichen Befehl verwenden. Viele dieser Befehle für uns,
aber auch für den Umgang mit
Knoten ermöglichen es Ihnen, Informationen zu erstellen, zu bearbeiten und abzufragen, indem Sie all dies und den Befehl
verwenden. Also werde ich
den gleichen Befehl verwenden. Aber jetzt müssen wir wissen , welche Liste
geändert wurde, oder? Also so, wie ich es machen werde, und es wird ähnlich sein, wie wir das Fenster tauschen. Wir werden
einen eindeutigen Namen für
diese Scrollliste erstellen , damit wir ihn
im gesamten Code verwenden können. Also werde ich, ich werde eine
neue globale Variable
namens Textlistenname erstellen . Und ich werde
ihm einen eindeutigen Namen geben. Diese Namen, Texte, Listen, die eindeutig genug sein
sollten. Und tut mir leid, ich habe vergessen
, den Wert zuzuweisen. Wenn ich jetzt
die Text-Scrollliste erstelle, erstelle
ich sie
mit diesem eindeutigen Namen. Und das geschieht, indem einfach der Name als
erstes Argument an
diese Listenfunktion
übergeben wird. Das heißt, wenn ich
versuche, diese Liste zu bearbeiten, kann
ich denselben Namen verwenden, um auf dasselbe Listenraster
abzuzielen. Wenn ich jetzt eine Liste bearbeite das jetzt mache, wird
Maria versuchen, eine
neue Liste mit dem gleichen Namen zu erstellen. Was wir an dieser Liste bearbeiten wollen, ich sage,
Bearbeiten entspricht wahr. Und wie du das weißt, werde ich
eigentlich lassen, also lass uns das beenden
und dann zeige ich dir etwas in
der Dokumentation. Was ich bearbeiten möchte, sind die, die Elemente in der Liste. Also möchte ich neue
Elemente an die Liste anhängen. Ich möchte diesen Posennamen
anhängen. Nun, das ist es, was ich dir zeigen
möchte. Gehen wir zur
Dokumentation und schauen wir uns dieses Argument an. Wir befinden uns in der Dokumentation zu den technischen
Scrolllisten. Und wenn wir nach
dem Append-Argument suchen, können
wir sehen, dass es hier
diese Farben und
Buchstaben hat . C steht für Create. Sie können eine Liste erstellen, während Sie
etwas daran anhängen. Sie können bearbeiten, was
bedeutet, dass Sie Dinge an
eine bestehende Liste
anhängen können . Und m ist vielseitig einsetzbar. Mal sehen, was das bedeutet. Das bedeutet, dass für den Flug
mehrere Argumente übergeben werden können , entweder als Tupel oder als Liste. Okay, das macht Sinn, weil
wir eine Liste erwarten. Und wenn wir sehen, sehen
wir den Typ
, der erwartet wird. Das ist eigentlich
sehr irreführend. Es erwartet eine Zeichenfolge. Aber im Beispiel
sehen wir, dass es sich um eine Liste handelt. Es ist so, dass
Sie beides tun können. Sie können entweder eine Liste von Elementen oder ein einzelnes Element
angeben. In diesem Fall stellen
wir also ein
einzelnes Element als Zeichenfolge bereit. Und lass es uns einfach testen. Aber vorher
fügen wir den Docstring hinzu. Sie posten einen Namen in die Liste. Wir wissen, dass der
Postname eine Zeichenfolge ist. Und ich denke, der Name ist
sehr selbsterklärend, also überspringe ich
die Beschreibung
dafür . Da hast du es. Also lasst es uns, lasst es uns testen. Fügen wir also ein paar Posen hinzu. Sobald sie, sobald alles erstellt
ist, sogar nach dem Anzeigen des Fensters können
wir
sogar nach dem Anzeigen des Fensters ein paar Posen hinzufügen und
werden die nächste hinzufügen. Wir werden auch einen
Test hinzufügen, z. B. stellen
wir sicher, dass das funktioniert. Also, wenn ich neu lade, habe ich diese beiden Posen. Hervorragend. Das ist also der erste Schritt. Jetzt wissen wir, wie
wir unsere Liste bearbeiten. Und ich meine, wir könnten das
auch hier tun. Wir können, wir können UI sagen, die Add Pose machen und das einfach einen weiteren Test
nennen. Und das aktualisiert die
Liste für Sie. Großartig. Jetzt wollen wir eine Funktion
erstellen , die automatisch
alle Posen für uns füllt ,
wenn wir die Bibliothek starten. Das erste, was wir tun wollen, ist diese Liste zu
löschen, damit
wir sie neu auffüllen können. Es ist wie
eine Reload-Funktion. Es gibt also ein Argument
namens remove all. Alles entfernen. Dadurch wird die Liste einfach
gelöscht. Also lasst uns, lasst uns das machen. Lassen Sie uns, lassen Sie uns diese Funktion tatsächlich
aufrufen. Wir können es bevölkerte Posen nennen. Posen, oder wir können es Reload nennen. Reload ist ein neuer, besserer Name. Erneut laden. Posen neu laden. Das erste, was wir tun
wollen, ist die Liste zu
löschen , sodass sie leer ist. Und lassen Sie mich
diese Codezeile stehlen. Also werden wir noch einmal
auf dieselbe Liste abzielen. Wir werden es bearbeiten. Aber jetzt wollen wir alles entfernen. Und wie Sie sehen können,
können wir dieses Argument verwenden, wenn wir die Liste erstellen
oder wie wir die Liste bearbeiten. Lassen Sie uns also
alles entfernen, was gleich wahr ist. Und das sollte
die Liste löschen, mach einen Kommentar. Und jetzt wollen wir
die Namen der
Beiträge sammeln , die wir in diesem System gespeichert
haben. Dafür haben wir also
schon eine Funktion. Denken Sie daran
, dass wir
diese Funktion erstellt haben, die Ihnen ein
Wörterbuch mit allen Richtlinien bietet, die Ihnen zur Verfügung
stehen. Also müssen wir
unser Kernmodul importieren. Wir können also von einer Bibliothek aus sagen, Core
importieren, was dieser hier sein
wird. Von diesem Kernmodul aus wollen
wir nun das Post
Diction-Wörterbuch abrufen. Dieses Wörterbuch entspricht core,
dot, get pose,
detect, get pose. Und wie Sie sehen können,
ist PyCharm für
mich automatisch vervollständigt , weil ich im selben Projekt bin. Hervorragend. Wenn Sie sich also erinnern, enthält
dieses Wörterbuch
den Namen der Beiträge
als Schlüssel und dann den
Dateipfad für diesen Beitrag. Was uns in
diesem Fall also wichtig ist, ist der
Name dieser Posen. Wie machen wir das? Indem Sie alle
Schlüssel aus dem Wörterbuch abrufen. Beide Namen entsprechen
Posen, Diktatschlüsseln. Dadurch erhalten wir eine Liste
von Schlüsseln aus diesem Wörterbuch, das sind alle
Namen, die uns wichtig sind. Hervorragend. Also müssen wir sie jetzt nur noch zu unserer Liste
hinzufügen, damit
wir eine For-Schleife für machen können, nennen
wir es einfach Name
für Name in Namen. Füge Beiträge mit Unterstrichen hinzu. Und wir werden
diesen Zeichenkettennamen weitergeben. Und sie sollten, sie
sollten sich darum kümmern. Aufgrund der Beliebtheit
bei Einzahlungen benötigen wir diesen
Testcode
nicht mehr. Und wir können einfach, ich füge einen Kommentar hinzu, es bevölkert Posen
nennen. Wann kannst du einfach
unsere Reload-Funktion aufrufen ,
reload, post das. Nachdem alles
geschaffen wurde. Da hast du es. Lass es uns testen. Und da hast du es. Dies
sind die Richtlinien, die wir zuvor bei unseren Tests hatten. Nun, wenn Sie möchten, dass
sie in alphabetischer Reihenfolge angezeigt werden. Es gibt eine weitere
Funktion namens sorted. Oder du könntest auch
Posennamen sagen, nach Punkten sortieren. Der Unterschied
ist, dass Dot Sword Ihre Liste an Ort und Stelle sortiert. Und die sortierte Funktion gibt
Ihnen eine
völlig neue Liste. Also lass uns diesen benutzen. Sortierte diese Namen. Ich nenne
diese sortierte Liste. Eigentlich sortierte
Posen bestimmte Namen, ich nenne
sie bestimmte Namen. Jetzt wollen wir die
sortierten Namen wiederholen. Jetzt sollten sie in
alphabetischer Reihenfolge sein. Bezieht sich auf den Code. Oh, eigentlich sehen wir diesen weiteren Test, weil ich ihn hier versehentlich
hinzufüge. Das sollte also nicht da drin sein. Aber jetzt, wenn ich den Code aktualisiere, sollten
wir keinen
weiteren Test sehen ,
da es einen Unfall gegeben hat. Aber wir sollten die
anderen Richtlinien, die
aus den Akten stammen, in
alphabetischer Reihenfolge sehen . Jetzt siehst du, dass die erste
Pose mit meinem Tippfehler zuerst
kommt und dann der
Test danach kommt. Jetzt füllen wir die Benutzeroberfläche. Bevor wir weitermachen,
den Docstring, sammeln Sie Posen aus Dateien und
füllen Sie sie auf, listen Sie sie auf. Wir geben nichts zurück. Ich kann das also einfach als einzelnes Licht
belassen. Da hast du es. Als Nächstes
müssen wir
die Auswahl vom
Benutzer einholen , damit
wir diese Pose
auf den Charakter anwenden können. gibt es ein Argument
namens select In der Scrollliste gibt es ein Argument
namens select
item , das Sie
beim Abfragen, Bearbeiten
oder Erstellen verwenden können . Das bedeutet also, dass wir dieses Argument direkt aus
dieser Liste abfragen
können . Also werde ich hier unten eine
neue Funktion erstellen und sie
get selected pose nennen. Anstatt die Liste zu
bearbeiten, wollen
wir jetzt immer noch auf dieselbe Liste
abzielen, aber jetzt wollen wir etwas
abfragen. Und das, was wir
abfragen wollen, wird entfernt. Also wenn du etwas
abfragst, wolltest
du meinem Vater einfach sagen ja, du willst abfragen
entfernen, tut mir leid, nicht entfernen schreiben ausgewählten Artikel. Wir können dies verwenden, um dynamisch
oder programmgesteuert
etwas auszuwählen . Aber in diesem Fall werden
wir die Auswahl abfragen. Wir werden also abfragen, ob
ausgewähltes Objekt gleich wahr ist, um
einfach Ja zu sagen,
bitte Artikel auswählen. Lassen Sie uns das also in einer
Variablen namens Auswahl zeichnen. Lassen Sie uns nun einfach diese Variable
zurückgeben. Schauen wir uns an, was
wir daraus machen. Lassen Sie uns den Code zusammenfassen. Okay, im Moment ist
nichts ausgewählt. Wenn wir dich drucken, werde ich nicht ausgewählt, posiere. Oh, tut mir leid, ich muss diese Funktion
aufrufen. Wir werden uns keine holen.
Das ist also gut zu wissen. Nichts ist ausgewählt.
Wir kommen zu keinem. Wenn etwas ausgewählt ist, erhalten
wir eine Liste mit
der Auswahl. Und weil wir nur eine einzelne Auswahl
zulassen, erhalten wir immer nur
eine Liste mit einem einzigen Element. Das ist also gut zu wissen. Lassen Sie mich das in Docstring hinzufügen. Wir sagen,
gibt entweder eine Zeichenfolge zurück oder lass mich sie konsistent
halten
und daraus eine Zeichenfolge machen. Gibt immer eine Zeichenfolge zurück, holt das ausgewählte Element aus der Liste ab. Und wir könnten es so machen
, dass wir, wenn wir eine None bekommen, eine leere Zeichenfolge zurückgeben. Das noch einmal darüber nachzudenken, das könnte bedeuten,
könnte irreführend sein. Also lasst es uns tatsächlich so machen
, dass wir zurückkehren können. Schon wieder. Es tut mir leid, ich
ändere meine Meinung an Ort und Stelle oder in keiner. Wir werden, wir werden es tun, wir werden eine kleine
Beschreibung hinzufügen, in der es heißt „nein“, wenn nichts
ausgewählt wurde, andernfalls „Gegenname“
, „
ausgewählt“, „Posenname“. Großartig. Also Auswahl. Wenn die Auswahl keine ist. Wir haben die Rückkehr gesehen: Keine. Noch einmal, wenn wir einfach zurückkehren, wird
Python sowieso ein Non zurückgeben. Aber ich mache es in
diesem Fall explizit , weil wir das zurückgeben
wollen. Andernfalls, wenn wir
diese if-Anweisung nicht eingegeben haben und die Funktion
nicht verlassen haben. Wir möchten den einzigen
Artikel in unserer Auswahl zurückgeben, oder? Ich werde also sagen, dass das ausgewählte
Element eine Auswahl sein wird, und es wird das
einzige
Element in dieser Auswahl sein. gebe
ich zurück. Hervorragend. Jetzt lass es uns, lass es uns testen. Lassen Sie mich den Code neu laden und
erneut ausführen. Großartig. Also, wenn ich die
Auswahl jetzt ausdrucke, ist es ein Nein. Wenn
ich etwas
auswähle, das ich gedruckt habe , erhalte ich den Namen der ausgewählten
Pose. Toll,
genau das wollen wir. Jetzt, wo wir wissen, wie
wir eine Auswahl treffen, können
wir mit der Bewerbung der Stellen beginnen. Weil wir den Beitrag aus
dem ausgewählten Element in der Liste abrufen können . Also werde ich hier
eine neue Funktion namens ausgewählten Schlauch
anwenden erstellen . Eigentlich werde ich es
über dieser Funktion erstellen , die ich verwende. Um die Auswahl zu bekommen. Großartig. Das erste, was wir
brauchen, ist die ausgewählte Pose. Und das bekommen wir aus der
Funktion, die wir gerade erstellt haben. Wählen Sie beide aus. Da
dies die Funktion ist , die die Posen anwendet wenn Sie ein
paar Häkchen hinzufügen. Wenn also nichts ausgewählt wurde, können
Sie sagen, ob keine ausgewählte Pose ausgewählt oder ob die ausgewählte Pose keine ist. Eine der
beiden
Posen ist gültig, wenn ausgewählte Pose bekannt ist
oder wenn keine ausgewählte Pose ausgewählt wurde. Lassen Sie uns den Benutzer warnen. Nehmen wir an, wir nehmen den Morgen an. Bitte wählen Sie einen Impuls und beenden Sie die
Funktion einfach, indem Sie zurückkehren. Das nächste, was wir tun müssen, da wir Posen anwenden,
um den Charakter auszuwählen, ist sicherzustellen, dass der Benutzer etwas
ausgewählt hat, einen Charakter
ausgewählt hat. Wir können also einen oder mehrere
ausgewählte Namespaces sagen oder mehrere
ausgewählte Namespaces da es sich um
mehrere Gleichheit handeln kann. Und hier haben wir angefangen den Code aus
unserem vorherigen Projekt zu
verwenden. Wenn Sie sich erinnern,
verfügt unser
Posttransfer-Modul über eine gute
Funktion zur Auswahl von Namespaces, die wir verwenden können. In diesem Fall werde ich die Übertragung nach dem Unterstrich
importieren. Nach der Übertragung kann
ich jetzt die Funktion „Ausgewählte
Namespaces abrufen“ abrufen. Auch hier wissen wir, dass
wir mit dieser Funktion eine leere
Liste erhalten,
wenn nichts ausgewählt wurde . Ich kann also sagen, wenn nicht,
wählen Sie die Namespaces aus, wir werfen einen weiteren
hinein, geben eine weitere Warnung
an den Benutzer und sagen, Bitte wählen Sie mindestens einen Rake und wir beenden die Funktion. Der nächste Schritt besteht darin,
die gewünschte Pose zu erhalten, was bedeutet, dass wir die Datei benötigen die dem von uns ausgewählten
Beitrag
entspricht. Dazu benötigen wir
die Poster, die
bereits gespeichert wurden. Gespeicherte Posen. Wir wissen, dass wir das
aus einer Funktion herausholen können , die
wir bereits verwenden, um unsere Benutzeroberfläche zu füllen, die sich
im Kernmodul befindet. Holen Sie sich das Diktat der Posen. Da wir nun dasselbe Wörterbuch verwenden
, um unsere Liste zu füllen, wissen
wir, dass die
Auswahl aus dieser Liste einem
der Schlüssel im Wörterbuch entsprechen
sollte. Es besteht jedoch die Möglichkeit, dass diese ,
während wir mit einem Tool arbeiten Datei gelöscht wurde In diesem Fall können wir sie nicht
abrufen. Deshalb sollten wir dafür einen
Schnellcheck hinzufügen. Wir können sagen, wenn die ausgewählte
Pose nicht in gespeicherten Posen enthalten ist, sagen
wir im Grunde, dass,
wenn diese Pose nicht in
der Tonart im Wörterbuch steht, wir sie entweder
direkt so machen können oder wir können direkt Punkttasten oder Chicken
the Keys List sagen. Was ich einfach so
lassen werde. Also, wenn die gewählte
Pose nicht im Wörterbuch der gespeicherten Posen steht , was bedeutet, dass es kein
Schlüssel im Wörterbuch ist, dann haben wir nichts
, was wir anwenden könnten, oder? Also können wir dem Benutzer
eine weitere Warnung geben, die diese Pose sagt. Jetzt füge ich den Namen
der Pose hinzu. In Anführungszeichen. Ich füge doppelte
Anführungszeichen geschweifte Klammern als Platzhalter hinzu. Nehmen wir an, es existiert nicht. Dann
sage ich Punktformat. Und dann zeige dem Benutzer die
Pose, die ausgewählt wurde. Und dann nach der Warnung
beenden Sie die Funktion, indem Sie zurückkehren. Und schließlich, als wir bestanden
haben, haben wir alle Schecks durchlaufen und alles
scheint in Ordnung zu sein. Wir haben eine Auswahl
auf der Liste der Posen. Wir haben in der Szene eine Auswahl für einen oder mehrere Charaktere. Wir wissen, dass die Beiträge existieren. Jetzt können wir die
Datei aus dieser Pose abrufen. Die Posendatei entspricht
wieder den gespeicherten Posen. Ich werde
das umbenennen, um es zu speichern, als Diktat zu posten, um es für Sie
expliziter zu machen. Wenn wir beide aufgeklebt
haben, können wir
jetzt, da wir wissen, dass diese
Schlüssel im Wörterbuch stehen, den Wert daraus ziehen, wiederum der Dateipfad
sein wird. Diese gewählte Pose
ist also der Schlüssel in diesem Wörterbuch. Es wird die Datei geben. Dann müssen wir die
Informationen aus dieser Datei abrufen. Das wäre die Pose, die wir auf unsere Charaktere anwenden
wollen. zu tun, haben
wir die
Funktionalität bereits im Kern. Wir nannten es Read posts
from file, read from file. Und das benötigt einen Dateipfad,
dessen Pose ist, obwohl er variabel ist. Hervorragend. Jetzt müssen wir nur noch
einmal die
Funktionalität nach
der Transplantation wiederverwenden und sie auf alle von uns ausgewählten
Namespaces
anwenden. Und das werden beworbene Stellen sein. Wir nehmen ein
Post-Wörterbuch und einen Namespace auf. Da wir mehrere Namespaces zulassen
, können
wir diese Liste einfach
durchgehen. Für Namespaces in ausgewählten
Namespaces verwendet post underscore,
transfer dot apply
pose also das entgegengesetzte Wörterbuch
und den Namespace um ihn auf ihr Ego anzuwenden. Und bevor wir es testen, lass mich meinen Docstring machen. Und sagen wir, wenden Sie ausgewählte
Richtlinien an, um es auszuwählen. Und wir
geben nichts zurück. Das kann also ein
einzeiliger Docstring sein. Wir haben
es also nicht mit einer Taste verbunden, aber wir können es testen,
ohne die Verbindung zu haben.
Lass uns nach Maya gehen. Lassen Sie uns die Benutzeroberfläche neu laden. Da hast du es. Es heißt Ausgewählte Pose anwenden. Wir können das also tun, wir können sagen, dass UI
Punkt die ausgewählte Pose anwendet. Lass uns ein paar Tests machen. Wir müssen eine Pause wählen. Es ergibt Sinn. Wir müssen mindestens ein
Zeichen auswählen , das Sinn macht. Wenn wir nun den Charakter auswählen, wir betreten,
sollte dieser Beitrag übernommen werden. Jetzt. Das ist wahrscheinlich dieselbe Pose,
die wir gespeichert haben. Lass uns diesen
Charakter ein wenig ändern. Und lassen Sie uns
das anwenden. Da hast du es. Die erste, diese erste Pose, die
gespeichert wurde, war für den Hut, was bedeutet, dass er nur den Controller
bewegt. Aber da hast du es. Jetzt, wo wir
diese Funktion haben, können
wir damit beginnen, sie mit
der Notstelltaste zu verbinden der Notstelltaste , die im Moment nichts
tut. Gehen wir zurück zu PyCharm und
wir können den Bogen-Button anwenden. Wir können einfach sagen, dass Command
Equals ausgewählte Beiträge anwenden. Denken Sie jetzt daran, dass wir die Funktion selbst übergeben
. Wir wollen es nicht
aufrufen, weil
wir dann das Befehlsargument,
das Ergebnis dieser Funktion, angeben würden . Und das wollen wir nicht. Wir wollen ihm
die Funktion geben
, damit er die
Funktion selbst aufrufen kann. Wenn wir jetzt
unseren Code neu laden und auf die
Schaltfläche klicken, tritt ein Fehler auf. Nimmt Argumente mit
einem angegebenen Argument entgegen. Wenn Sie sich
an
den Button erinnern, den wir mit unserem vorherigen Tool verbunden haben, an den ausgewählten Button Transfer, mussten
wir ein
zusätzliches zufälliges Argument berücksichtigen. Dann wird uns mein N gegeben. Und wir verwenden dieses
Star-Args-Argument, eine Art Sammelbegriff für die von mir übergebenen
Argumente. Also können wir das einfach noch einmal machen. Die
Funktionalität des Tools wird dadurch nicht geändert. Es wird uns einfach helfen, das zu lösen,
was Maya uns gibt. Vorräte. Ich würde gerne posieren, wir benutzen es
nicht einmal. Wir benutzen es nur
als Netz, um dieses zusätzliche
Argument abzufangen. Nun, wenn ich diesen Controller verschiebe
und diesen Beitrag erneut anwende. Das funktioniert jetzt. Und natürlich
können wir diese Pose auf
mehrere Charaktere anwenden ,
solange sie einen Hut haben. In diesem Fall. Da haben wir es. Der letzte verbleibende Teil
unseres Tools ist die
Möglichkeit, Posen zu speichern. Und der erste Schritt dabei besteht darin , die Eingabe
des Benutzers zu erhalten , um
den Namen der Pose auszuwählen , die
wir speichern werden. Um das zu tun, werden
wir das Textfeld verwenden. Und wenn Sie
vermuten, dass wir ihm einen eindeutigen Namen geben
müssen ,
wie wir es mit dem Fenster getan haben. Wir haben es mit den gescrollten Listen gemacht. Du hast genau recht. Lassen Sie mich also weitermachen und
eine neue globale Variable erstellen. Nennen wir es Textfeld. Name entspricht Pose. Nennen wir es
diese Textfelder speichern. Nun, der tatsächliche Name spielt keine Rolle, solange
er einzigartig genug ist. Großartig. Wenn wir also
unser Textfeld erstellen, müssen
wir diesen Namen angeben
, wiederum als erstes Argument
in dieser Textfeldfunktion. Und um den Text, der
darin eingegeben wird,
in dieses Feld
bekommen zu können . Es gibt ein Argument. Wir gehen in die Dokumentation. Während des TextField gibt
es ein Argument namens Text. Sollte hier sein. Da hast du es, eine SMS. Wir können es also verwenden, wenn
wir ein Textfeld erstellen, das
also vorab ausgefüllt ist. Wir können es
bearbeiten, den Text im Textfeld oder wir können eine Anfrage stellen. Also werden wir diesen Text
beweisen. Lassen Sie uns fortfahren und
eine neue Funktion namens Pose speichern erstellen . Wir können alles innerhalb
derselben Funktion machen. Und da wir das wissen,
werden wir das mit der Safe-Pause-Taste verbinden . Fügen wir hinzu, dass Sternargumente eine
Art Sammelbegriff für das Argument wir wissen
, dass uns meins gegeben
wird. Um also den Namen
der Pose vom,
vom Benutzer zu bekommen , rufen wir sie auf. Nennen wir diese
Variable postname. Das tut mir leid. Vorname ist gleich. Beschäftigen wir uns mit der
TextField-Funktion. Auch hier werden
wir auf genau dasselbe
Textfeld abzielen ,
das wir erstellt haben. Wir werden
Informationen daraus abfragen. Wir werden sagen, dass Abfrage gleich wahr ist. Jetzt können Sie entweder q
ist gleich wahr eingeben oder die
Abfrage durchläuft, tut mir leid, eine Abfrage, beide sind gültig. Und jetzt verwenden
Sie bei jeder Abfrage einen booleschen Wert für das Argument, das
Sie abfragen möchten. Wenn Sie sich die
Dokumentation ansehen, Sie nach einer Zeichenfolge gefragt. Aber wenn Sie etwas
abfragen, erneut dieses Argument
,
ignorieren Sie diesen Teil
der Dokumentation und geben Sie einfach einen booleschen Wert ein. also nur als Test Lassen Sie uns also nur als Test den Namen des Beitrags zurückgeben
und sehen, was wir daraus machen. Also werde ich unseren Code neu laden. Und wir können Punkt speichern Pose sagen. Das wissen wir gerade. In der Zwischenzeit gibt es uns
einfach den Namen der Beiträge
oder was auch immer wir eingeben. Dieses Textfeld,
drucksicher, Bose. Da ist nichts drin, was
bedeutet, dass es sich um eine leere Zeichenfolge handelt. Aber wenn ich den
Namen meiner Beiträge eintippe, z. B. werde
ich das bekommen. Das ist also großartig. Wir wissen also, dass
wir eine leere Zeichenfolge erhalten, wenn dort nichts eingegeben
wird . Dafür können wir einen Scheck hinzufügen. Es gibt immer noch Möglichkeiten, dies zu tun. Wir können entweder sagen,
ob der Name gleich gleich einer leeren Zeichenfolge ist,
wir geben eine Warnung aus
oder eine leere Zeichenfolge
kann wie
eine nicht oder wie eine
leere, leere Liste gehandelt werden . Man könnte also sagen, wenn nicht
Beiträge den Namen unterstreichen, wir eine Warnung aus. Und wir werden sagen, bitte
hallo, Gegenname. Wir beenden die
Funktion erneut, indem wir zurückkehren. Deshalb bin ich gerne ein
bisschen expliziter. Also ändere ich das
wieder auf if post name equals,
equals . Eine leere Zeichenfolge bedeutet , dass vom Benutzer nichts
eingegeben wurde. Und dann warfen wir die
Warnung und kehrten zurück. Und ich werde
diese Rückgabe hier entfernen , da sie nur zum
vorübergehenden Testen diente. Der nächste Schritt besteht darin, die
Pose zu finden, von der wir
sagen werden , dass wir die benötigen, überprüfen Sie die Auswahl
in dieser Szene. Wie wir wissen, werden wir also alle ausgewählten Controller
speichern. Und wir beschränken
es auf ein Zeichen. Wir könnten tatsächlich
mehrere Charaktere zulassen und einfach all diese Controller
speichern. Und nehmen wir an, wenn Sie möchten
, ist das Ihre Wahl. In diesen Fällen werde
ich es jedoch auf ein einzelnes Zeichen beschränken. Um das zu tun, können
wir einen Teil
des Codes von hier stehlen. Wir können immer noch Namespaces auswählen
. Lass mich das wirklich alles
stehlen. Das ist ein Scheck. Ich kopiere es hier. Ich klaue übrigens von
ausgewählten Posen. Denn in der angewandten ausgewählten
Pose
suchen wir auch nach der Auswahl von
Namespaces oder Rigs. Also Leerzeichen auswählen.
In diesem Fall möchten
wir nun sicherstellen, dass wir nur ein Rig ausgewählt
haben. Wir können also, wir können tippen, ob len of selected in
Leerzeichen nicht eins ist. Wir können eine Warnung mit der
Aufschrift Auswählen, wählen Sie das eine Rig in der Szene aus. Wir zeigen ihre Warnung
und dann sind wir zurückgekehrt. Danach brauchen wir
einen weiteren Scheck. Denken Sie daran, dass wir
gesagt haben, die Posen einzigartig sein sollen, damit die
Posennamen einzigartig sind. Wenn also schon Gegensätze existieren, können
wir sie nicht überschreiben. Vielleicht willst du, vielleicht
willst du es überschreiben. Das ist völlig in Ordnung.
Aber in diesem Fall werden
wir sagen, dass
wir dem Benutzer
eine Warnung geben , die besagt
, dass dieser Beitrag bereits existiert. Bitte wählen Sie einen anderen Namen. Dafür. Wir werden bekommen. Die Pose ist Wörterbuch. Noch einmal. Aus der ausgewählten Pose stehlen
wir
erneut
dieses Wörterbuch , gespeicherte Posen, Diktat. Und lassen Sie mich hier einige
Kommentare hinzufügen, nur
um den Überblick zu behalten, was
passiert. Hier. Wir überprüfen, überprüfen, validieren oder
entwerten diese Namen. Hier werden wir die gesehene Auswahl
validieren. Auswahl. Und ich lasse
Platz zwischen ihnen, gib ihnen
einfach
etwas Luft, damit es ein
bisschen schöner ist, es zu sehen. Bestätigen Sie hier den eindeutigen Schlauch. Also bekommen wir die Posen aus den Akten. Wir könnten die Posen auch
von der Liste nehmen. Aber sie aus den
Dateien zu beziehen ist zuverlässiger oder zuverlässiger, weil wir sie
wirklich von der Quelle beziehen. Wenn das Tool also
nicht aktualisiert wird, können
wir trotzdem die wahre
Quelle der Poster überprüfen, nämlich das Dateisystem. Wir können also sagen, ob wir schreiben können, tut mir leid, ob der Beitragsname bereits
ein Schlüssel im Wörterbuch ist. Wenn sich also der Posenname in in gespeicherten Pausen
befindet, Diktat gleich Name ist
Impuls angekreuzt. Wir warnen den Benutzer erneut. Wir sagen Pose. Wir werden den Namen
der Posing-Zitate
in geschweifte Klammern setzen , da Platzhalter, wie ich sagen
werde, bereits existieren. Bitte wählen Sie einen anderen Namen. Da haben wir es. Und dann
sage ich das Punktformat und teile dem Benutzer
den Namen der Pose mit,
die er bereitgestellt hat. Name des Beitrags. Wieder
verlassen wir den Raum, indem wir zurückkehren. Jetzt endlich, nachdem wir alle benötigten
Schecks
haben, können
wir unsere Beiträge überdauern. Als Erstes müssen
wir also das Post-Wörterbuch abrufen ,
das eine
andere Pose war , die in der Szene
ausgewählt wurde. Also die Controller
,
die vom Benutzer in Form eines
Wörterbuchs ausgewählt werden. Wieder einmal haben wir diese
Funktionalität aus unserem vorherigen,
vorherigen Projekt
in Post Transfer,
Post Transfer, Get, Pose, Dict. Jetzt
erhält diese Funktion einen einzelnen Namespace. Da wir wissen, dass unsere
ausgewählten Namespaces am wenigsten nur einen Namespace
enthalten sollten. Wir können mit Sicherheit sagen,
oder wir können sagen, das erste Element
dieser Liste mit ausgewählten
Leerzeichen unserer Funktion zur Verfügung stellen . Es wird also einen
einzigen Namespace geben. Und jetzt, wo wir
das Wörterbuch haben, müssen wir es nur noch in unserer Datei
speichern. Und
diese Funktion haben wir auch schon. Das wird also im
Kernpunkt sein, Beiträge in eine Datei zu schreiben. Und diese Funktion erhält den Namen der Beiträge oder den Namen der Datei, die
wir speichern möchten, nämlich den Namen
der Pose und die Werte oder das Wörterbuch
, das wir speichern möchten. Nehmen wir an, Name, Pose, Diktat. Und wir werden
drucken, verwendet einfach keine
Informationen, gespeicherte Pose. Wir sagen, Pose
wurde erfolgreich gespeichert. Lassen Sie
mich diesen Tippfehler noch einmal korrigieren. Auch hier stehen
geschweifte Klammern für Platzhalter, Punktformat und Beitragsname, um den Namen der Beiträge
anzuzeigen. Und schließlich, nachdem wir den Beitrag gespeichert
haben, möchten
wir das Tool neu laden oder
aktualisieren. Wir können also sagen, dass Reload posiert, um die neuesten
Beiträge anzuzeigen, die wir gespeichert haben. Hervorragend. Also lasst uns weitermachen und das in unserer Szene
testen. Oh, nun, bevor wir das tun, können
wir einfach eine Verbindung mit
dem Button herstellen. Wir haben das
schon mehrmals durchgemacht. Befehl entspricht also sicherer Pose. Nochmals,
geben Sie einfach eine Funktion an, rufen
Sie die Funktion nicht auf,
da dies
das Ergebnis für dieses
Befehlsargument liefert. Wir wollen, wir wollen, dass der Button
die Funktion für uns aufruft. Also lass uns herkommen. Und lassen Sie uns diese
Zeile löschen, in der protestiert wurde. Laden wir unseren Code neu. Versuchen wir, Gegensätze zu sparen. Lassen Sie mich eine Änderung
am Arm
dieser Charaktere vornehmen . Da hast du es. Es ist ein bisschen kaputt, aber es wird sehr
offensichtlich sein, wenn wir uns beworben haben. Nennen wir
es tatsächlich einen gebrochenen Arm. Wir brauchen nicht, dass der
Unterstrich hellwach auch ein Leerzeichen ist. Gebrochener Arm, spar dir die Pose. Beides taucht hier auf. Und wir haben hier die Konzentration, die ein
erfolgreich gespeichertes Posting ausmacht. Und das können wir
auf diesen Charakter anwenden. Und da hast du es. Wenn
Sie Ihre
Bestätigung
expliziter formulieren möchten, könnten wir, anstatt einfach eine Nachricht zu
drucken, dem
Benutzer ein kleines Fenster zeigen. In C gibt es
in dieser Bibliothek eine Funktion namens
bestätigter Dialog, in dieser Bibliothek eine Funktion namens die eine Nachricht
aufnimmt Equals eingeben
kann. Und wir können diese
Nachricht hier weitergeben. Da hast du es. Bestätigen Sie den Dialog. Wir haben diese Nachricht. Wir können unseren Code neu laden. Wir können einen neuen Beitrag speichern, neue Bose-Posts, die er gespeichert hat. Wir erhalten diesen
Bestätigungsdialog für den Benutzer. Es liegt also an Ihnen, ob Sie
den Dialog oder einfach die Erklärung
ausdrucken möchten . Und wir sind fertig, Sie haben jetzt ein funktionierendes
Post-Bibliothekstool, das verwendet
werden kann, um
Posen zu speichern und anzuwenden . Ich
nehme an,
dass sie ungleichmäßig sind kann mit anderen
Leuten geteilt werden, Ihren Freunden . Es
kann mit anderen
Leuten geteilt werden, Ihren Freunden,
Kollegen, jedem, der Maya verwendet. Herzlichen Glückwunsch, das war das größte Projekt
des Kurses. Bevor wir gehen, wollte
ich noch
etwas über Module erwähnen. Bisher haben wir in diesen Dokumenten gearbeitet , dem
Ordner
Maya Scripts. Und das liegt daran, dass wir wissen, dass Maya von dort Code bekommen kann. Lassen Sie mich jetzt zu diesem Ort gehen. Es ist hier. Unser Code ist alles hier. Gibt es andere Orte
, an denen ich
Code bekommen kann ? Der andere. Die beliebte Version ist in
der Maya-Version enthalten. Es gibt einen weiteren Skriptordner. Das ist also nur für
meinen Durchschnitt im Jahr 2020. Und der, mit dem wir
zusammenarbeiten
, ist für
all meine Abweichungen etwas globaler. Aber jetzt stellt sich die Frage, woher wir genau wissen, woher
ich den Code habe? Das? Es gibt ein anderes Modul oder eine
Bibliothek namens Sits ASIS. Asis, das steht für System. Da ist eine Liste mit dem
Namen Path. Wenn ich also sys.path drucke, erhalte
ich eine Liste der Pfade, aus denen Python und Maya Code abrufen
können. Da es sich um eine Liste handelt, lassen Sie mich sie noch einmal durchgehen. Für mich ist es ein Weg. Hi, da hast du es. Das sind alle Teile.
Es gibt viele von ihnen. Wenn Sie Plugins installiert haben.
Lassen Sie mich das noch einmal ausführen. Wenn Sie irgendwelche
Plugins installiert haben, hier
einige der Pfade für diese
Plug-ins. Und es gibt auch
die , die wir
hier unten verwenden. 2020-Skripte für
die Migration verwenden also Maya-Skripte, in denen wir gerade unseren Code
haben. Das ist also, Sie können
Ihren Code hier überall eingeben. Wenn Sie jedoch
einen anderen Ort hinzufügen möchten, da dies eine Liste ist, können
Sie
diesen Pfad einfach hinzufügen, den Sie anhängen können. Stellen wir uns also vor, wir haben
einen benutzerdefinierten, benutzerdefinierten Ordner darin. Nehmen wir an, du
arbeitest in einem Studio oder arbeitest
mit deinen Freunden an einem Projekt und
möchtest deinen Code
und deine Dropbox oder an
einem gemeinsamen Ort haben einem gemeinsamen Ort an dem jeder
auf den Code zugreifen kann. Ich habe als Beispiel einen
Ordner erstellt. Lassen Sie uns jetzt anfangen. Stellen wir uns vor, dass
dies ein Ordner ist, viele Personen in Ihrem Netzwerk zugreifen
können. Kannst du, willst du deinen Code hier
haben? Verschieben wir also unseren Code oder kopieren
wir unseren Code vom der Maya-Skripte Speicherort
der Maya-Skripte des Dokuments in diesen anderen Ordner. In die Postbibliothek wurde übertragen. Lassen Sie uns einfach die nette
Postbibliothek und den Posttransfer verwenden. Ich kopiere
das hier rein. So wie es im Moment ist, hat
Meier keine Ahnung von
diesem Standort, oder? Was wir tun können, ist diese Liste einfach
zu ändern. Lassen Sie mich das in einer
Variablen namens path zeichnen. Und ich werde das R
an den Anfang setzen, nur für den
Fall , dass wir überprüfen können,
ob der Pfad bereits existiert. Also ob oder wenn es tatsächlich nicht
existiert, wenn kein Pfad, nicht in Reihe, Punktpfad, wir haben einfach zu diesem Pfad hinzugefügt, sagt Punkt Pfad, Punkt anhängen. Da hast du es. Als Beispiel möchte
ich Sie nicht verwirren, da wir
die Module bereits aus dem
Skriptverzeichnis geladen die Module bereits aus dem
Skriptverzeichnis haben. Lassen Sie mich also ein
ganz neues Modul
namens Hello path erstellen , z. B. und wir werden das nennen. Wir werden die
Dot-TXT-Erweiterung in Punkt p-y umbenennen. Hervorragend. Und
ich werde das einfach mit
Notepad öffnen, um es schnell zu bearbeiten. Da hast du es. Ich werde eine einfache Funktion namens Hello hinzufügen. Hallo, oder besonders
zusätzlich, und wir werden einfach den benutzerdefinierten
Hello-Pfad drucken. Großartig. Wenn ich jetzt versuche, den Hello-Pfad zu
importieren, gehe
ich zu einer
neuen Python-Konsole. Wenn ich hallo importiere. Natürlich
wissen meine anderen davon. Es wird sagen, dass es kein
Modul mit dem Namen Hello Path gibt. Aber wenn ich meinen hinzufüge, meinen benutzerdefinierten Pfad, der
Punktpfad lautet. Und noch einmal, wenn
ich es übergehe, für mich in Notepad
gedruckt wurde, werde
ich sehen, dass unser
Pfad am Ende ist. Also Kurzcode, großartig. Jetzt, wo es sich im Python-Pfad befindet, kann
ich den Hello-Pfad importieren. Wenn ich den
Pfad hallo,
hello underscore ausdrucke , können Sie sehen dass es sich um ein Modul handelt, das
von diesem gemeinsam genutzten Standort stammt. Und jetzt können wir die Funktion verwenden , die ich geschrieben habe und die
einfach Hallo heißt. Und es druckt
unsere benutzerdefinierte Zeichenfolge. Da hast du es also. Ich wollte
das extra erwähnen,
denn wenn Sie
mit anderen Leuten zusammenarbeiten und Ihren Code teilen
möchten. Das wird der
einfachste Weg sein, das zu tun. Sie könnten
Ihren gesamten Postbibliothekscode eingeben. Wieder an einem gemeinsamen Ort. Verwenden Sie einfach ein Shelf-Skript , das Ihren benutzerdefinierten
Pfad zur Maya-Sitzung hinzufügt. Das musst du übrigens für jede
Minute machen. Und dann haben Sie Code, der mit
mehreren Personen geteilt
wird.