Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.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_Python 2.7_Function_Global Variables_Local Variables - Fatal编程技术网

在python中从函数内传递的变量声明全局变量

在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

在python函数中,我希望对函数中的全局变量使用(读取、查询(if语句检查),然后执行其他语句)。 要在函数中执行此操作,我必须将变量声明为全局变量。 我想向函数传递一个变量,然后使用传递的变量将正确的全局变量声明为全局变量

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描述