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

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

  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)) #判断是不是迭代器

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

  1. python基础之函数名的使用,闭包以及迭代器

    内容梗概: 1. 函数名的使⽤用以及第⼀一类对象 2. 闭包 3. 迭代器 1.函数名一. 函数名的运⽤.函数名是一个变量, 但它是⼀个特殊的变量, 与括号配合可以执行函数的变量.1.1 函数名的内存 ...

  2. day12 python函数名的应用 闭包 迭代器

    day12 python   一.函数名的应用(是第一类对象)     函数名的命名规范和变量是一样的     函数名其实就是变量名 def func():     print('i am funct ...

  3. 【学习笔记】--- 老男孩学Python,day12 函数名的应用,闭包,迭代器

    1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用 1.赋值 def func(): print("你吃了么?") # print(func) # a = func # ...

  4. python 函数名的应用(第一类对象),闭包,迭代器

    1.函数名的应用(第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 可以作为列表中的元素进行储存. def func1(): pass def func2(): pass lst = ...

  5. python 函数名 、闭包 装饰器 day13

    1,函数名的使用. 函数名是函数的名字,本质就是变量,特殊的变量.函数名()加括号就是执行此函数. 1,单独打印函数名就是此函数的内存地址. def func1(): print(555) print ...

  6. day 12 函数名的应用 闭包 迭代器

    今日主要内容 1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用   #再函数名后面添加() 才是对函数的调用, 否则打印的是函数的内存地址 1.赋值 2.作为list元素 3.作为参数 d ...

  7. python 函数名,闭包

    1.函数名字的应用 函数名是什么? 函数名是函数的名字,本质:变量,特殊变量 函数名+() ———>执行此函数: 2.函数名的赋值: def func2(): print(44) f = fun ...

  8. Python函数名做参数,闭包,装饰器

    简单讲解闭包的写法和应用,在这之前,先声明,你定义的任意一个函数都可以作为其他函数的参数.就像下面这段代码的参数func,接收的参数就是一个函数名,在函数体内部使用了func()调用执行函数. 请看下 ...

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

    一.三元表达式 if条件成功的值    if  条件   else else条件成功的值 #if条件成立的结果 if 条件 else else条件成立的结果 # a = 20 # b = 10 # c ...

随机推荐

  1. MySQL(四)InnoDB中一棵B+树能存多少行数据

    一.InnoDB一棵B+树可以存放多少行数据?(约2千万) 我们都知道计算机在存储数据的时候,有最小存储单元,这就好比我们今天进行现金的流通最小单位是一毛.在计算机中磁盘存储数据最小单元是扇区,一个扇 ...

  2. JavaFX窗体设置无边框

    public void start(Stage stage) throws Exception { longStart(); Parent root = FXMLLoader.load(getClas ...

  3. centos 用户组操作

    adduser testuser //新建testuser 用户 passwd testuser //给testuser 用户设置密码 useradd -g testgroup testuser // ...

  4. [转帖]TPC-C解析系列04_TPC-C基准测试之数据库事务引擎的挑战

    TPC-C解析系列04_TPC-C基准测试之数据库事务引擎的挑战   http://www.itpub.net/2019/10/08/3331/ OceanBase这次TPC-C测试与榜单上Oracl ...

  5. 剑指offer65:矩阵中的路径(二维数组,二分查找)

    1 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩 ...

  6. WUSTOJ 1339: 土豪fcbruce(Java)

    题目链接:1339: 土豪fcbruce Description 10年后,就职于Google的fcbruce赞助了武汉科技大学好多钱,学校因此决定扩建.第一步是新建宿舍楼,为了整洁美观,fcbruc ...

  7. AVR单片机教程——开发环境配置

    今天去交大密院参观了设计展,无外乎两个主题:Arduino.Python. 关于Python,我印象最深的是一位Python程序员的话:你要硬核的话,可以去那边看Java. 拜托,都9102年了,Ja ...

  8. ALV报表——选择屏幕选项卡

    ALV选择屏幕选项卡 运行效果: 代码: *&--------------------------------------------------------------------* *&a ...

  9. Angular 学习笔记 immer 使用

    https://github.com/immerjs/immer#supported-object-types immer 是用来做 immutable 的. angular 的 change det ...

  10. nginx 禁止浏览器缓存

    如果我们使用Nginx作为静态资源服务器,那么可以使用expires进行缓存控制. location /{ expires 1s; } 如果Get页面未做任何修改,服务器就是对客户端返回304 Not ...