python中的本地变量(local variable)和全局变量(global variable)分别是什么?

Python018

python中的本地变量(local variable)和全局变量(global variable)分别是什么?,第1张

python中直接定义的变量就是本地变量,使用global定义的变量就是全局变量。比如:

a = 1

b = 1

def foo1():

    global b #申明使用全局b

    a = 2 #a是本地变量

    b = 2 #b是全局变量

foo1()

print a

print b

如果解决了您的问题请采纳!

如果未解决请继续追问

#coding=utf-8

import threading

# 创建全局ThreadLocal对象:

localVal = threading.local()

localVal.val = "Main-Thread"

def process_student():

print '%s (in %s)' % (localVal.val, threading.current_thread().name)

def process_thread(name):

#赋值

localVal.val = name

process_student()

t1 = threading.Thread(target= process_thread, args=('One',), name='Thread-A')

t2 = threading.Thread(target= process_thread, args=('Two',), name='Thread-B')

t1.start()

t2.start()

t1.join()

t2.join()

print localVal.val

打印结果:

One (in Thread-A)

Two (in Thread-B)

Main-Thread

threading.local()这个方法的特点用来保存一个全局变量,但是这个全局变量只有在当前线程才能访问,

localVal.val = name这条语句可以储存一个变量到当前线程,如果在另外一个线程里面再次对localVal.val进行赋值,

那么会在另外一个线程单独创建内存空间来存储,也就是说在不同的线程里面赋值 不会覆盖之前的值,因为每个

线程里面都有一个单独的空间来保存这个数据,而且这个数据是隔离的,其他线程无法访问

这个东西可以用在那些地方呢,比如下载,现在都是多线程下载了,就像酷狗那样,可以同时下载很多首歌曲,那么

就可以利用这个方法来保存每个下载线程的数据,比如下载进度,下载速度之类的

所以 如果你在开发多线程应用的时候 需要每个线程保存一个单独的数据供当前线程操作,可以考虑使用这个方法,简单有效

其实这样的功能还有很多种方法可以实现,比如我们在主线程实例化一个dict对象,然后用线程的名字作为key,因为线程之间可以共享数据,

所以也可以实现相同功能,并且灵活性更多,不过代码就没那么优雅简洁了

sql_query

这个没有定义

你的代码导致的原因是

if result:

_keys = ", ".join(escape(k) for k in result)

_values = ", ".join(escapestr(result[k]) for k in result)

sql_query = "REPLACE INTO %s (%s) VALUES (%s)" % (tablename, _keys, _values)

else:

print "无记录"

这里执行到else 里面去了,而else 里面没有定义 sql_query 这个

所以报错了