python基础(函数名的使用、闭包、迭代器、isinstence()函数、递归))

一、函数名的使用:

  1.1 特点:

    函数名作变量赋值(返回函数名的时候不能加括号)
    返回值 函数名(返回函数名的时候不能加括号)
    函数名: 可以容器的元素
    函数名可以当做参数被传递

  1.2 函数的使用方法:

  
# 函数名作变量赋值
def func():
    print(1)
a = func

a()
func()   # 函数名可以当做值赋值给变量


# 函数名作返回值返回
def outer():
    def inner():
        print(111)
    return inner

inner = outer()
inner()


# 函数名作元素
def func():
    print(1)

def func2():
    print(2)

li = [func,func2]
print(li)  # 函数名可以当做元素放到容器里


# 函数名作参数传递
def func1():
    print(111)

def func2(fn):  # 函数名可以当做参数被传递
    fn()

func2(func1)
View Code

二、 闭包:

  2.1 形成闭包的必要条件:

    是一个嵌套函数
    在嵌套函数的内部函数使用外部变量(非全局的变量)

  2.2 闭包的特点:

    python中闭包,会进行内存驻留, 普通函数执行完后就会销毁

    全局里存放变量、方法会有污染和不安全的现象,闭包进行隔离
    装饰器的本质就是闭包

  2.3 闭包的缺点:

    存在内存泄漏

   2.4 闭包的常用方法:

  
# 查看函数是否是闭包函数
def wrapper():
    a = 10
    def inner():
       print(a)
    # print(inner.__closure__) # 不是None 就是闭包
    inner()
wrapper()



# 闭包函数的调用方法:
# 方式一:
def wrapper():
    a = 10
    def inner():
       print(a)
    return inner
inner = wrapper()
inner()


# 方式二:
def wrapper():
    a = 10
    def inner():
       print(a)
    return inner
wrapper()()


# 闭包传参:
# 方式三:
def outer():
    a = 10
    def inner(num):
        nonlocal a
        a += num
        print(a)
        return num
    return inner

inner = outer()
num = inner(110)
print(id(num))
View Code

三、 迭代器:

  3.1 定义:

    可迭代对象: 具有__iter__方法就是可迭代对象
    迭代器: 具有__iter__方法,__next__就是迭代器
    for循环的机制 就是迭代器

  3.2 迭代器的特性: 

    惰性机制
    迭代器不能从下向上走
    一次性使用,用完就没了

  3.3 创建迭代器:

    迭代对象.__iter__()

  3. 4迭代器的只用方法:

  
# 迭代器的使用:

li = [1, 2, 3]  # 迭代对象
b = li.__iter__()  # 创建一个迭代器
print(b.__next__())  # 每次获取一个值
print(b.__next__())
print(b.__next__())
View Code

  3.5  for函数的迭代器机制:

  
# for函数的迭代器机制:

li = [1,2,3,4,6,7,8,9]
em = li.__iter__()
while 1:
    try:
        print(em.__next__())

    except StopIteration:
        break
View Code

四、 isinstence()函数:

  4.1 功能

    判断一个对象是否是一个已知的类型

  4. 2 查看对象是否为迭代对象及迭代器:

  
l = [1, 2, 3]
l_iter = l.__iter__()  # 创建迭代器
print(l_iter)  # 迭代器内存地址

from collections import Iterable
from collections import Iterator

print(isinstance(l, Iterable))  # 可迭代对象
print(isinstance(l, Iterator))   # 不是迭代器
print(isinstance(l_iter, Iterator))
print(isinstance(l_iter, Iterator))
View Code

五、 递归:

  5.1 特点:

    自己调用自己本身
    有明确结束条件

  5.2 递归深度:

    递归默认层次,官方说明 1000,实际测试 998/997

    更改系统递归深度:

  
# 更改pyhton解释器递归深度

import sys
sys.setrecursionlimit(10)  
View Code

  5. 3 递归思想:

  
# 递归思想

def f():
    def a():
        def b():
            def c():
                return '哈撒给!'
            return c()
        return b()
    return a()
print(f())
View Code

  5. 4 递归的常用函数使用方法:

  
# 递归示例:
def func(age):
    age = age + 1
    print(age)
    if age == 5:
        return
    func(age)
func(2)


# 递归斐波那契数列
def fibonacci(n):
    if n <= 2:
        return 1
    else:
        return fibonacci(n - 2) + fibonacci(n - 1)

for i in range(1, 10):
    print(fibonacci(i))


# 递归阶乘
def fact(n):
    if n == 1:
        return 1
    return n * fact(n - 1)
View Code

 

posted @ 2019-03-23 16:53  Amorphous  阅读(370)  评论(0编辑  收藏  举报