在大多编程语言中,我们可以创建变量,然后在运行时指定其值。但是在 Python 中,变量名通常是固定的,在程序运行前就需要定义。如果想在运行时动态创建变量名,该如何实现呢?这篇文章中将介绍两种方法来解决这个问题。
setattr() 函数可以动态地给一个对象设置属性。下面是一个示例代码:
class Zoo(object):
def __init__(self, species, legs, stomachs):
self.species = species
self.legs = legs
self.stomachs = stomachs
def create_species():
name = raw_input('Enter species name: ')
legs = input('How many legs? ')
stomachs = input('How many stomachs? ')
species = Zoo(name, legs, stomachs)
setattr(sys.modules[Zoo.__module__], name, species)
if __name__ == '__main__':
for i in range(5):
create_species()
在上面的代码中,我们首先定义了一个名为 Zoo 的类,这个类包含了一个构造函数 init(),用于初始化动物的属性。然后我们定义了一个名为 create_species() 的函数,这个函数用于动态创建动物实例。在 create_species() 函数中,我们首先通过 raw_input() 函数获取用户输入的动物名称。然后我们通过 input() 函数获取用户输入的动物腿数和胃数。接下来,我们创建一个 Zoo 实例,并使用 setattr() 函数将其添加到 sys.modules[Zoo.module] 字典中。最后,我们通过 sys.modules[Zoo.module] 字典获取动物实例,并将其打印出来。
builtin 模块包含了一些 Python 内置的函数和变量。我们可以使用 builtin 模块来动态创建变量名。下面是一个示例代码:
class Zoo(object):
def __init__(self, species, legs, stomachs):
self.species = species
self.legs = legs
self.stomachs = stomachs
import __builtin__
setattr(__builtin__, species, self)
def create_species():
name = raw_input('Enter species name: ')
legs = input('How many legs? ')
stomachs = input('How many stomachs? ')
species = Zoo(name, legs, stomachs)
if __name__ == '__main__':
for i in range(5):
create_species()
在上面的代码中,我们首先定义了一个名为 Zoo 的类,这个类包含了一个构造函数 init(),用于初始化动物的属性。然后我们定义了一个名为 create_species() 的函数,这个函数用于动态创建动物实例。在 create_species() 函数中,我们首先通过 raw_input() 函数获取用户输入的动物名称。然后我们通过 input() 函数获取用户输入的动物腿数和胃数。接下来,我们创建一个 Zoo 实例,并使用 setattr() 函数将其添加到 builtin 模块中。最后,我们通过 builtin 模块获取动物实例,并将其打印出来。
这两种方法都可以动态创建变量名,但是第一种方法更加常用,也更加安全。第二种方法虽然可以实现同样的效果,但是它会将变量名添加到 builtin 模块中,这可能会导致命名冲突。所以,在实际项目中,我们通常会使用第一种方法。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。