zoukankan      html  css  js  c++  java
  • python中的作用域

    作用域

    先谈谈python中的全局变量和局部变量

    一,全局量和局部变量

    全局变量,所有的作用域都可读。而在定义的def函数内部的变量则属于局部变量,只
    对该函数生效,如果想在自定义的函数中修改全局变量,需要:global name ,然后再定义
    即可对全局变量重新赋值。但是对于像列表、字典、嵌套有列表的元组这样的全局变量,
    在不使用global的情况下,自定义的函数中全局变量可修改但是不可重新赋值(意思是重
    新赋值只会在当前函数中生效,而修改则会在接下来所有的函数中生效,相当于修改了全
    局变量)。

    1,一定注意在定义全局变量的时候,一定要大写。如,NAME = 'tom'等。

    NAME = 'tom'
    def f1():
    	age = 19
    	global NAME
    	NAME = 'yn'
    	print(NAME, age)
    
    def f2():
    	age = 18
    	print(NAME,age)
    f1()
    f2()
    

    执行结果:

    yn, 19

    yn, 18

    2, 

    NAME = [ 'tom','lucy']
    def f1():
    	age = 19
    #    global NAME
    	NAME.append('yn')  #修改会在接下来的函数中也生效,成为全局变量
    	print(NAME, age)
    
    def f2():
    	age = 18
    	print(NAME,age)  
    f1()
    f2()
    

    执行结果:

    ['tom', 'lucy', 'yn'] 19
    ['tom', 'lucy', 'yn'] 18

    二, 块级作用域

    python javascripts中无块级作用域(块级作用域是指if...else...中)

    java C#中有块级作用域

    1, 所以下面这段代码在python和javascripts中有执行结果,在java和C#中则没有

    if	1 == 1:
    	name = "tom"
    	
    print(name)
    

      

    2, python作用域链,由内向外找,直到找不到报错!

    name = "tom"
    
    def f1():
    	name = "a"
    	def f2():
    		name = 'b'
    		print(name)
    	f2()
    
    f1()
    

    执行结果:

    b

    3, 易混淆的点

    name = "tom"
    
    def f1():
    	print(name)
    	
    def f2():
    	name = 'lucy'
    	f1()
    
    f2()
    

    执行结果:

    tom

    4,易混淆的点

    name = "tom"
    
    def f1():
    	print(name)
    
    def f2():
    	name = "lucy"
    	return f1
    
    ret = f2()
    ret()
    

    执行结果:

    tom

    总结:

    python中,在函数未执行之前,作用域已经确定了,作用域链也已经确定了。
    作用域跟函数放在哪执行没有关系,无论在哪执行函数都要去原函数所在的作用域由内向外去找。

  • 相关阅读:
    Linux下数据库备份恢复过程
    BMC 安装操作系统以及 驱动的处理
    vCenter简单查看多少虚拟机在开机状态和一共多少虚拟机
    PDB自动启动以及Oracle Pfile的参数修改示范
    Oracle 测试环境 数据库安装过程
    CentOS Mininal 安装VMtools的方法
    日常工作 数据库中表与索引占用磁盘的简单分析
    Oracle数据库 查看表是否是 索引组织表的方法
    zabbix 使用问题两个--中文乱码,以及监控ESXi下的虚拟机
    Zabbix的简单使用
  • 原文地址:https://www.cnblogs.com/yang-ning/p/6400661.html
Copyright © 2011-2022 走看看