Problem python i cmd

0

Cześć mam pytanie dotyczące Pythona. Używam teraz takiego programu pymol, w którym używa się też niestety Pythona 2. Żeby pisać w nim skrypty używa się w nim cmd https://pymolwiki.org/index.php/Simple_Scripting

I mamy tam napisane coś takiego:
To write them:

Write the function, let's call it doSimpleThing, in a Python file, let's call the file pyProgram.py.
Add the following command to the end of the pyProgram.py file

cmd.extend("doSimpleThing", doSimpleThing)

Czyli muszę używać tylko programowania funkcyjnego i wszystko muszę kłaść do funkcji? I dlaczego dwa razy piszę doSimpleThing, raz z apostrofem, a raz bez?

Znalazłem taki skrypt do kopiowania cząsteczki:

s = range(6)
for x in s:
	cmd.copy("dopc%s" %x, "dopc")

Moglibyście mi pomóc zinterpretować linijkę "cmd.copy("dopc%s" %x, "dopc")" nie rozumiem tego np. dopc%s to jest mnożenie przez zmienną s, dlaczego nie ma operatora * (mnożenia), po co ten %x? i jeszcze raz na końcu to dopc?

Próbowałem go przekształcić, żebym mógł sobie wybrać ile razy chcę skopiować moją cząsteczkę, ale się nie da

max = int(input("Wpisz cyfre"))
s = range(1, max)
for x in s:
    cmd.copy("dopc%s" %x, "dopc")

input w ogóle nie działa. Mam taki błąd EOFError: EOF when reading a file

W dodatku w pycharm w OBYDWU przypadkach "Unresolved reference 'cmd' less... (Ctrl+F1)
Inspection info: This inspection detects names that should resolve but don't. Due to dynamic dispatch and duck typing, this is possible in a limited but useful number of cases. Top-level and class-level items are supported better than instance items.
PEP 8: missing whitespace around operator" choć ten pierwszy skrypt działa ok

1

Czyli muszę używać tylko programowania funkcyjnego i wszystko muszę kłaść do funkcji?

Ja bym nie interpretował polecenia napisania funkcji jako kategorycznego wymogu pisania funkcyjnie.

I dlaczego dwa razy piszę doSimpleThing, raz z apostrofem, a raz bez?
To powinno nieco rozjaśnić sprawę - https://pymol.org/dokuwiki/doku.php?id=api:cmd:extend, https://pymolwiki.org/index.php/Extend

2

Skoro to jest kod odpalany z wnętrza jakiegoś innego programu, to cmd może być częścią API tego programu i będzie dostępny tylko, gdy Twój kod zostanie uruchomiony z wnętrza programu.

Tak samo działa np. API Abaqusa - piszesz plugin jako skrypt w Pythonie 2.7, umieszczasz pliki .pyc w odpowiednim katalogu, odpalasz plugin z programu i wówczas skrypt jest w stanie importować elementy API - jako skrypt standalone wysypie się na imporcie i również w ich przypadku PyCharm krzyczy.

Co do pisania kodu funkcyjnie - jeżeli już to proceduralnie ;) w takich sytuacjach, jak ta - gdy subskrybujesz jakieś polecenie np. w cmd, podajesz dwa argumenty - nazwę (klucz) pod którą komenda ma być rozpoznawana, oraz obiekt który ma być wywołany. Czyli cokolwiek, co da się wywołać - np funkcję, klasę (wywoła się konstruktor i powstanie obiekt klasy) czy metodę klasy, zarówno statyczną jak i przez odwołanie do konkretnej instancji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1