Parameter an Funktionen uebergeben
Verfasst: Montag 19. August 2013, 22:11
Ich bin dabei meinen code zu vereinfachen und dabei wieder auf ein Problem gestossen. Mittlerweile habe ich Funktionen in meiner main-Funktion, die nicht eigens in der main-Funktion aufgerufen werden, sondern von anderen Parametern abhaengen. Jetzt will ich aber von einer dieser Funktionen Parameter an eine andere Funktion uebergeben.. um nicht nochmal eine Rechnung durchfuehren zu muessen.
Hier mein Problem:
weil compute_field keine Funktion ist, die eigens in main aufgerufen wird, kann ich info_for_click nicht uebergeben...
zuvor habe ich die rechnung in der anderen Funktion nochmal durchgefuehrt, was ziemlich bescheuert ist, aber ich weiss nicht, wie ich es sonst umgehen soll...
Danke vielmals im Vorraus. Zur Orientierung: info_for_click kommt in der 4. Zeile von unten vor und ausserdem bei return in compute_fields und auch schon davor in compute_fields
Hier mein Problem:
weil compute_field keine Funktion ist, die eigens in main aufgerufen wird, kann ich info_for_click nicht uebergeben...
zuvor habe ich die rechnung in der anderen Funktion nochmal durchgefuehrt, was ziemlich bescheuert ist, aber ich weiss nicht, wie ich es sonst umgehen soll...
Code: Alles auswählen
from math import*
from string import*
table = display.getWidget("Table").getTable()
table1 = display.getWidget("Table1").getTable()
c0 = 299792458.0
betaS = 0.041
geff = 0.067539767
#big letter because lambda seems to be predefined
Lambda = 3.724129913
# should help not to use not defined functions until this moment
k = 2
s = 2
Vebit0 = 1
# find a better solution
Qout = []
numberout = []
Energyout = []
fieldout = []
def main():
Qcont, A1, Around, nameiso, abu, qdivbya, abu2, information = readcontaminationfile()
cavmaxCSS, cavmaxreal, factor = readcavmaxfile()
phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, check2, check1, check3, check4, checks,\
number, numbers, diffqa0, cavlist, combo = getInputs(A1, Around, nameiso, Qcont, factor)
alarm(cavlist, cavmaxCSS, number)
decision(phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, checks, \
number, numbers, cavlist, factor, cavmaxCSS, cavmaxreal)
clickrow(Qcont, A1, nameiso, abu, qdivbya, abu2, information, A, diffqa0, check3, check4, factor, \
phi, minimumf, maximumf, cavmaxreal, combo)
def refresh():
table.setContent([[" ", " ", " ", " "]])
table1.setContent([[" ", " ", " ", " ", " ", " "]])
...
...
...
def alarm(cavlist, cavmaxCSS, number):
for i in range(1, number + 1):
if number >= i and cavlist[i-1] > cavmaxCSS[i-1]:
display.getWidget("cav" + str(i)).setPropertyValue("foreground_color",RED)
def compute_field(s, A, phi, k, Vebit0, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E):
E_average = (600 + E)/2
v_averge = sqrt(2*E_average*1.602177*10**(-16)/1.6726*10**27)
beta_average = v_averge/c0
tmp = pi * geff / (beta_average * Lambda)
T_average = sin(tmp)/tmp*sin(pi*betaS/(2*beta_average))
fieldreal = diffE*A/(27.98*k*float(s)*T_average*cos(phi))
listfields = [fieldreal]* int(s)
# cannot be defined earlier because otherwise listfields not already defined
condition_field = (
all(fieldreal > minimumf and fieldreal < maximumf and t < u for t, u in zip(listfields, cavmaxreal)) and Vebit0 < Vebitmax
)
if condition_field:
Qout.append(k)
fieldout.append(fieldreal)
numberout.append(s)
Energyout.append(E)
set_cells(table, len(Qout) - 1, k, Vebit0, s, E)
# no provide information for click
info_for_click = zip(Qout, fieldout, numberout, Energyout)
# else:
# refresh()
return info_for_click
def decision(phi, Qin, A, E, diffE, minimumf, maximumf, Vebitmax, checks, \
number, numbers, cavlist, factor, cavmaxCSS, cavmaxreal):
Q = range(1 , Qin + 1, 1)
for i in Q:
Vebit = 12*A/i
# Ist possibility: fixed number, compute Energy
if checks == [1, 0, 0, 1]:
compute_energy(number, A, phi, i, cavlist, Vebit, Vebitmax, cavmaxCSS, factor, betaS)
elif checks == [1, 0, 1, 0]:
compute_field(number, A, phi, i, Vebit, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E)
elif checks == [0, 1, 1, 0]:
# for some reason: after checks no for..
normann = 3
for j in numbers:
compute_field(j, A, phi, i, Vebit, Vebitmax, cavmaxreal, factor, betaS, minimumf, maximumf, diffE, E)
else:
refresh()
def clickrow(Qcont, A1, nameiso, abu, qdivbya, abu2, information, A, diffqa0, check3, check4, factor, \
phi, minimumf, maximumf, cavmaxreal, combo):
class SelectionListener(ITableSelectionChangedListener):
def selectionChanged(self, selection):
text=""
for row in selection:
i=0
for s in row:
text += s;
if i != (len(row)-1):
text += " "
i+=1
text1 = text.split()
Qchosen = float(text1[0])
Number = float(text1[2])
Energy = float(text1[3])
if check4 == 0 and check3 == 1:
for Qchosen, Number, Energy, fieldreal in info_for_click
do something
if __name__ == '__main__': main()