首页 > 编程源码 > 小白学Python之基础数据类型(函数)下

小白学Python之基础数据类型(函数)下

楼主:阿豪 [2级] · 2019-12-3 ·  浏览559 · 编程源码 · ID:

变量作用域变量的作用域是指在程序中命名的变量产生想过的范围。

没看懂?没关系,我们写个示例慢慢品。

a = 0

def print_1():

a = 1

print('a =', a)

def print_2():

a = 2

print('a =', a)

print_1()

显示结果如下:a = 1在上面的示例中, a 我们进行了三次赋值,但是注意,这里并不是赋值覆盖,而是每次赋值时作用域不同。第一次赋值 a 是在最外面,这个称为全局变量,意思是它的作用域是全局的,我们在全局任何地方使用 a ,都能获得这个值。第二次赋值, a 是在 print_1() 这个函数中,我们调用了 print_1() 这个函数,所以这里的赋值会生效。第三次赋值是在 print_2() 这个函数中,我们并未调用这个函数,所以这里 a 的赋值并不会生效。比如我们可以这么打印:

a = 0

def print_1():

a = 1

print('a =', a)

def print_2():

a = 2

print('a =', a)

print('a =', a)

打印结果如下:

a = 0这时我们就将这个全局变量打印出来了。第二个和第三个在方法内的 a 就成了局部变量,这两个 a 都是只在当前的函数中生效,出了这个函数就不生效了。如果我们将局部变量中的的赋值注释掉,那么在函数中是否能取到全局变量的值?答案当然是肯定的,我们试试看:

a = 0

def print_1():

# a = 1
print('a =', a)
def print_2():
a = 2
print('a =', a)
print_1()
打印结果如下:a = 0我们还可以再做一点改变,在函数 print_1() 中调用函数 print_2() ,如下:
a = 0
def print_1():
#
a = 1

print('a1 =', a)

def print_2():

a = 2

print('a2 =', a)

print_2()

print('a3 =', a)

print_1()打印结果如下:

a3 = 0

a1 = 0

a2 = 2

此示例添加 a1 、 a2 、 a3 仅为打印后方便识别,并非这是三个变量。

注意: 内层函数的变量作用域仅在内层函数中,并不会覆盖到外层函数。匿名函数是的,你没看错,函数是可以不命名的。当我们需要使用匿名函数的时候,可以使用 lambda 关键字来声明匿名函数。lambda 只是一个表达式,函数体比 def 简单很多。

lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。语法:函数对象名 = lambda 形参:表达式我们还是写一个简单的匿名函数大家体会一下:add = lambda x,y: x yprint(add(1, 2))打印结果如下:31这里是实现了我们上一篇文章中最简单的加法,如果写一个稍微复杂一点,比如说加上逻辑判断的:max_num = lambda x,y: x if x >= y else yprint(max_num(5, 9))打印结果如下:91建议: 当函数比较复杂的时候,不建议使用匿名函数,因为它只能是一行,写起来不好写的同时还不好阅读,结构晦涩难懂,如果进行复杂的业务逻辑,匿名函数能让写的人怀疑人生,读的人生不如死。真爱生命,请远离匿名函数。

- 版权声明 - 1、本帖所有言论和图片等纯属网友个人意见,与流星社区立场无关;
2、其他单位或个人使用、转载或引用本帖时必须同时征得该帖子作者阿豪流星社区的同意;
3、备注原文地址:https://bbs.liuxingw.com/t/18955.html,可忽略第2条;
4、帖子作者需承担一切因本文发表而直接或间接导致的相关责任;
5、如本帖内容或部分内容转载自其它媒体,这并不代表本站赞同其观点和对其真实性负责;
6、如本帖若为资源类,将仅限用于学习和研究目的,您必须在下载后的24个小时之内,从您安装或使用的设备中彻底删除上述内容;
7、如果您喜欢该程序,请支持正版软件,购买注册,可以得到更好的正版服务;
8、如本帖侵犯到任何版权或违法问题,请立即邮件告知我们,我们将及时予以处理。
0条回复 |  最后回复于2019-12-3
登录注册 后才可进行评论
签到
57人签到
已签0天
  • 46633帖子
  • 1936759热点量
  • 184953火热值