作用域,全局和局部变量

def test3(name,x=2,*args,**kwargs): #函数调用函数时,要在被调用的前面

print(name)

print(x)

print(args)

print(kwargs)

logger("TEST4")

#
#

def logger(source):

print("from %s" %source)

test3("alex",age=18,sex="m",x=4)

#局部变量

school="old boy"

def change_name(name):

global school #强制把局部变量改成全局变量,覆盖已有的全局变量

school="MAGE"

print("before change",name,school)

name="Alex" #这个函数就是这个变量的作用域

print("after change",name)

name="alex"

change_name(name)

print(name)

print(school)

def change_name(): #绝对不要这么改!!!!单独的字符串,单独的整数!!

global name

name="alex"

#

change_name()

print(name)

列表,字典,集合都可以在函数中改全局变量!(字符串,整数不能再里面改)

school="oldboy"
names=["alex","zhaz","rain"]
def change_name():
names[0]="乌龟"
print("inside",names)

change_name()
print(names)

#全局与局部变量
#1、在子程序中定义的变量为局部变量,局部变量的作用域是定义该变量的子程序。
#2、在程序的一开始定义的变量是全局变量,作用域是整个程序。
#当全局与局部变量同名时:在定义局部变量的子程序内,局部变量生效,在其他地方全局变量生效!

原文地址:http://blog.51cto.com/12992048/2175546

时间: 2024-11-02 07:17:38

作用域,全局和局部变量的相关文章

shell 全局和局部变量

/******************************************************************** * shell 全局和局部变量 * 声明: * 到目前为止,在写shell脚本的时候,经常被shell的函数中的变量 * 作用域搞得糊涂,于是今天特意查了点资料,看到底怎么回事. * * 2016-2-24 深圳 南山平山村 曾剑锋 ***************************************************************

java之static变量与全局、局部变量的区别

static变量与全局.局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式.这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的.而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它.由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函

全局、局部变量,数据的存储类别

[局部变量](local variable) 1.在一个函数中定义的,作用范围只在本函数范围内. 2.在一个复合语句中定义,作用范围只在复合语句中. [全局变量](global variable) #定义在函数之外,作用范围 从变量定义开始 到 源文件结束. [同名局部变量] #不同作用域的同名局部变量,互相不干扰,在内存中是处于不同的存储空间. [局部变量 与 全局变量 同名] #当局部变量与全局变量重名时,由于局部优先原则,全局变量被屏蔽. [全局变量的缺点] ————[高内聚,低耦合] 全

static与全局与局部变量的区别

转自:http://www.cnblogs.com/lzjsky/archive/2010/11/19/1882064.html 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式. 这两者在存储方式上并无不同.这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的. 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效,

JS的预编译和执行顺序 详析(及全局与局部变量)

最近在复习javascript的事件处理时发现了一个问题,于是总结一下:javascript的预编译和执行顺序的问题:   <html> <head> <title>事件处理</title> <meta http-equiv="content-type" content="text/html;charset=utf-8"/> <script type='text/javascript'> //页

js 基础 -- 循环、函数调用 、全局和局部变量、异常捕获、事件

一:循环 for for in <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>循环</title> <meta name="viewport" conte

js全局访问局部变量

1. 在函数内使用this.name(变量名)的方式赋值,当函数作为普通函数调用时,在函数外部可以直接访问到,这是因为这里的this指向window: function fn(){ var r = 2 ; this.ss = 0; this.sum=function(num1,num2){ return (num1+num2)*r; }; } fn(); //var b = new fn(); console.log(ss); //0 console.log(window.sum(1,2));

js中三种作用域详解(全局,函数,块级)

1.全局变量:声明在函数外部的变量(所有没有var直接赋值的变量都属于全局变量) 2.局部变量:声明在函数内部的变量(所有没有var直接赋值的变量都属于全局变量) JS中变量申明分显式申明和隐式申明. vari=100;//显式申明 i=100;//隐式申明 在函数中使用var关键字进行显式申明的变量是做为局部变量,而没有用var关键字,使用直接赋值方式声明的是全局变量. 当我们使用访问一个没有声明的变量时,JS会报错.而当我们给一个没有声明的变量赋值时,JS不会报错,相反它会认为我们是要隐式申

(九)局部变量、作用域、匿名函数

一.什么是作用域 1.作用域就是作用范围.又分全局作用域和局部作用域 全局作用域任意位置都可以引用 局部作用域只能在局部范围 1 number=int(input(">>>>:")) 2 def func(a): 3 number=5 #局部变量 虽然我们定义了一个number=5 4 if a==number: 5 print(a) 6 else: 7 print(number) 8 print("局部变量:",number)#输出的是局部