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

一、函数名的应用(第一类对象)

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

  1.函数名的内存地址

def func():
    print("哈哈")
print(func)  #<function func at 0x000002750A7998C8>

  2.函数名可以赋值给其他变量

def func():
    print("哈哈")
print(func)
a = func  #把函数当成一个变量赋值给另一个变量
a()     #函数调用 func()
#<function func at 0x00000211E56198C8>
#哈哈

  3.函数名可以当做容器类的元素

def func1():
    print("哈哈")
def func2():
    print("哈哈")
def func3():
    print("哈哈")
def func4():
    print("哈哈")
lst = [func1,func2,func3]
for i in lst:
    i()
# 哈哈
# 哈哈
# 哈哈

  4.函数名可以当函数的参数

def func():
    print("吃了么")
def func2(fn):
    print("我是func2")
    fn()
    print("我是func2")
func2(func)        #把函数func当成参数传递给func2的参数fu
# 我是func2
# 吃了么
# 我是func2

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

 

def func_1():
    print("这里是函数1")
    def func_2():
        print("这里是函数2")
    print("这里是函数1")
    return func_2
fn = func_1()     #执行函数1,函数1返回的是函数2,这时fn指向的就是上面的函数2
fn()        #执行上面返回的函数
# 这里是函数1
# 这里是函数1
# 这里是函数2

二、闭包

  闭包:在内层函数中访问外层函数的局部变量

  优点:

        1保护你的变量不受外界影响

        2.可以让变量常驻内存

   写法:

      def outer():

        a = 10

        def inner():

          print(a)

        retunt inner

   判断方法:

def func():
    a = 10
    def inner():
        print(a)
    print(inner.__closure__) # 如果打印的是None. 不是闭包. 如果不是None, 就是闭包

func()

三、迭代器

    使用dir来查看该数据包含了哪些方法

print(dir(str))
#结果
[‘__add__‘, ‘__class__‘, ‘__contains__‘, ‘__delattr__‘, ‘__dir__‘, ‘__doc__‘, ‘__eq__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__getitem__‘, ‘__getnewargs__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__init_subclass__‘, ‘__iter__‘, ‘__le__‘, ‘__len__‘, ‘__lt__‘, ‘__mod__‘, ‘__mul__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__rmod__‘, ‘__rmul__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘capitalize‘, ‘casefold‘, ‘center‘, ‘count‘, ‘encode‘, ‘endswith‘, ‘expandtabs‘, ‘find‘, ‘format‘, ‘format_map‘, ‘index‘, ‘isalnum‘, ‘isalpha‘, ‘isdecimal‘, ‘isdigit‘, ‘isidentifier‘, ‘islower‘, ‘isnumeric‘, ‘isprintable‘, ‘isspace‘, ‘istitle‘, ‘isupper‘, ‘join‘, ‘ljust‘, ‘lower‘, ‘lstrip‘, ‘maketrans‘, ‘partition‘, ‘replace‘, ‘rfind‘, ‘rindex‘, ‘rjust‘, ‘rpartition‘, ‘rsplit‘, ‘rstrip‘, ‘split‘, ‘splitlines‘, ‘startswith‘, ‘strip‘, ‘swapcase‘, ‘title‘, ‘translate‘, ‘upper‘, ‘zfill‘]

    用来遍历列表,字符串,元组...等等可迭代对象

    可迭代对象:Iterable,里面有__iter__()可以获取迭代器,没有__next__()

    迭代器:  Iterable,里面有__iter__()可以获取迭代器,还有__next__()

    迭代器的特点:

        1.只能向前

        2.惰性机制

        3.省内存(生成器)

    for循环的内部机制

        1.首先获取到迭代器

        2.使用while循环获取数据

        3.it.__next__()来获取数据

        4.处理异常 try:xxx  except StopIteration:

s = "我是一名小画家"
it = s.__iter__()
while 1:
    try:
        el = it.__next__()
        print(el)
    except StopIteration:
        break
# 我
# 是
# 一
# 名
# 小
# 画
# 家

    判断方法:

s = "abc"
it = s.__iter__()
#第一种方法
print("__iter__" in dir(it))  #输出是Ture说明是可迭代对象
print("__next__" in dir(it))  #输出是Ture说明是迭代器
#第二种方法
from collections import Iterable
from collections import Iterator
print(isinstance(it,Iterable))  #判断是不是可迭代对象
print(isinstance(it,Iterator))  #判断是不是迭代器

原文地址:https://www.cnblogs.com/qq849784670/p/9455752.html

时间: 2024-10-04 19:07:33

python函数名的应用、闭包和迭代器的相关文章

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

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

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,函数名就是函数的内存地址a = 2b = ac = bprint(c)2,函数名可以作为变量.def func1(): print(666)f1 = func1()f2 = f1print(f2)3,函数名可以作为函数的参数.def func1(): print(666)def func2(x): print(x) x()print(func1)函数名可以当做函数的返回值.def wapper(): def inner(): print('inner') return inne

python notice8 函数名应用和闭包

一.函数名的应用 函数名是一个特殊的变量,函数名配合括号(函数名())可以执行函数. 1.函数名的内存地址. def func(): print("呵呵") print(func) 结果: <function func at 0x1101e4ea0> 2.函数名可以赋值给其他变量,该变量配合括号即可调用函数. def func(): print("呵呵") a = func a() # 相当于调用func() 3.可以作为list的元素,for循环调用.

Python/函数的嵌套和闭包

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

python 函数的作用域,闭包函数的用法

一.三元表达式 if条件成功的值    if  条件   else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c = 5 if a>b else 10 # print(c) 二.函数的命名空间 命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 *内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的

python函数名的运用

def func(): print("呵呵") print(func) 结果: <function func at 0x1101e4ea0> 函数名是?个变量, 但它是?个特殊的变量, 与括号配合可以执?函数的变量. 当打印函数名的时候会发现出现的是一个内存地址 函数名可以赋值给变量 def func(): print("呵呵") print(func) a = func # 把函数当成?个变量赋值给另?个变量 a() # 函数调? func() 函数名

Python 函数装饰器和闭包

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 装饰器基础知识 装饰器是可调用的对象,其参数是另一个函数(被装饰的函数). 装饰器可能会处理被装饰的函数,然后把它返回,或者将其替换成另一个函数或可调用对象. p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Helvetica } 假如有个名为 decorate 的装饰器: @decorate def targ

Python函数名为参数

1.定义两个函数,求和函数和最大函数 def add(x, y): return x + y def maxnum(x, y): return x if x > y else y lst= [2, 4, 6, 9,8,98,34,90] def reduce_(function, liste , initial): result = initial for num in liste: result = function(result, num) return result print(reduc