Я работаю над python библиотекой. У меня есть функция, moveTrack(fileorvar, track_code, x, y)
. Сейчас у меня работают аргументы track_code
, x
и y
. fileorvar
решает, редактируете ли вы переменную или файл, и в этом случае функция должна будет открыть указанный файл. Я делаю это следующим образом:
def moveTrack(self, fov, track_code, x-coord, y-coord):
print((lambda c,n,x,y,l:'#'.join([','.join([(lambda o:' '.join([(lambda m:(lambda p,v:'0'if p==0else(('-'if v else'')+''.join([n[((p//(32**q))%32)]for q in range(int(l.log(p,32))+1)][::-1])))(abs(m),(m<0)))(int(m,32)+x if(t!=2and j%2==0)or(t==2and j%2==1)else int(m,32)+y)if(t!=2or j!=0)else m for j,m in enumerate(o)if m!='']))(i.split(' '))for i in d])for t,d in enumerate(c)]))([a.split(',')for a in track_code.split('#')],list('0123456789abcdefghijklmnopqrstuv'),int(x-coord),int(y-coord),__import__('math')))
Аргумент self
необходим, но не используется пользователем вообще. Я хочу, чтобы внутри него была инструкция if / else:
def moveTrack(self, fov, track, x-coord, y-coord):
if fov == 'f':
track_code = open(track_code, 'r')
else:
track_code = str(track)
print((lambda c,n,x,y,l:'#'.join([','.join([(lambda o:' '.join([(lambda m:(lambda p,v:'0'if p==0else(('-'if v else'')+''.join([n[((p//(32**q))%32)]for q in range(int(l.log(p,32))+1)][::-1])))(abs(m),(m<0)))(int(m,32)+x if(t!=2and j%2==0)or(t==2and j%2==1)else int(m,32)+y)if(t!=2or j!=0)else m for j,m in enumerate(o)if m!='']))(i.split(' '))for i in d])for t,d in enumerate(c)]))([a.split(',')for a in track_code.split('#')],list('0123456789abcdefghijklmnopqrstuv'),int(x-coord),int(y-coord),__import__('math')))
Это не будет работать. это потому, что когда я редактирую track_code, он сохраняется только внутри этой функции. Я знаю, что могу это исправить, поместив однострочник внутри каждого оператора if / else. Однако я хотел бы избежать этого, чтобы улучшить читабельность.
РЕДАКТИРОВАТЬ
Теперь у меня есть следующее:
def moveTrack(self, fov, track, x-coord, y-coord):
track_code = None
if fov == 'f':
global track_code
track_code = open(track, 'r')
else:
global track_code
track_code = track
print((lambda c,n,x,y,l:'#'.join([','.join([(lambda o:' '.join([(lambda m:(lambda p,v:'0'if p==0else(('-'if v else'')+''.join([n[((p//(32**q))%32)]for q in range(int(l.log(p,32))+1)][::-1])))(abs(m),(m<0)))(int(m,32)+x if(t!=2and j%2==0)or(t==2and j%2==1)else int(m,32)+y)if(t!=2or j!=0)else m for j,m in enumerate(o)if m!='']))(i.split(' '))for i in d])for t,d in enumerate(c)]))([a.split(',')for a in track_code.split('#')],list('0123456789abcdefghijklmnopqrstuv'),int(x-coord),int(y-coord),__import__('math')))
Но когда я пытаюсь импортировать библиотеку выдает эту ошибку:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python38\lib\site-packages\frhd\__init__.py", line 1, in <module>
from frhd import Track, Encode, Decode, Loader
File "C:\Python38\lib\site-packages\frhd\Track.py", line 14
global track_code
^
SyntaxError: name 'track_code' is assigned to before global declaration
WHYYYYYY?