Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:将值重新分配给变量(使用函数)_Python_Function_Variables_Python 2.7 - Fatal编程技术网

Python:将值重新分配给变量(使用函数)

Python:将值重新分配给变量(使用函数),python,function,variables,python-2.7,Python,Function,Variables,Python 2.7,可能重复: 如何为作为函数参数传递的变量重新赋值 例如,我希望做的是: foo = True def convert(foo): if foo == True: foo = 'on' elif foo == False: foo = 'off' return foo 其中foo现在是一个字符串。上述方法的问题在于,要将foo从布尔类型更改为字符串类型,必须传递以下信息: foo = convert(foo) 而我希望做的事情如下:

可能重复:

如何为作为函数参数传递的变量重新赋值

例如,我希望做的是:

foo = True

def convert(foo):
    if foo == True:
        foo = 'on'
    elif foo == False:
        foo = 'off'
    return foo
其中
foo
现在是一个字符串。上述方法的问题在于,要将
foo
从布尔类型更改为字符串类型,必须传递以下信息:

foo = convert(foo)
而我希望做的事情如下:

convert(foo)
或者

有什么想法吗

foo = convert(foo)
是实现这一目标的最干净、最明确的方式。如果您确实需要将字符串重新分配给
bool
变量,那么大多数人都会推荐这种方法

foo.convert()
是可以对需要定义的类的实例执行的操作。你可以做到,但不值得这么麻烦。只需重新分配变量即可

convert(foo) # actually, just convert()
也可以工作,但您必须在
convert
函数中使用
global
关键字。这是不推荐的,尤其是当它很容易避免的时候

In [1]: foo = True

In [2]: def convert():
   ...:    global foo
   ...:    foo = 'on' if foo else 'off'
   ...:     

In [3]: convert()

In [4]: foo
Out[4]: 'on'

听起来你想要这个:。另外,值得一读Python的
global
关键字(但它在这里并不真正适用)。如果你坚持要在不返回对象的情况下更改对象,那么就用类或dict之类的东西来包装它(例如一个简单的hack就是使用foo={True}并传递它)。它不仅是最干净的,而且没有对名称空间进行一些非常混乱的hack,这几乎不可能适用于所有用例,这是不可能的。至于第二个,除非你做了一些像monkeypatching
convert()
on to
object
(这将是一个非常糟糕的主意),否则也是不可能的。@sr2222我也不知道如何用monkeypatching实现这一点。我的意思是,这个方法不能重新分配它的所有者,对吗?但是,可以通过定义一个类来完成一些事情,不过可能需要对代码的其余部分进行一些更改。不管怎么说,即使考虑一下,也是一个坏主意。编辑:我不明白你指的是对象,而不仅仅是对象。不过,仍然不确定它能起到什么作用。你可以将
convert()
安装到
object
本身,这意味着每一个没有自己的
convert
的对象(至少是新样式和最内置的)现在都会有你定义的
convert
方法。由于
foo
的类型未定义,实际上无法定义,因此在OP的场景中,添加这一点的唯一方法是做一件非常糟糕的事情,直接使用
对象
。尽管如此,在没有显式赋值的情况下,将转换后的值实际推回到调用的名称空间
convert
中的标签将是非常棘手的代码。甚至可能根本不可能完成我们所说的操作。尽管考虑到这是一个多么糟糕的主意,我并不特别想去想办法解决它
In [1]: foo = True

In [2]: def convert():
   ...:    global foo
   ...:    foo = 'on' if foo else 'off'
   ...:     

In [3]: convert()

In [4]: foo
Out[4]: 'on'