python 第一类对象 闭包 迭代器

########################总结###########################

1. 函数名 -> 第一类对象
函数名就是变量名.
函数可以赋值
函数可以作为集合类的元素
函数可以作为参数传递
函数可以作为返回值返回
2. 闭包
语法: 内层函数对外层函数的局部变量的使用
def wrapper():
name = ""
def inner():
return name
return inner

如何查看一个函数是否是闭包
函数名.__closure__ 有值就是闭包. None就不是闭包

优点:
1. 保护变量不被侵害 (javascript)
2. 可以让一个变量常驻内存

3. 迭代器
在数据中包含了__iter__是一个可迭代对象.
for循环内部

it = lst.__iter__()
while 1:
try:
it.__next__()
except StopIteration:
break

特点:
1. 节省内存
2. 惰性机制
3. 只能向前, 不能反复

意义: 统一数据类型的遍历工作

官方查看xxx是迭代器, 可迭代对象
from collections import Iterable, Iterator

isinstance(对象, Iterable)
isinstance(对象, Iterator)

迭代器一定可迭代 -> for循环
可迭代的不一定是迭代器

########################作业###########################

2,写函数,接收n个数字,求这些参数数字的和。(动态传参)

def number(*args):
    sum =0
    for i in args:
        sum=i+sum
    return sum
print(number(1,2,3,4,5,6))
3, 读代码,回答:代码中, 打印出来的值a, b, c分别是什么?为什么?
a = 10
b = 20
def test5(a, b):
    print(a, b)     #   a = 20   b = 10
c = test5(b, a)
print(c)            #   c = None    c是None是因为没有返回值,就是None
4.读代码,回答:代码中, 打印出来的值a, b, c分别是什么?为什么?
 
a=10
b=20
def test5(a,b):
    a=3
    b=5
print(a,b) #10 20  这个地方 如果推进去 就是3 5
c = test5(b,a)
print(c)  #none  没有返回值
print(a,b) #10 20
 
5, 写函数, 传入函数中多个实参(均为可迭代对象如字符串, 列表, 元祖, 集合等), 将每个实参的每个元素依次添加到函数的动态参数args里面.
例如
传入函数两个参数[1, 2, 3](22, 33)
最终args为(1, 2, 3, 22, 33)
def func(*args):
    return args
print(func(*[1, 2, 3],*(22, 33)))#分解的意思
6, 写函数, 传入函数中多个实参(实参均为字典), 将每个实参的键值对依次添加到函数的动态参数kwargs里面.
例如
传入函数两个参数
例如 传入函数两个参数{‘name’:’alex’} {‘age’:1000}最终kwargs为{‘name’:’alex’ ,‘age’:1000}
 
def func(**args):
    return args
print(func(**{'name1':'alex'},{'name2':1000}))#分解的意思
 
7, 下面代码成立么?如果不成立为什么报错?怎么解决?
a = 2
def wrapper():
        print(a)
wrapper() #内部变量引用外部变量


a = 2
def wrapper():
        a += 1 #内部变量不能直接更改外部变量的数据
    print(a)
wrapper()

def wrapper():
    a = 1
    def inner():
        print(a)#局部可以找到外部变量
    inner()
wrapper()

def wrapper():
    a = 1
    def inner():
        a += 1
        print(a)#局部变量不能更改外部变量的值
    inner()
wrapper()
8,写函数,接收两个数字参数,将较小的数字返回.
 
11111
 
 
 
 
 
 

猜你喜欢

转载自www.cnblogs.com/zaizai1573/p/10103904.html
今日推荐