码迷,mamicode.com
首页 > 其他好文 > 详细

18.07.17

时间:2018-07-17 23:21:07      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:aaa   内存地址   name   参数   提高   stop   abc   inner   collect   

一.函数名的运用

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

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

例:

def fn():
print("abc")
print(fn) #函数的内存地址
a = fn #将函数赋值给a
a() #调用函数
==> <function fn at 0x00000229C37C2AE8>
abc

2.函数可以作为函数的参数

例:

def func(fn):
fn()
def gn():
print("abc")
func(gn) ==>abc

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

例:

def fn1():
print("呵呵")
def fn2():
print("嘿嘿")
def fn3():
print("吼吼")
lis = [fn1,fn2,fn3]
for i in lis:
i()
==>呵呵
嘿嘿
吼吼

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

例:

def gn():
def inner():
print("aaa")
return inner #返回inner函数
ret = gn()
ret() ==>aaa

二.闭包

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

变量写在全局是不安全.

例:

def fn():
name = "alex"
def inner():
print(name)
return inner
ret = fn()
ret() ==>alex #访问inner函数

2.闭包的特点:

(1)安全(防止其它程序改变这个变量)

(2)常驻内存,提高效率.

3.查看闭包

__closure__()函数可以查看闭包.

如果不是闭包返回None 是闭包会返回cell

例:

def fn():
name = "alex"
def inner():
print(name)
inner()
print(inner.__closure__)
fn()
==> alex
(<cell at 0x00000204D86B9468: str object at 0x00000204D867D0D8>,)

三.迭代器

1.可迭代对象和迭代器

str.list.tuple.set.dict.range.文件句柄都是可迭代的数据类型

可迭代的数据类型中都有__iter__()函数.用dir()函数来查看一个数据类型中是否包含了那些函数.

例:

s = ‘abc‘
print("__iter__"in dir(s)) ==>True

所有包含了__iter__函数的数据类型都是可迭代的数据类型

Iterable表示可迭代的

__iter__作用返回一个迭代器  

__next__和__iter__两个函数都是迭代器的内部函数

例:

lst = ["abc","def","ghi"]
it = lst.__iter__()
print(it.__next__()) ==>abc
print(it.__next__()) ==>def
print(it.__next__()) ==>ghi
print(it.__next__()) ==>Error 迭代到最后一个之后,再迭代会报错

例:

lis = ["abc","def","ghi"]
it = lis.__iter__()
while 1:
try:
name = it.__next__()
print(name)
except StopIteration:
break
==>abc \n def \n ghi

try...except固定搭配

例:

lst = [1,2,3]
print("__iter__"in dir(lst)) ==>True
print("__next__"in dir(lst)) ==>False

例:

lst = [1,2,3]
from collections import Iterable
from collections import Iterator
print(isinstance(lst,Iterable)) ==>True
print(isinstance(lst,Iterator)) ==>False

isinstance(对象,类型)判断对象是不是...类型

迭代器一定是可迭代的

文件句柄和range都是迭代器

2.迭代器的特点

(1)节省内存

(2)惰性机制

(3)不能反复,只能向下执行

 

18.07.17

标签:aaa   内存地址   name   参数   提高   stop   abc   inner   collect   

原文地址:https://www.cnblogs.com/gxj742/p/9325558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!