• 27-高级特性之作用域(1)


    1.原理

    1.全局变量是指函数外定义的,局部是指函数体内定义的;函数内部global 定义的也是全局。

    2.全局变量:

    • 读操作:函数局部区或者全局区,均可以直接引用。(除非被局部变量屏蔽,想不被屏蔽,用global声明)
    • 写操作:想要在函数局部区引用全局变量

    1)若全局变量是dict和list (注意tuple本身不可修改),可以直接做append,pop的操作,但是赋值操作必须加global关键字。
    2)若全局变量是其他类型,只有赋值操作。在函数内部被赋值需要global 声明

    3.局部变量只能在函数内部读和写(一旦在外部使用局部变量就变成创建同名的全局变量,有质的变化)

    4.优先级:局部变量>全局变量 { 函数内部若存在同名的局部变量,会屏蔽前面定义的全局变量}

    2.代码

    • 测试1

      name = 'Tim' #全局变量
      def f1():
      age = 18 #局部变量
      print(age,name)

      def f2():
      age=19 #局部变量
      print(age,name)

      f1() #Tim
      f2() #Tim

    • 测试2

      name = 'Tim' #全局变量

      def f1():
      age = 18 #局部变量
      global name #定义全局变量
      name = 'Eric'
      print(age,name)
      f1()
      print(name) #Eric

    • 测试3

      NAME = ['Tim','mike'] #全局变量
      NAME1 = ['Eric','Jeson'] #全局变量
      NAME3 = ['Tom','jane'] #全局变量
      def f1():
      NAME.append('Eric') #列表的append方法可改变外部全局变量的值
      print('函数内NAME: %s'%NAME)
      NAME1 = '123' #重新赋值不可改变外部全局变量的值
      print('函数内NAME1: %s'%NAME1)
      global NAME3 #如果需要重新给列表赋值,需要使用global定义全局变量
      NAME3 = '123'
      print('函数内NAME3: %s'%NAME3)
      f1()
      print('函数外NAME: %s'%NAME)
      print('函数外NAME1: %s'%NAME1)
      print('函数外NAME3: %s'%NAME3)
      '''
      函数内NAME: ['Tim', 'mike', 'Eric']
      函数内NAME1: 123
      函数内NAME3: 123
      函数外NAME: ['Tim', 'mike', 'Eric']
      函数外NAME1: ['Eric', 'Jeson']
      函数外NAME3: 123
      '''

    3. 参考文献:

    https://www.cnblogs.com/guqing/p/6110922.html

  • 相关阅读:
    Safe3TV
    LINQ 對付 SQL Injection 的 "免費補洞策略"
    Sstart(一个批量运行的小工具)
    从CSDN 漏洞谈.NET 安全开发
    看大成天下网站安全
    discuz获取任意管理员密码漏洞利用工具vbs版
    Wfuzz(支持各种web漏洞扫描的工具)
    Apache Tomcat UTF8编码漏洞
    VS2010下如何调试Framework源代码(即FCL)
    《Practical Clojure》学习笔记[3] Clojure中程序流程控制
  • 原文地址:https://www.cnblogs.com/LS1314/p/8504509.html
Copyright © 2020-2023  润新知