极速学 python(九)

友情提示:这节内容比较多

  • 一键理解 局部变量 和 全局变量

有时候,我们再定义一个函数的时候,如果想给定义在函数外的变量赋值,我们就需要用到 『global』 ,告诉它,这是一个全局变量,而不再是局部变量。

比如说下列代码:

>>> count = 5
>>> def MyFun():
	count = 10
	print(count)

	
>>> MyFun()
10
>>> count
5

这段代码中我们并没有用到 global ,所以当我们调用 MyFun() 函数的时候,我们打印出的 count 是在 MyFun() 函数内部的,我们称之为 『局部变量』,但如果我们利用了 global ,我们就可以将 局部变量 变成 『全局变量』,count 会由原先定义好的 5 变成 10

>>> count
5
>>> def MyFun():
	global count
	count = 10
	print(count)

	
>>> MyFun()
10
>>> count
10

我们再来深入了解一下局部变量,请看下行代码:

>>> def Fun1():
	x = 5
	def Fun2():
		x *= x
		return x
	return Fun2()

>>> Fun1()
Traceback (most recent call last):
  File "<pyshell#51>", line 1, in <module>
    Fun1()
  File "<pyshell#50>", line 6, in Fun1
    return Fun2()
  File "<pyshell#50>", line 4, in Fun2
    x *= x
UnboundLocalError: local variable 'x' referenced before assignment

我们本来的意愿是返回 x的平方值,但是事与愿违,很遗憾的告诉你,这里报错了。

那我们该怎么解决这个问题呢?

我们可以有两种方法:

一、我们可以利用 『列表』 (因为列表中的内容是不存在 栈 里的)

二、我们可以利用 『nonlocal』(目的是告诉编译器这不是局部变量)

小二,上代码!~

—— 采用列表:

>>> def Fun1():
	x = [6]
	def Fun2():
		x[0] *= x[0]
		return x[0]
	return Fun2()

>>> Fun1()
36

—— 采用 nonlocal:

>>> def Fun1():
	x = 6
	def Fun2():
		nonlocal x
		x *= x
		return x
	return Fun2()

>>> Fun1()
36
  • 匿名函数

使用  『lambda 表达式』 即可得到一个匿名函数 

为什么要有 匿名函数?(学习时多问问为什么)

  1. 可以不用给只用一两次的函数起名字
  2. 简化代码的可读性

 比如我们要写两个数字的和的函数,我们可以直接用 lambda 表达式,一行就完成了

>>> g = lambda x,y : x+y
>>> g(1,2)
3
  • 介绍两个牛逼的 BIF

有请加冰 —— filter!(不就是个过滤器嘛→_→)

filter 有什么作用呢?它的作用就是过滤掉 False 的东东,得到 True 的东东

filter用两个参数:

第一个参数 可以是一个函数 也可以为空

第二个参数 是 iterable,也就是 可迭代的数据

举个栗子你就明白了~

>>> list(filter(None,[1,0,False,True]))
[1, True]

如果我们在第一个参数里头放个函数,那么是酱紫的:~)

>>> def odd(x):
	return x % 2

>>> temp = range(10)
>>> show = filter(odd,temp)
>>> list(show)
[1, 3, 5, 7, 9]

这段代码的意思是 筛选出 0 ~9 中的奇数

接下来有请加冰 —— map!

学过 Java 的童鞋想必很熟悉 map 是什么, map 是映射,他也有两个参数

第一个参数 可以是一个函数 也可以为空

第二个参数 是 可迭代的序列

>>> list(map(lambda x : x+2,range(10)))
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值