python notice8 函数名应用和闭包

一、函数名的应用

  函数名是一个特殊的变量,函数名配合括号(函数名())可以执行函数。

  1.函数名的内存地址。

def func():
    print("呵呵")
print(func)

结果:
<function func at 0x1101e4ea0>

  2.函数名可以赋值给其他变量,该变量配合括号即可调用函数。

def func():
    print("呵呵")
a = func
a()  # 相当于调用func()

  3.可以作为list的元素,for循环调用。

def func1():
    print("你好")
def func2():
    print("我好")
def func3():
    print("他好")
lst = [func1,func2,func3]
for el in lst:
    el()

  4.函数名可以作为函数的参数。

def func1():
    print("小黑人")
def func2(fn):    #func1作为func2的参数
    fn()
func2(func1) 

  5.函数名可以作为函数的返回值。

def func_1():
    print("函数1")
    def func_2():
        print("函数2")
    return func_2
fn = func_1()    #func1执行完毕后返回func2,赋值给fn。
fn()    #fn配合括号即可执行func2函数,这样就可以在函数外面调用内部函数。

二、闭包

  闭包就是内层函数,对外层函数(非全局)变量的引用。(内存函数对外层函数局部变量的访问)

def func1():
    name = "小黑人"
    def func2():
        print(name) # 闭包,func2引用了func1中的变量。
    func2()
func1()
结果:
小黑人 

  可以使用_ _closure_ _监测函数是否为闭包,返回cell就是闭包,返回None就不是闭包。

def func1():
    name = "小黑人"
    def func2():
        print(name) # 闭包
    func2()
    print(func2.__closure__)
func1()
结果:
小黑人
(<cell at 0x0000025B7957D798: str object at 0x0000025B7955BE10>,)  

  注:print(func2.__closure__)一定要写函数内部,即func1函数里面,如果写到外面会报错。

闭包优点:

1.安全,别的用户不可以更改。如定义一个全局变量,在函数中使用global即可修改这个全局变量,不安全。 

2.外层函数中的变量常驻内存,方便函数外部调用。同时可以避免函数多次调用时的加载时间,如爬虫信息量大时。

原文地址:https://www.cnblogs.com/xiaolu-fan/p/11237046.html

时间: 2024-10-01 08:10:41

python notice8 函数名应用和闭包的相关文章

python入门基础-三元表达式、命名空间、作用域、函数名本质、闭包

1.三元表达式(三目运算式) #1 三元表达式(三目运算法) #格式为: 为真时的结果 if 判定条件 else 为假时的结果 #另外三元表达式只适合较为简洁的条件判定,较为复杂的判定建议不要用这种方式写代码,因为比较让他人难以理解. a = 10 b = 15 compare = a if a > b else b #谁大返回谁 print(compare) 2.命名空间(namespace) #2 命名空间(namespace) #命名空间是名称和对象的印象,也可以将命名空间理解成一个字典,

python之函数名,闭包、迭代器

一.函数名的运用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1,函数名的内存地址: def func(): print("呵呵") print(func) # 结果为:<function func at 0x00000000029299D8> 打印出func的内存地址 2,函数名可以赋值给其他变量: def func(): print("呵呵") a = func # 把函数当成一个变量赋值给另一个变量 a()

python 11 函数名 迭代器

今日内容大纲 global nonlocal 函数名的运用 新特性:格式化输出 迭代器: 可迭代对象 获取对象的方法 判断一个对象是否是可迭代对象 小结 迭代器 迭代器的定义 判断一个对象是否是迭代器 迭代器的取值 可迭代对象如何转化成迭代器 while循环模拟for循环机制 小结 可迭代对象与迭代器的对比 昨日内容回顾以及作业讲解 函数的参数: 实参角度:位置参数,关键字参数,混合参数. 形参角度:位置参数,默认参数,仅限关键字参数,万能参数. 形参角度参数顺序:位置参数,*args, 默认参

11.Python初窥门径(函数名,可迭代对象,迭代器)

Python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return l print(func(1)) # [1] print(func(2)) # [1,2] print(func(3)) # [1,2,3] 二.函数名的应用 函数名指向的是函数的内存地址,加上()就执行这个函数 def func(args): return args print(func) #

python动态函数名的研究

所谓动态函数名,就是使用时完全不知道是叫什么名字,可以由用户输入那种. 一般人习惯性会想到eval或exec, 但是众所周知,这样的写法不安全而且容易引起问题,而且不pythonic.而且使用时必须把函数定义写在动态函数名调用之前. def _phyCPU(): print "ok" values = ["_phyCPU"]#, "_proCPU", "_cpuModel"] for value in values: eval

Python/函数的嵌套和闭包

Python基础--函数的嵌套和闭包 一.名称空间和作用域 名称空间:Python所有有关命名的操作都是在操作名称空间,例如变量名,函数名 1.内置名称空间:Python解释器提供好的功能,解释器启动跟着一起启动,是全局作用域 2.全局名称空间:Python中顶行写的,不在函数内部定义的,都是全局名称空间,在运行的时候会产生名称空间,是全局作用域 3.局部名称空间:在一个小范围定义,只能当前范围及其子空间内运行,例如在函数内部定义的,是局部作用域 二.函数的嵌套 1.函数的嵌套调用 2.函数的嵌

python 函数名 、闭包 装饰器 day13

1,函数名的使用. 函数名是函数的名字,本质就是变量,特殊的变量.函数名()加括号就是执行此函数. 1,单独打印函数名就是此函数的内存地址. def func1(): print(555) print(func1) # <function func1 at 0x0000027B7CF1A048> 2,函数名的赋值 def func(): print(666) f = func print(f()) 3,函数名可以作为容器类数据的元素. def f1(): print(111) def f2()

python函数名的应用、闭包和迭代器

一.函数名的应用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数变量. 1.函数名的内存地址 def func(): print("哈哈") print(func) #<function func at 0x000002750A7998C8> 2.函数名可以赋值给其他变量 def func(): print("哈哈") print(func) a = func #把函数当成一个变量赋值给另一个变量 a() #函数调用 fun

python之路---11 第一类对象 函数名 闭包 迭代器

二十九. 1.函数名的运用    ①函数名是?个变量, 但它是?个特殊的变量, 与括号配合可以执?函数的变量 ②函数名是一个内存地址    ③ 函数名可以赋值给其他变量         ④函数名可以当做容器类的元素     ⑤函数名可以当做函数的参数     ⑥函数名可以作为函数的返回值 2.闭包 闭包就是内层函数, 对外层函数(非全局)的变量的引?. 标准的闭包   ①优点:1).可以保护变量不受侵害 2),保持一个变量常驻内存 ②    .__closure__    查看是否是闭包 返回