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

  • 相关阅读:
    吴裕雄--天生自然 诗经:离思五首·其四
    吴裕雄--天生自然 诗经:江城子·乙卯正月二十日夜记梦
    CentOS6—启动httpd失败—Certificate has expired
    paper—SCI—Examples of author responses to reviewer comments
    paper—SCI答复审稿人的回信技巧
    mysql android—Installation using AndroPHP
    linux socket c : send data when socket close—SIGPIPE, Broken pipe
    Firefox:曾经打破黑暗的产品
    mysql中datetime到time_t转换
    mysql datetime 时间比较
  • 原文地址:https://www.cnblogs.com/yang-ning/p/6400661.html
Copyright © 2011-2022 走看看