Python—函数二

函数与过程
一般我们认为函数(function )是有返回值的,但过程(procedure)是简单的、特殊的、没有返回值的。
在Python一般来说是只有函数没有过程的:

>>> def hello():
	print('hello ixaoyi')

	
>>> temp =  hello()
hello ixaoyi
>>> print(temp)
None
>>> temp

在Python是有返回值的 
Python中是编译器动态的分配变量的类型,Python的返回值是可以有多个的:

>>> def back():
	return [1,'xiaoyi',2]

>>> back()
[1, 'xiaoyi', 2]
>>> 

变量的作用域
局部变量,全局变量

def dis(price,rate):
	final_price = price*rate
	return final_price
old_price = float(input('请输入原价:'))
rate =  float(input('请输入折扣率:'))
new_price = dis(old_price,rate)
print('打折后的价格:',new_price)

函数中的变量一般是局部变量,函数执行完之后,局部变量就会被清空,全局变量的范围是整个模块。
如果函数试图修改全局变量,那么函数的内部会自动创建一个局部变量来代替全局变量,全局变量的本身的值是不变的 。所以最好不要在函数中修改全局变量,可以访问。
当然如果非要在函数中修改全局变量也是可以的,那就要用global关键字了:

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

	
>>> count()
10
>>> a
10
>>> 


内嵌函数和闭包
内嵌函数就是在函数中在写一个函数

>>> def fun1():
	print('fun1正在运行中。。。')
	def fun2():
		print('fun2正在运行中。。。')
	fun2()
>>> fun1()
fun1正在运行中。。。
fun2正在运行中。。。
>>> 

内嵌函数的作用域在外函数中,就是只在他自己的外部函数中
闭包
闭包:内部函数定义在外部函数中,外部函数的变量在内部函数中有使用。
简单来说闭包就是函数中的函数但是与内嵌不同的是,在使用闭包的时候外部函数不对内部函数调用

>>> def funx(x):
	def funy(y):
		return x*y
	return funy

>>> a = funx(8)
>>> a(5)
40
>>> funx(8)(5)
40
>>> 

一般情况下闭包中的内部函数是不能修改外部函数的参数的,如果想要修改那就只好用关键字nonlocal:

>>> def fun1():
	a =5
	def fun2():
		nonlocal a
		a *= a
		return a
	return fun2()
>>> fun1()
25
>>> 
lambda可以定义匿名函数
>>> b = lambda x : x*2 +3
>>> b(6)
15
>>> 

当然多个参数也是 可以实现的,只要用逗号隔开就可以了。

>>> b = lambda x,y : x*2 +y
>>> b(3,4)
10
>>> 

lambda表达式的作用:
Python写一些执行脚本时,使用lambda就可以省下定义函数的过程
对于一些比较抽象并且整个程序执行下来只需要调用一两次的函数,有时候给函数起个名字也是比较头疼的问题,使用lambda不用考虑函数名的问题
简化代码的可读性,由于不同的函数阅读经常要调到开头def定义部分,使用lambda函数可以省去这样的步骤。
filter()过滤器函数,通过过滤器我们可以实现筛选

>>> filter(None,[1,0,False,True])
<filter object at 0x000001162393A630>
>>> 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]

既然学过了lambda 就是用一下:

>>> list(filter(lambda x : x%2,temp))
[1, 3, 5, 7, 9]
>>> 

我们可以很明显的看出来lambda函数非常简洁的
map()函数加工序列中的每一个可迭代元素

>>> list(map(lambda x : x*2,range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值