我有以下代码:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from scipy.special import *
import matplotlib.pyplot as plt
import numpy as np
from math import *
import csv
## Globale Variablen ##
rhof = 1000 # Dichte Flüssigkeit [kg/m³]
lameu = 11.2*10**9 # Lamé-Parameter, undrained [GPa]
lame = 8.4*10**9 # Lamé-Parameter, drained [GPa]
pi # durch Pythonmodul "math" gegeben
alpha = 0.65 # Biot-Willis-Koeffizient
G = 8.4*10**9 # Schermodul [GPa]
k = 1.0e-15 # Permeabilität [m²] bzw. [Darcy]
eta = 0.001 # Viskosität des Fluids [Pa*s]
## Berechnung der Parameter ##
kappa = k/eta
c = ((kappa*(lameu-lame)*(lame+2*G))/((alpha**2)*(lameu+2*G)))
## Wertebereich ##
xmin = 0
xmax = 50
xsteps = 1
x = np.arange(xmin,xmax,xsteps)
ymin = 0
ymax = 50
ysteps = 1
y = np.arange(ymin,ymax,ysteps)
X, Y = np.meshgrid(x,y)
## Klassendefinition ##
class Bohrloch(object):
loch_zaehler = 0
def __init__(self, xlage, ylage, tstart, q): # Funktion, um BL zu erzeugen
self.xlage = xlage # x-Lage der Bohrung
self.ylage = ylage # y-Lage der Bohrung
self.tstart = tstart # Start der Injektion/Produktion
self.q = q # Fluidmenge
######################### Druck ###############################################
def getPressure(self, t):
if (t-self.tstart<0):
return ()
print "Startpunkt liegt außerhalb des Förderzeitraumes!"
else:
for x in range (xmin, xmax, xsteps):
for y in range (ymin,ymax,ysteps):
self.r = sqrt((x-self.xlage)**2+(y-self.ylage)**2)
self.P = (self.q/(rhof*4*pi*kappa))*(expn(1,self.r**2/(4*c*(t-self.tstart))))
self.z = self.P/1e6 #= self.P/1e6
#print self.z
return self.z
我希望从循环中获取所有值,而不仅仅是最后一个/第一个。如果我评论return self.z
并取消注释print self.z
,则会显示所有值,但我想返回所有值。我读到yield
可能性,但我并不是真的理解它。我正在寻找最简单的解决方案;真的很感激任何帮助!
答案 0 :(得分:2)
创建一个列表,将每个项目附加到它,并在函数末尾返回它。
def getPressure(self, t):
if (t-self.tstart<0):
return ()
print "Startpunkt liegt außerhalb des Förderzeitraumes!"
else:
result = []
for x in range (xmin, xmax, xsteps):
for y in range (ymin,ymax,ysteps):
self.r = sqrt((x-self.xlage)**2+(y-self.ylage)**2)
self.P = (self.q/(rhof*4*pi*kappa))*(expn(1,self.r**2/(4*c*(t-self.tstart))))
self.z = self.P/1e6 #= self.P/1e6
result.append(self.z)
return result
答案 1 :(得分:2)
添加收益而不是收益:
def getPressure(self, t):
if (t-self.tstart<0):
yield None
print "Startpunkt liegt außerhalb des Förderzeitraumes!"
else:
for x in range (xmin, xmax, xsteps):
for y in range (ymin,ymax,ysteps):
self.r = sqrt((x-self.xlage)**2+(y-self.ylage)**2)
self.P = (self.q/(rhof*4*pi*kappa))*(expn(1,self.r**2/(4*c*(t-self.tstart))))
self.z = self.P/1e6 #= self.P/1e6
yield self.z
然后你就这样使用它:
for x in my_obj.getPressure(my_value):
print x
或将其存储在如下列表中:
my_list = list(my_obj.getPressure(my_value))