【问题标题】:Calling a function that imports its result from another function in Python调用从 Python 中的另一个函数导入其结果的函数
【发布时间】:2021-11-19 11:17:32
【问题描述】:

我在 Python f1 中有一段代码,它创建了两个函数,第二个函数从第一个函数中获取结果:

a = 3
b = 4

def fS(a,b):
    x = a+b
    return x

y = fS(a,b)
print(y)
    
def fM(a,b,y):
    z = a*b*y
    return z

w = fM(a,b,y)
print(w)

另一个使用这些函数的代码 f2,都是从第一个代码导入的:

from f1 import *

a = 6
b = 4
    
c = a+1
d = b+1

p = fS(c,d)
print(p)

q = fM(c,d,p)
print(q)

函数fS 给出两个数字的和。函数fM 给出乘以前一个总和结果的乘积。在 f2 中,两个数字都应在第一个函数之前加 1。运行 f1,它会为 yw 提供正确的结果:

7
84

但是运行 f2,它会给出 f1 的结果和 f2 的结果:

7
84
12
420

结果是正确的,但我的意图是在运行时只打印 f2 的结果(p = 12 和 q = 420),而不是前两个结果(7 和 84):

12
420

我试图通过在设置ab 的值之前在f1 中插入语句if __name__ == '__main__': 来解决它,但收到错误消息:y = fS(a,b) 中的name 'a' is not defined,因为这些值无法读取运行 f2。我在这里想念什么?有没有一种方法可以在不创建新文件的情况下做到这一点?

【问题讨论】:

  • 删除 f1 中的print 调用。
  • @AbdurRakib 这不完全是答案,从那时起他会失去直接运行 f1 时打印结果的能力

标签: python function import


【解决方案1】:

尝试在 if 中将整个代码包装在 f1 中的 defs 之外。将 f1 更改为此代码后,它应该可以工作。



def fS(a,b):
    x=a+b
    return x

def fM(a, b ,y):
    z=a*b*y
    return z


if __name__ == '__main__':
    a = 3
    b = 4
    y = fS(a,b)
    print(y)



    w = fM(a, b, y)
    print (w)

【讨论】:

  • 谢谢!它运作良好。我无法删除 print 调用,因为第一个代码也应该独立运行。
【解决方案2】:

一种解决方案是简单地从f1 中删除print 函数。
如果您仍然希望能够打印这些值但仅在需要时打印,只需在 f1 中创建函数,如下所示:

def printFirstFunction(a, b):
    print(fS(a,b))

def printSecondFunction(a, b, y):
    print(fM(a,b,y))

并仅在需要打印这些值时调用这些函数。

要解决您编写 main 函数的问题,您也应该提供该代码。很可能您忘记初始化这些变量,或者您在声明它们之前定义了函数,但我们无法确定您是否没有向我们展示该代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 2013-12-16
    • 1970-01-01
    相关资源
    最近更新 更多