标签:类型 传递 装饰器 复习 必须掌握 字符串 lock 动态 关系
注:本文整理自今日头条作者:菜鸟学python,原标题:这个概念是每一个学习Python的人必须掌握的知识点。部分内容有增减。
Python中一切都是对象(int,str,list,class),函数也是对象的一种。
Python中所有对象都有三个特征:身份、类型、值
这些特点函数都具备。
#示例1
def func():
print(‘Hi,I am a fun‘)
print(type(func)) #func的类型
<class ‘function‘>
print(func) #func的内存地址
<function func at 0x109a3d158>
print(id(func)) #func的id值
4456698200
一般的变量可以赋值,函数也可以赋值
从下面的例子可以看出,func像普通赋值一样赋值给了func2,同时func2可以直接当函数使用
func2 = func
print("func的内存地址: " + str(func))
print("func2的内存地址: " + str(func2))
func2()
func的内存地址: <function func at 0x109a3d158>
func2的内存地址: <function func at 0x109a3d158>
Hi,I am a fun
通常我们参数一般都是字典、列表、字符串,其实函数也可以当参数传递,示例如下:
def another_fun(func):
print(‘Hello,I am another func‘)
func() #执行传递进来的函数func()
another_fun(func)
Hello,I am another func
Hi,I am a fun
another_fun函数有一个参数是func,实际上是讲func函数的内存地址当做参数传给了antoher_fun,接着我们就可以在another_fun函数里面直接使用了。
Python的返回值设计得很灵活,例如可以返回单个,也可以返回多个,函数也可以当做返回值返回。实际上经常玩的闭包、装饰器就是这么使用的。
def show_name(name):
def inner(age):
print(‘My name is : ‘,name)
print(‘My age is : ‘ + age)
return inner
f = show_name(‘Amy‘)
f(‘14‘)
My name is : Amy
My age is : 14
在上面的例子中,我们定义了一个函数叫show_name,这个函数的返回值是一个函数。也就是说变量f就是返回值inner函数的内存地址。所以我们可以用f(‘14‘)来执行这个函数,这就是闭包的概念。
顺便复习一下什么是闭包。
首先是维基百科中关于闭包的概念:
在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给>定函数被多次调用的过程中,这些私有变量能够保持其持久性。
根据这句话,其实我们自己就可以总结出在python语言中形成闭包的三个条件,缺一不可:
- 必须有一个内嵌函数(函数里定义的函数)——这对应函数之间的嵌套
- 内嵌函数必须引用一个定义在闭合范围内(外部函数里)的变量——内部函数引用外部变量
- 外部函数必须返回内嵌函数——必须返回那个内部函数
函数可以在容器中使用,例如列表、字典。函数可以像参数一样使用,示例如下:
def show_apple(price):
print(‘The apple price is:‘, price)
def show_orange(price):
print(‘The orange price is:‘, price)
def process(your_choice,price):
switch[your_choice](price)
switch = {‘apple‘:show_apple,‘orange‘:show_orange}
process(‘apple‘,5.8)
process(‘orange‘,6.4)
The apple price is: 5.8
The orange price is: 6.4
我们把函数show_apple 和 show_orange当做变量存放在字典里,外面设计一个函数可以根据类别来动态的调用函数,这样的设计实在是太好用了。
python中一切皆对象,这个特其实是python语言灵活的根本。
标签:类型 传递 装饰器 复习 必须掌握 字符串 lock 动态 关系
原文地址:https://www.cnblogs.com/Amyziyao/p/9276623.html