Einführung in die Python-Programmierung für Maya-Animatoren | Anim TD | Skillshare

Playback-Geschwindigkeit


1.0x


  • 0.5x
  • 0.75x
  • 1x (normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Einführung in die Python-Programmierung für Maya-Animatoren

teacher avatar Anim TD, Technical Education for VFX & Animation

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Schau dir diesen Kurs und Tausende anderer Kurse an

Erhalte unbegrenzten Zugang zu allen Kursen
Lerne von Branchenführern, Ikonen und erfahrenen Experten
Wähle aus einer Vielzahl von Themen, wie Illustration, Design, Fotografie, Animation und mehr

Einheiten dieses Kurses

    • 1.

      Einführung

      0:44

    • 2.

      Skript-Editor Übersicht

      7:47

    • 3.

      Dein erstes Python-Programm: Hallo Maya

      11:28

    • 4.

      Intro in die cmds-Bibliothek und Importe

      6:56

    • 5.

      Projekt 1 - Requisiten-Rigging-Tool: Intro

      1:02

    • 6.

      Werkzeugzusammenstellung

      3:47

    • 7.

      Das Tool erstellen

      7:25

    • 8.

      Die Steuerung ändern

      11:38

    • 9.

      Deep Dive – Hilfe und Dokumentation

      9:03

    • 10.

      Mit Knotennamen und Listen arbeiten

      9:54

    • 11.

      Das Tool mit „if“-Anweisungen erweitern

      18:49

    • 12.

      Deep Dive - "if"-Anweisungen und Booleane

      8:46

    • 13.

      Einführung in Funktionen

      29:00

    • 14.

      Code in eine Funktion verwandeln

      14:23

    • 15.

      PyCharm - Installieren und Setup

      10:15

    • 16.

      Ein Modul erstellen

      10:11

    • 17.

      Deep Dive - Funktionen

      31:51

    • 18.

      Projekt 2 - Posenübertragungstool: Intro und Breakdown

      11:17

    • 19.

      Namensräume und Listen

      6:12

    • 20.

      Auswahl und „für“-Loops

      10:12

    • 21.

      "for" Loops Übersicht

      3:09

    • 22.

      Attribute erhalten

      20:03

    • 23.

      Die Pose speichern - Einführung in Wörterbücher

      10:19

    • 24.

      Die Pse speichern – das Posenwörterbuch aufbauen

      23:07

    • 25.

      Die Pose anwenden

      33:14

    • 26.

      Die Hauptfunktion des „Transfers“ aufbauen

      22:50

    • 27.

      Intro zu UIs

      21:06

    • 28.

      Die UI erstellen

      11:59

    • 29.

      Projektrückblick

      1:40

    • 30.

      Deep Dive - Saiten

      23:43

    • 31.

      Deep Dive - Loops

      15:05

    • 32.

      Deep Dive - Listen, Tupel, Sets

      32:23

    • 33.

      Deep Dive - Wörterbücher

      23:33

    • 34.

      Abschlussprojekt - Pose Library: Intro

      1:54

    • 35.

      Das Python-Paket erstellen

      5:16

    • 36.

      Mit Dateien arbeiten

      10:51

    • 37.

      Posen in JSON-Dateien speichern

      9:38

    • 38.

      Posen aus JSON-Dateien lesen

      13:57

    • 39.

      Die UI erstellen

      30:07

    • 40.

      Die Funktionalität verbinden und deine Tools teilen

      45:00

  • --
  • Anfänger-Niveau
  • Fortgeschrittenes Niveau
  • Fortgeschrittenes Niveau
  • Jedes Niveau

Von der Community generiert

Das Niveau wird anhand der mehrheitlichen Meinung der Teilnehmer:innen bestimmt, die diesen Kurs bewertet haben. Bis das Feedback von mindestens 5 Teilnehmer:innen eingegangen ist, wird die Empfehlung der Kursleiter:innen angezeigt.

157

Teilnehmer:innen

3

Projekte

Über diesen Kurs

Willkommen zu dieser Einführung in Python-Programmierung für Maya-Animatoren!

Lerne, wie du deine eigenen Tools entwickelst, langweilige und langweilige Teile deines Workflows automatisierst und dir und deinem Team helfen kannst, viel effizienter zu arbeiten.

Wie der Titel schon sagt, ist der Kurs vor allem aufgrund der Art der Projekte besser für Animatoren sowie Layout- und Rigging-Künstler geeignet. Jeder, der in Maya arbeitet, könnte von den Vorträgen profitieren, wenn er die Python-Programmierung lernen möchte.

Egal, ob du nur deine tägliche Arbeit verbessern möchtest oder ob du erwägst, zu einer technischen Rolle zu wechseln, ich bin sicher, dass dieser Kurs dich deinem Ziel einen Schritt näher bringen wird!

Was wird behandelt?

  • Grundlegende Programmierkonzepte in Python: Schleifen, if-Anweisungen, Funktionen, Listen, Wörterbücher usw.
  • Grundlegende Techniken und Best Practices: Auch wenn es sich um einen Anfängerkurs handelt, wirst du einige Best Practices lernen, die professionelle TDs und Entwickler verwenden.
  • Maya-cmds-Bibliothek: Die Fähigkeiten, die du erwerben wirst, sind breite Programmierkenntnisse, aber die Projekte verwenden die cmds-Bibliothek häufig, da die Tools, die erstellt werden, für Maya bestimmt sind.
  • Produktionswerkzeuge: Du wirst den Kurs mit tatsächlichen Tools abschließen, die du für deine Arbeit verwenden kannst.
  • UIs: Du wirst lernen, wie du UIs mit den integrierten Bibliotheken in Maya erstellen kannst.

Was wird NICHT behandelt?

  • Python-Kurse: Kurse sind ein wesentlicher Bestandteil von Python und sie könnten in Zukunft enthalten sein. Du kannst jedoch einige sehr leistungsstarke Tools und Skripte ohne sie erstellen, weshalb sie in diesem Kurs nicht unterrichtet werden. Wenn du die in diesem Kurs behandelten Konzepte gelernt hast, wirst du den Unterricht leicht verstehen.
  • PyQt: Qt erfordert ein gutes Verständnis von Kursen, und es ist ein fortgeschritteneres UI-Framework, das sich sogar lohnt, in einem separaten Kurs zu sein. In diesem Einführungskurs liegt der Schwerpunkt auf den UI-Funktionen der cmds-Bibliothek, die für jemanden, der gerade erst mit dem Lernen begonnen hat, immer noch sehr nützlich und einfacher zu beherrschen sind.

Für wen ist dieser Kurs gedacht?

  • Maya-Künstler: Dieser Kurs wird dir NICHT beibringen, wie du Maya verwendest. Du wirst vielleicht einige neue Maya-Tricks lernen, aber es wird angenommen, dass du einige Grundkenntnisse über Maya hast (obwohl du überhaupt nicht erfahren musst).
  • Vollständige Anfänger oder Leute mit einigen Grundkenntnissen in Python.
  • Programmierer, die sich mit Python für Maya vertraut machen möchten. Die Inhalte sind auf Anfänger ausgerichtet, aber die Projekte könnten jemandem helfen, sich mit Maya und seinen Bibliotheken vertraut zu machen.

Für wen ist dieser Kurs NICHT geeignet?

  • Fortgeschrittene Programmierer: Wenn du bereits ein gutes Verständnis für Konzepte wie Funktionen, grundlegende Datenstrukturen, Veränderbarkeit, für Schleifen usw. hast, könnte dir ein Kurs für Fortgeschrittene helfen.

Der beste Weg, um den Kurs zu erkunden:

  • Verfolge die Projekte in der Reihenfolge: Die Projekte sind darauf ausgelegt, neue Konzepte auf natürliche Weise einzuführen, da sie benötigt werden, von den einfachsten bis hin zu komplexeren, und jedes Projekt wird vorherige Kenntnisse wiederverwenden.
  • Tiefe Tauchgänge: Die tiefen Tauchgänge geben dir eine Pause vom Projekt, um tiefer in ein bestimmtes Thema einzutauchen. Sie werden nach der Einführung eines Konzepts platziert. Du solltest sie sofort ansehen, nachdem du das Konzept gelernt hast, aber du kannst sie auch als Referenzbibliothek behandeln, auf die du in der Zukunft zurückgreifen kannst.
  • Quellcode: Halte Ausschau nach den Ressourcen in jeder Lektion. Du wirst in der Lage sein, die Dateien mit dem Quellcode für einen Teil des Projekts herunterzuladen.
  • Video-Zeitstempel: Leider bietet diese Plattform keine Zeitstempel für Videos, aber du kannst Textdateien (in Ressourcen) mit Zeitcodes für wichtige Punkte in der Vorlesung herunterladen.
  • Quizze und Übungen: Nach einigen Vorlesungen wirst du Quiz und Programmierübungen finden. Diese sind optional, aber eine großartige Möglichkeit, zu üben.

Häufig gestellte Fragen

  • Kann ich mit diesem Kurs ein TD werden?
    • Dies ist ein Anfängerkurs, der vielleicht nicht ausreicht, um einen Job als professioneller TD zu bekommen, aber er wird dir definitiv eine starke Grundlage geben, um weiter zu lernen, was du brauchst.
  • Wird dies meiner Karriere helfen?
    • Das könnte es, aber es hängt von deinen Zielen ab. Es wird dich definitiv zu einem Vorteil machen, als jemand, der sowohl künstlerische als auch technische Fähigkeiten besitzt. Wenn du eine technische Karriere anstrebst, wird dir dies eine gute Grundlage geben, um diesen Weg fortzusetzen, was zu einer sehr lohnenden, stabilen und gut bezahlten Karriere führen kann.
  • Kann ich diesen Kurs auf mein LinkedIn aufnehmen?
    • Dies ist (noch) keine Zertifizierung, aber es könnte dir definitiv helfen, zu erwähnen, dass du diesen Python-Kurs absolviert hast.
  • Was ist, wenn ich ein Student bin und Animation oder Maya nicht sehr gut beherrsche?
    • Das ist in Ordnung, du musst kein Profi sein, nicht ein fortgeschrittener Benutzer. Wenn du die Grundlagen kennst, wie z. B. das Navigieren im Ansichtsfenster und das Erstellen eines Cubes, kannst du gleich loslegen. Es gibt vielleicht Dinge, die du nicht kennst, wie z. B. Rig-Referenzen, aber du kannst sie einfach in einem kostenlosen Online-Tutorial lernen.
  • Kann ich eine ältere Maya-Version verwenden?
    • Du kannst, die meisten der behandelten Maya-Befehle funktionieren, aber es gibt keine Garantie, dass alle sie es werden. Wenn das der Fall ist, kannst du den Q&A-Abschnitt (oder eine schnelle Google-Suche) verwenden, um Hilfe zu erhalten.
  • Ist dies nur für Animatoren?
    • Nicht unbedingt. Die Projekte haben einen Bezug zu Animation, was mit jemandem, der mit Animation, Layout oder Rigging arbeitet, viel besser vertraut sein wird, als mit jemandem, der sich beispielsweise auf Beleuchtung konzentriert. Die tatsächlichen Programmierkonzepte sind jedoch für alle Abteilungen anwendbar.

Triff deine:n Kursleiter:in

Teacher Profile Image

Anim TD

Technical Education for VFX & Animation

Kursleiter:in

Hi! I'm Fernando, a technical director with a passion for helping artists work better and more efficiently.

 

As a TD I've worked on films and tv shows such as Once Upon a Time, Arrow, The Lego Movie 2, Peter Rabbit 2, DC League of Super-Pets and more.

 

Before becoming a TD I was a 3D animator, I loved animation but I also fell in love with the power of programming which launched me into the long and tedious process of figuring out how to create things with Python as an artist. That, along with the many times I was asked by other animators "how do I learn coding?", is why I decided to create this course.

 

I've been through that challenging learning journey, now I'm here to help you with it!

<... Vollständiges Profil ansehen

Level: Beginner

Kursbewertung

Erwartungen erfüllt?
    Voll und ganz!
  • 0%
  • Ja
  • 0%
  • Teils teils
  • 0%
  • Eher nicht
  • 0%

Warum lohnt sich eine Mitgliedschaft bei Skillshare?

Nimm an prämierten Skillshare Original-Kursen teil

Jeder Kurs setzt sich aus kurzen Einheiten und praktischen Übungsprojekten zusammen

Mit deiner Mitgliedschaft unterstützt du die Kursleiter:innen auf Skillshare

Lerne von überall aus

Ob auf dem Weg zur Arbeit, zur Uni oder im Flieger - streame oder lade Kurse herunter mit der Skillshare-App und lerne, wo auch immer du möchtest.

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.