函数无法访问另一个函数中的变量

时间:2016-09-28 00:39:01

标签: python-3.x

import math 

def main():
    radius = float(input('What is the radius?'))
    circle()
    print('the cirumference is', circum, '.')
    print('The area is', area, '.')


def circle():
    area = math.pi * radius ** 2
    circum = math.pi * radius * 2
    area = '{0:.3f}'.format(area)
    circum = '{0:.3f}'.format(circum)

main()

我做错了什么?我正在尝试从其他函数中打印变量,但它不会按预期工作。

2 个答案:

答案 0 :(得分:0)

主要问题是您尝试访问的变量尚未初始化。如果要访问变量并为它们分配值而不将它们传递给函数和方法,则必须在函数范围之外初始化它们,并在对变量执行任何操作之前明确说明函数内部为global 。如果你没有明确说明变量是global,它将被视为正在运行的函数范围内的局部变量,并且在它完成后无法访问。

import math 

radius = 0
circum = 0
area = 0

def main():
    global radius

    radius = float(input('What is the radius?'))

    circle()
    print ('the cirumference is', circum,'.')
    print ('The area is', area,'.')


def circle():
    global radius
    global circum

    area = math.pi*radius**2
    circum = math.pi*radius*2
    area = '{0:.3f}'.format(area)
    circum = '{0:.3f}'.format(circum)

main()

如果在函数调用中将radius作为参数传递给circle(arg),则可以在main()函数内分配返回值变量,并从那里访问它们。

import math 

def circle(radius):

    area = math.pi*radius**2
    circum = math.pi*radius*2
    area = '{0:.3f}'.format(area)
    circum = '{0:.3f}'.format(circum)

    return area, circum

def main():

    radius = float(input('What is the radius?'))

    area, circum = circle(radius)
    print ('the cirumference is', circum,'.')
    print ('The area is', area,'.')


main()

答案 1 :(得分:0)

您正在访问圈内函数中的radius变量,但它未在circle函数范围内定义。因此,运行此程序时会出错。

每个变量只能在定义的范围内看到。由于在main函数中定义了radius变量,main只会在global的范围内看到。

如果需要在不同函数之间共享变量,则应该在函数外部定义变量,并在函数内部将它们声明为circum,然后程序将知道您要从中评估变量全球范围。 arearadiusimport math radius, circum, area = 0, 0, 0 def main(): global radius, circum, area radius = float(input('What is the radius?')) circle() print('the cirumference is', circum, '.') print('The area is', area, '.') def circle(): global radius, circum, area area = math.pi * radius ** 2 circum = math.pi * radius * 2 area = '{0:.3f}'.format(area) circum = '{0:.3f}'.format(circum) main() 变量类似。

所以你的代码应该是这样的:

{{1}}