在python中从函数内传递的变量声明全局变量
在python函数中,我希望对函数中的全局变量使用(读取、查询(if语句检查),然后执行其他语句)。 要在函数中执行此操作,我必须将变量声明为全局变量。 我想向函数传递一个变量,然后使用传递的变量将正确的全局变量声明为全局变量在python中从函数内传递的变量声明全局变量,python,python-2.7,function,global-variables,local-variables,Python,Python 2.7,Function,Global Variables,Local Variables,在python函数中,我希望对函数中的全局变量使用(读取、查询(if语句检查),然后执行其他语句)。 要在函数中执行此操作,我必须将变量声明为全局变量。 我想向函数传递一个变量,然后使用传递的变量将正确的全局变量声明为全局变量 current_data_list = [] current_data_list_length = len(current_data_list) #the list is filled with each line from a file def listtousab
current_data_list = []
current_data_list_length = len(current_data_list)
#the list is filled with each line from a file
def listtousable(listname):
local_list_name = listname
local_list_length = local_list_name + "_length"
global local_list_name
global local_list_length
if local_list_name[0] == "firstlinevariable":
local_list_length = len(local_list_name)
print local_list_length
else:
print "wtf"
#fill into list
listtousable("current_data_list")
任何帮助都将不胜感激:)休的评论是正确的,但如果你仍然想这样做,你可以:
exec('global ' + var_name_from_list)
请参见python 3.6的文档
编辑
对于Python2.7,请参见Hugh的评论,Hugh的评论是正确的,但是如果您仍然想这样做,您可以:
exec('global ' + var_name_from_list)
请参见python 3.6的文档
编辑
对于python 2.7,请参见,您不需要在函数中创建全局状态变量;你可以改变它的值
program_state = "processing"
state_files = {
"loading": "loading.txt",
"filtering": "filtered.txt",
"processing": "process_data.txt",
"done": "final.txt"
}
def processing_function(data):
global program_state
program_state = "processing"
output_file = state_files[program_state]
您不需要在函数中创建全局状态变量;你可以改变它的值
program_state = "processing"
state_files = {
"loading": "loading.txt",
"filtering": "filtered.txt",
"processing": "process_data.txt",
"done": "final.txt"
}
def processing_function(data):
global program_state
program_state = "processing"
output_file = state_files[program_state]
全局变量通常是一个坏主意——它们使程序中的bug更难本地化。你能描述一下你到底想用这个来完成什么吗?几乎可以肯定有更好的方法。我使用全局变量来维护程序所在的全局状态&作为临时存储数据,然后在完成后写入正确的文本文件(从状态中知道)。全局变量通常不是一个好主意-它们使程序中的错误更难定位。你能描述一下你到底想用这个来完成什么吗?几乎可以肯定有更好的方法。我使用全局变量来维护程序所在的全局状态&作为临时存储数据,然后写入正确的文本文件(从状态中知道)一旦完成。你能链接Python2.7等价物吗?那太好了。你能链接Python2.7等价物吗?那太好了。我所说的状态是指对文本文件的几乎“理解”(例如,第一行表示文本文件中的每个对象都有3个值,然后是for(len-1)/文件/现在列表的对象长度,当前已选择该列表,然后创建更多列表,其中(名称)+迭代值作为名称,列表中有3个值,这样我就可以按名称+所需的iter val访问文件中的特定对象[0/1/2],使用文件数据作为列表,通过ui执行任何操作,然后根据我对列表/数据所做的任何更改写入数据。因此,动态代码执行似乎是我所需要的。您的解释让我更加困惑!您能给ie一个示例数据文件的前10行吗?也许您应该考虑使用类似sqlite instea的数据库试图将其硬塞进一个平面文件?试图实现“动态代码执行”通过变量全局变量听起来像是同时有五种头疼的问题。毫无疑问,我会在我的项目的未来使用sqlite 3,但出于学习的目的,我也希望能够使用平面文件。文件变量父位置父名称子名称子位置子描述子2名称子2位置子2描述按状态I meant几乎“理解”文本文件(例如,第一行表示文本文件中的每个对象有3个值,然后为(len-1)/文件的对象长度/now列表(当前已选择)创建更多具有(名称)的列表)+迭代值为name,列表中有3个值,这样我就可以通过name+iter val所需[0/1/2]访问文件中的特定对象,使用文件数据作为列表,通过ui执行任何操作,然后根据我对列表/数据所做的任何更改写入数据。因此,动态代码执行似乎是我所需要的。您的解释让我更加困惑!您能给ie一个示例数据文件的前10行吗?也许您应该考虑使用类似sqlite instea的数据库试图将其硬塞进一个平面文件?试图实现“动态代码执行”通过变量全局变量听起来像是同时有五种头痛的问题。毫无疑问,我会在我的项目的未来使用sqlite 3,但出于学习的目的,我也希望能够使用平面文件。文件变量父位置父名称子名称子位置子描述子2名称子2位置子2描述