2016-12-24 71 views
0

我试图创建一个name(string)函数,该函数提示用户输入“name”并将其存储在一个名为string的变量中。Python函数将一些字符串作为输入并初始化一个相同名称的变量为零

` def name(variable_name): 
    var = variable_name 
    var = input('Enter a name: ')` 

虽然我知道上面的代码将无法正常工作,因为变量不能作为参数的参数传递。那么有没有办法做到这一点?

对不起,对于类型转换我是Python和Stackoverflock的新手。

+1

告诉我们您正在尝试解决的较大问题。用变量名称混淆并不是一个好主意。你可能想要一本字典。 –

+2

这听起来有点像XY问题。 –

+0

呃,不,我不需要字典。我只是想知道我们是否可以创建一个采用有效变量名称并初始化相同名称变量的函数。由于我们不能使用变量作为参数,我们应该传递一个字符串。但是我们可以将字符串转换为变量。 –

回答

1
def get_name(): 
    return input('Enter a name: ') 

my_name = get_name() # my_name var stores the result 

如果你试图抽象出来的提示和input()调用底层,上面是推荐的方式。该函数返回值,并且您可以存储或利用包装的返回,但是您选择。

+0

不,我基本上想要一个函数,它将一个字符串作为输入并初始化一个相同名称的变量。 –

+0

OP正试图动态创建变量名称,而不是获取用户输入。不错的猜测虽然。 –

0

也许你想是这样的:

def name(): 
    var = input('Enter a name: ') 
    return var 
1

Python确实能够通过globals()locals()操纵符号表。通过使用这些你可以创建一个变量与任意用户提供的名称和它,如下所示连接到全球范围:

def make_var(): 
    var_name = input("Variable name") 
    globals()[var_name] = 0 

你可能也想看看什么locals()也会做。

+0

我无法编辑我的评论,所以我再次评论。我需要一个将给定字符串转换为变量的函数。也许它是不可能的,但我仍然想知道。 –

+0

@AbhinavRaj这就是代码的第一部分。你可能也想看看'locals()'做了什么。 – shuttle87

+0

Thabk你非常。这正是我需要的。我只需要将一个参数添加到make_var函数中。那么,我想知道我们是否也可以用其他语言来做到这一点。 –

0

如果我理解正确,您希望用户输入的文本成为Python代码中变量的名称。所以,如果我给我的名字'克里斯'应该有一个变量创建所谓的克里斯。

我能看到这样做的唯一原因是,你正在试图让你的程序从你的代码中已经存在的变量中选择,否则我们赋值给变量的值是什么?

我可以看到四种方法来做到这一点。

1)使用字典:

data_dictionary = dict(Chris=1, Dave=2, John=3) 
default_value = 0 
var = input('Enter a name: ') 

# Get 
new_value = data_dictionary.get(var, default_value) 

# Set 
data_dictionary[var] = default_value 

2)使用对象(如果你是更好的编写这些代码放到一个类):

class DataClass(object): 
    default_value = 0 

data_class = DataClass() 
var = input('Enter a name: ') 

# Get 
new_value = getattr(data_class, var, data_class.default_value) 

# Set 
setattr(data_class, var, data_class.default_value) 

3)使用exechttps://docs.python.org/2.0/ref/exec.html) (警告:如果使用不当,有危险)

default_value = 0 
var = input('Enter a name: ') 

# Get (with highly inadequate amount of error catching) 
exec('new_value = {}'.format(var)) 

# Set 
exec('{0} = {1}'.format(var, default_value)) 

4)使用eval(Warni NG:可笑的危险,特别是如果用户不能100%的信任,这可以用来做用户几乎所有的东西)的这些

Actually I changed my mind, never use eval. 

希望一个是有帮助的。

相关问题