新手变量传递

2024-09-27 07:33:30 发布

您现在位置:Python中文网/ 问答频道 /正文

如果你能帮我解决这个小问题,我将不胜感激。到目前为止,在编程方面,我已经完成了一些C语言的工作,但是我对如何在Python中通过函数传递变量感到困惑。你知道吗

我确信这个问题已经被问过很多次了,但我不知道该寻找什么。你知道吗

我的代码是:

x=0
def getinput(x):
    x = input('Enter x: ')
def addtwo(x):
    x = x + 2
def printans(x):
    print 'x is', + x

getinput(x)
addtwo(x)
printans(x)

printans最后总是打印0。我确信这是因为函数中的变量是局部的,但我不知道如何在python中修复这个问题。你知道吗

谢谢你的帮助!你知道吗


Tags: 函数代码inputisdef编程局部print
3条回答

这是一个涉及全局和局部范围的问题。虽然函数可以将x作为全局作用域值进行访问,但在重新分配变量时,会对全局值进行阴影处理,但不会返回值:

# return local 
def getinput(x):
    x = input('Enter x: ')
    return x

# affect global 
def getinput(x):
    global x
    x = input('Enter x: ')

使用局部变量并返回值通常比修改全局变量更可取,除非您有完全合理的情况。你知道吗

关于可变和不可变类型的注释

这种情况还有第二种情况,那就是你所影响的对象的类型。^例如,{}和string是不可变的。因此,如果不创建新对象,则无法更改它们的值。listdict是可变类型的示例。您可以添加和删除它们,更改它们的值。你知道吗

考虑一个可变类型list

aList = []
def func():
    aList.append(1)

print aList # prints []
func()
print aList # prints [1]

这将直接附加到全局列表,甚至不指定全局关键字,因为列表本身仍然是相同的列表对象。但是,如果要用新列表覆盖该列表,而不使用全局设置,则不会在全局范围内生效:

aList = []
def func():
    aList = [1]

简而言之,如果您只是要修改对象的内容,而不是指定新对象,那么可变类型不需要global关键字。你知道吗

问题是您没有返回您在函数中获得/计算的值。你知道吗

我不会给你所有的代码,但是如果你理解了这个例子,你就可以根据需要对你自己的代码进行必要的调整,作为学习用Python编程的一部分。你知道吗

def addtwo(x):
    x = x + 2 # compute your result
    return x  # return the result to caller


result = addtwo(5) # save the returned value
print result       # print it out

收益率

7

您还需要执行类似于getinput()函数的操作,因为它会获取您希望在程序中使用的值。这与printans()不同,后者只需要打印信息,但不计算需要返回给您的任何内容。你知道吗

请注意,当您对它更熟悉时,您可以缩短代码/表达式,因此对于上面的示例,您的整个函数可以包括

 def addtwo(x):
    return x + 2

但在此之前,一步一步明确地做事情并没有错。你知道吗

正如您所说,函数中的变量是局部的。解决方法是从函数返回值:

def getinput():
    return input('Enter x: ')

def addtwo(x):
    return x + 2

def printans(x):
    print 'x is', + x

x = getinput()
x = addtwo(x)
printans(x)

用C语言来说,在处理数字时,它的工作原理与所有东西都是通过值传递的一样。你知道吗

相关问题 更多 >

    热门问题