2016-12-24 72 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. 

希望一個是有幫助的。

相關問題