【问题标题】:Return all values in a for loop [duplicate]返回for循环中的所有值[重复]
【发布时间】:2015-02-13 15:57:03
【问题描述】:

我有以下代码:

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 的可能性,但我并没有真正理解它。我正在寻找最简单的解决方案;任何帮助将不胜感激!

【问题讨论】:

  • yield,见the tutorial
  • the answer you got here 有什么问题?
  • @Schorsch:很好,谢谢!我只是想尽可能地了解我的问题,因此我在这里只询问我的循环值。

标签: python loops for-loop return return-value


【解决方案1】:

创建一个列表,将每个项目附加到其中,并在函数末尾返回它。

 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

【讨论】:

    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-25
      • 2020-01-07
      • 1970-01-01
      • 2018-10-27
      相关资源
      最近更新 更多