ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python全局变量

2022-08-06 23:01:22  阅读:269  来源: 互联网

标签:python 作用域 num print import 全局变量 def


  python项目开发过程中,需要使用全局变量操作,缓存记录、数据共享等功能都需要全局变量的功能才得以实现,下面简单介绍下当前文件

与不同文件之间的全局变量设置与操作。

一、当前文件内全局变量

  1、变量的作用域说明

     介绍当前文件的全局变量前,先介绍下变量的作用域

     1)局部变量

def a():
  ## 局部变量 
  local = 1
  print(local)
## 全局无法使用,只有自己可用
print(lobal)

    2)全局变量

global_str = '123'
def a():
  ## 全局变量
  print(global_str)
## 全局变量大家都可以用
print(global_str)

    3)内置作用域

    系统内固定模块里定义的变量,如预定义在builtin 模块内的变量。这里不介绍了。

    4)嵌套作用域

    一般在定义类(class)中应用较多,定义方法较少使用

def out():
  ## 函数内变量,但对于下级函数就是全局变量,对于外部来说就是局部变量
  en = 1
  def inside():
    print(en)
    return en
  return inside()
out()

   2、作用域使用情况

    1)Python当中没有块级的作用于:

      代码如下:

if 1==1:
  name="Alex"#在java中不可以打印出来但是在Python中是没有块作用域,它还在外面生效
print(name)#在javasript也是可以打印的,在Python中也可以打印

    2)Python中的作用于是以函数为作用域的。

      代码如下:

def fun1():
     name="Alex"
 # print(name)会报错,超出了name的作用域

    3)在Python中作用域先找它自身函数的,然后再往外找,Python中是有作用域链的

name="Alex"
 def f2():
     name="eric"
     def f3():
         print(name)#从里面向外面找
     f3()
 f2()

    4)Python的作用域是在执行之前就已经确定下来的,如果要执行就去原来的作用域找就可以了

n="Alex"
 def fu():
     print(n)#从里到 外找,跟fu这个函数放在哪里是没有关系的
     
 def f1():
     n="AJ"
     fu()
 f1()

 

  3、当前文件的全局变量

    在定义的类中或者是函数中想要对全局变量进行操作需要使用使用global进行修饰,案例如下:

# 定义一个全局变量
num = 99


class Demo():
@classmethod
def add(cls, t=None):
global num
num += t
print('class:', num)


def fun(n=None):
global num
num += n
print('fun', num)


demo = Demo()
demo.add(1)
print(num)

结果:

  class: 100
  100
       fun 101
  101
  注:global只能在函数内使用

  4、文件间的全局变量

    1)定义文件中的全局变量

    通过import包导入的方式式引用指定文件的全局变量进行操作。不要使用from import的方式引用,此方式只可读取变量,不能操作变量

    a.py文件:

# 定义一个全局变量
num = 100

    b.py文件:

import a

def b_add():
a.num += 2

    c.py文件:

import a

def c_add():
    a.num += 1

    d.py文件:

import  a
import  b
import  c

b.b_add()
c.c_add()
print(a.num)

 

结果显示:

  103

    2)定义类属性

      类属性使用时的内存情况如下图所示,由于调用时,不同文件使用相同类的类属性地址指针都指向同一个地址,所以类的属性是共享的

    

 

 

     代码实现如下:

    a文件:

class Demo():
    share_list = []

    b文件:

import threading
import a

def f1():
    a.Demo.share_list.append(1)


def f2():
    a.Demo.share_list.append(2)


threading.Thread(target=f1).start()
threading.Thread(target=f2).start()
print(a.Demo.share_list)

输出结果:

  [1, 2]

 

标签:python,作用域,num,print,import,全局变量,def
来源: https://www.cnblogs.com/new-bird90/p/16558125.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有