博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python---函数作用域
阅读量:4607 次
发布时间:2019-06-09

本文共 1858 字,大约阅读时间需要 6 分钟。

#变量作用域

  -变量有作用范围限制

  -分类:按照作用域分类

    -全局(global):在函数外部定义

    -局部(local):在函数内部定义

  -变量的作用范围:

    -全局变量:在整个全局范围都有效

    -全局变量在局部可以使用(即函数内部可以访问函数外部定义的变量)

    -全局变量在局部范围可以使用

    -局部变量在全局无法使用

  -LEGB原则:    -L(Local):局部作用域

    -E(Enclosing function locale):外部嵌套函数作用域

    -G(Global module):函数定义所在模块作用于

    -B(Buildin):Python内置模块的作用于

 

#a1是全局的 a1 = 100 def fun(): print(a1) print("I am fun") #a2的作用域范围是fun a2 = 99 print(a2) print(a1) fun() # print(a2)无法访问a2

提升局部变量为全局变量

#b1是全局的 b1 = 100 def fun(): #提升b2为全局变量 global b2 print(b1) print("I am fun") b2 = 90 print(b2) print(b1) fun() print(b2)

运行结果:

100

100
I am fun
90
90

#globals, locals 函数

  -可以通过globals和locals显示出局部变量和全局变量

  -参看以下案例:

    

#globals 和llcals a = 1 b = 2 def fun(c, d): e = 111 print("Locals = {0}".format(locals())) print("Globals = {0}".format(globals())) fun(100, 200) Locals = { 'e': 111, 'd': 200, 'c': 100} Globals = { '__name__': '__main__', '__doc__'...} #eval()函数   -把一个字符串当成一个表达式来执行,返回表达式执行后的结果 语法:   eval(string_code, globals=None, locals=None)
#eval x = 100 y = 200 z1 = x + y z2 = eval("x+y") print(type(z1)) print(z1) print(type(z2)) print(z2) 运行结果:   
  300   
  300
#exec   -跟eval功能类似,但是,不返回结果   -语法:     exec(string_code, globals=None, locals=None)
#exec x = 100 y = 200 z1 = x + y z2 = exec("print('x+y:', x+y)") z3 = exec("x+y") print("z1", type(z1)) print("z1:", z1) print("z2", type(z2)) print("z2", z2) print("z3", type(z3)) print("z3", z3)
运行结果: x+y: 300 z1 
z1: 300 z2
z2 None z3
z3 None #递归函数   -函数直接或者间接调用自身   -优点:简洁, 理解容易   -缺点:对递归深度有限制,消耗资源   -python对递归深度有限制,超过限制报错   -再写递归程序的时候,一定注意结束条件
x = 0 def fun(): global x     x = x + 1 print(x) #函数自己调用自己 fun() fun() . .. .... RecursionError: maximum recursion depth exceeded while calling a Python object

转载于:https://www.cnblogs.com/Slxc/p/9700037.html

你可能感兴趣的文章
WCF 中,出现The remote server returned an unexpected response: (400) Bad Request.
查看>>
缓存概要
查看>>
vue项目中使用百度地图的方法
查看>>
[Vue-rx] Stream an API using RxJS into a Vue.js Template
查看>>
[Javascript] lodash: memoize() to improve the profermence
查看>>
手写符合Promise/A+规范的Promise
查看>>
JPA、JTA、XA相关索引
查看>>
查询语句的练习
查看>>
Java EE的map
查看>>
webdriver.py--解说
查看>>
windows 下配置Eclipse che
查看>>
SearchSploit
查看>>
关于C语言中的转义字符
查看>>
用正则表达式从网页里面提取视频地址
查看>>
JAVA线程优先级
查看>>
解决VC几个编译问题的方法——好用
查看>>
SPOJ #11 Factorial
查看>>
City Upgrades
查看>>
“人少也能办大事”---K2 BPM老客户交流会
查看>>
关于七牛进行图片添加文字水印操作小计
查看>>