18.07.17

Posted gxj742

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18.07.17相关的知识,希望对你有一定的参考价值。

一.函数名的运用

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

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 def 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的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数