首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新定义另一个脚本中的变量并循环重新定义(PYTHON)?

重新定义另一个脚本中的变量并循环重新定义(PYTHON)?
EN

Stack Overflow用户
提问于 2018-06-12 07:21:23
回答 1查看 0关注 0票数 0

script_1.py我目前正在编写的文档中,我已经阅读了一个带有数据的文本文件,并且我将这些数据分成了单独的列,并将它们变成了numpy数组。现在,我想通过我制作的计算器运行其中的一列(script_2.py)。在计算器中有必须定义的变量(主要ij)。

所以,这是我需要帮助的地方。我想取一个我的numpy数据数组并替换它的第一个值作为计算器的i值,然后运行计算器,返回一个结果,然后用数组的第二个值重复该过程,然后使用第三个值等等... all从我目前script_1.py

我已经得到了script_1.py对计算器呼吁,并通过导入它运行它,我对如何重新定义变量只是有点失去了iscript_2.pyscript_1.py,运行它,然后循环这一进程。

来自script_1

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import script_2 as calc

# Read data from txt file
data = np.loadtxt('fort.txt')

# Identify and label each column's data
nvalue_pt1 = data[:496, 0]

# Make each column an array for manipulation
nvalue_pt1 = np.array(nvalue_pt1)

# Run calculator with new values from above **WHERE I NEED HELP**
calc.i = nvalue_pt1[0]
calc.sigma(calc.Aij, calc.j, calc.i - 1)

script_2

代码语言:javascript
复制
# ***Input i value:
i = 5

# ***Input j value:
j = 3

# ***Input z value:
z = 2

# Calculate g value:
g = 2 * i**2

def Aij(j):
    return (1.57456 * 10**10) * (1.0 / g) * (z**4.0) * (1.0 / ((i)**3.0 
* (j)**3.0)) * (1.0 / (abs((1.0 / (j)**2.0) - (1.0 / (i)**2.0))) * 
(1.0))

# Define Sigma (Sum) Function
def sigma(func, frm, to):
    result = 0
    for n in range(frm, to + 1):
        result += func(n)
    return result

# Print Result
if __name__ == '__main__':
print("Sum from j = 1 to i-1 : " + str(sigma(Aij, 1, i - 1)))
EN

回答 1

Stack Overflow用户

发布于 2018-06-12 17:07:58

script_2.py

代码语言:javascript
复制
def Aij(j, i, z):
    g = 2 * i ** 2
    return (1.57456 * 10 ** 10) * (1.0 / g) * (z ** 4.0) * (1.0 / ((i) ** 3.0 * (j) ** 3.0))\
           * (1.0 / (abs((1.0 / (j) ** 2.0) - (1.0 / (i) ** 2.0))) *(1.0))


def sigma(func, **kwargs):
    # i think it's more pythonic
    frm = kwargs.get('j')
    to = kwargs.get('i')
    # pop j, because if we parse kwargs with j and j as positional arg it would be an error
    kwargs.pop('j')
    return sum([func(n, **kwargs) for n in range(frm, to + 1)])

# Print Result
if __name__ == '__main__':
    print("Sum from j = 1 to i-1 : " + str(sigma(Aij, j=3, i=7, z=2)))

script_1.py

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
import script_2 as calc

data = np.loadtxt('fort.txt')
nvalue_pt1 = data[:496, 0]
nvalue_pt1 = np.array(nvalue_pt1)
i = nvalue_pt1[0]
calc.sigma(calc.Aij, j=3, i=5, z=2)

现在你可以改变参数。但是,你可以仅将args解析为命名参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档