函数名 闭包 迭代器

函数名

函数名就是变量;  函数名可以作为参数进行传递

1. 函数名的内存地址

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

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

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

a = func #把函数当成变量 赋值给另一个变量
a() # 函数调用 func()

3. 函数名可以作为列表中的元素进行存储

def func1():
    print("呵呵")
def func2():
    print("哈哈")
lst = [func1,func2]
for el in lst:
    el()#相当于func1()  和func2()

4.函数名可以当做参数

def func():
    print("吃了么")
def func2(fn):
    print("我是func2")
    fn() #执行传递过来的fn
    print("我是func2")
func2(func) #把函数func当做参数传递给func2的参数fn

运行结果:
我是func2
吃了么
我是func2

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

def func1():
    print("这里是函数1")
    def func2():
        print("这里是函数2")
    print("这里是函数1")
    return func2
fn = func1() #执行完函数1 返回的是函数2 所以fn 就是func2
fn() #func2()

执行结果:
这里是函数1
这里是函数1
这里是函数2

闭包

1. 闭包就是内层函数对外层函数(非全局)的变量的引用

def func1():
    name = "alex"
    def func2():
        print(name)
    func2()
func1()

结果是 alex

怎么检测函数是不是闭包?
使用函数名 .__closure__返回cell就是闭包, 返回None就不是闭包

def func1():
    name = "alex"
    def func2():
        print(name) # 闭包   alex
    func2()
    print(func2.__closure__) #(<cell at 0x013F55D0: str object at 0x01307420>,)
func1()

2. 如何在函数外调用函数内部的函数呢?

def outer():
    name = "alex"
    def inner():
        print(name)
    return inner
fn = outer() #访问外部函数,获取到内部函数的函数地址
fn()  #访问内部函数
3. 如果是多层嵌套,只需要一层一层的往外层返回就行了闭包嵌套
def wrapper():
    money = 1000
    def func():
        name = ‘eva‘
        def inner():
            print(name,money)
        return inner
    return func

f = wrapper() #func
i = f() #func()  i=inner
i() #inner()

4. 闭包函数获取网络应用

from urllib.request import urlopen

def but():
    content = urlopen("http://www.xiaohua100.cn/index.html").read()
    def get_content():
        return content
    return get_content
fn = but() #get_content 返回给but() 所以fn = get_content
content = fn()  #fn()就是get_content(),执行函数得到 content
print(content)

content2 = fn() #重新获取内容
print(content2)

迭代器

lst = ["赵四","花生哥", "天台见"]
it = lst.__iter__()  #获取到迭代器
print(it.__next__()) #取值
print(it.__next__())
print(it.__next__())
print(it.__next__()) #这一行就超过迭代的元素的个数了 所以会报错StopIeration
这里的__iter__是帮助我们获取到对象的迭代器迭代器中的__next__()用来获取一个迭代器中的元素可以把要迭代的内容当成子弹,迭代器__iter__()就是把子弹都装进弹夹中,发射就是用__next__()把每一个子弹(元素)打出来也就是说,for循环的时候,一开始是__iter__()来获取迭代器,后面每次获取元素都是通过__next__()来完成的
迭代器模拟for循环lst = ["张一宁","石可欣","姚明"]
it = lst.__iter__()   #获取迭代器
while 1:
    try:     #尝试执行
        el = it.__next__()   #获取下一个元素
        print(el)
    except StopIteration:    #错误处理
        break

查看一个对象是否是可迭代对象的方法

from collections import Iterable  #可迭代对象
from collections import Iterator  #迭代器
print(isinstance(A,B))  #判断某个对象 A 是不是 B 类型中的实例


原文地址:https://www.cnblogs.com/kenD/p/9457124.html

时间: 2024-08-30 14:34:03

函数名 闭包 迭代器的相关文章

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

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

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

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

go 匿名函数和闭包

匿名函数 1. 函数也是一种类型,因此可以定义作为一个函数类型的变量 package main import "fmt" // 函数作为参数 func add(a, b int) int { return a + b } func testfunc(a, b int, fun func(int, int) int) int { sum := fun(a, b) return sum } func main() { sum := testfunc(2, 3, add) fmt.Print

第十一天 函数名的使用以及第一类对象, 闭包, 迭代器

本节主要内容: 1.函数名的使用以及第一类对象 2.闭包 3.迭代器 一.函数名的运用 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量 1.函数名的内存地址: 2.函数名可以赋值给其他变量 3.函数名可以当作容器类的元素(作为list元素) 4.函数名可以当作函数的 5.函数名可以作为函数的返回值 二.闭包 什么是闭包: 闭包就是内层函数, 对外层函数(非全局)的变量的引用. 叫闭包 在内存函数中调用了外层函数的变量,叫闭包.可以让一个局部变量常驻内存 使用__closur

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

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

函数名的运用(第一类对象)以及闭包与迭代器

一.函数名的应用(第一类对象) 1.函数的命名规范和变量是一样的,函数名其实就是变量名. 2.函数名的内存地址 def func(): print("呵呵" print(func) 结果: <function func at 0x1101e4ea0> 3.函数名可以赋值给其他变量 def func(): print("呵呵") print(func) a = func # 把函数当成一个变量赋值给另一个变量 a() # 函数调用 func() 结果: &

DAY11 函数进阶(函数名的本质,闭包,迭代器)

函数名的本质与一级对象: 1.函数名表示函数的内存地址. 2.函数名可以赋值给变量,可以作为容器数据类型的元素. 3.函数名可以作为参数传递给函数. 4.函数名可以作为函数的返回值. #一. 函数名表示函数的内存地址 def func(): print(111) print(func) >>><function func at 0x00000199DFD22F28> #二.函数名可以赋值给变量,可以作为容器数据类型的元素. def func(): print(111) f =

函数,闭包,迭代器

函数名:函数名可以说是一个变量,但它是一个特殊的变量,因为当它与小括号配合使用时就会执行函数. 1.函数名可以放在列表中使用: 1 def one(): 2 print(6) 3 def two(): 4 print(66) 5 li=[one,two] 6 for a in li: 7 a() 8 9 输出结果: 10 6 11 66 2.函数可以当函数名的参数 1 def one(): 2 print(6) 3 def two(f): 4 print(66) 5 f() 6 two(one)

第十二天-函数名 迭代器

# 函数名的应用:# 函数名命名与变量相同# 函数名就是变量名,一个特殊的变量,与括号配合可以执行函数的变量,函数名存储的是函数的内存地址 # 函数名的内存地址 1 def func(): 2 print("哈哈") 3 4 print(func) # 打印结果:<function func at 0x000002BA13C199D8> 5 # 直接使用函数名得到的是函数名的内存地址 # 函数名可赋值给变量 1 def func(): 2 print("呵呵&qu