欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习13.内容# 1.内置函数二 # 2.闭包

程序员文章站 2022-07-09 21:18:31
[TOC] 内置函数二 abs 绝对值 返回的都是正数 enumerate 枚举 ("可迭代对象","序号的起始值") 默认起始值是0 max 求最大值 min 求最小值 sum 求和 range sep多个元素的连接符 open list,dict zip拉链 按照最少的进行合并 dir 查看当前 ......

目录

内置函数二

abs 绝对值 返回的都是正数
print([abd(i) for i in lst])
enumerate 枚举 ("可迭代对象","序号的起始值") 默认起始值是0
[(0,1),(1,2),(2,3)]
print([i for i in enumerate(lst,10)])

lst = [11,22,33,-44,23,21]
new_lst = []
for i in enumerate(lst):
    new_lst.append(i)
print(new_lst)

print([i for i in enumerate(lst,1000)])
max 求最大值
print(max([1,2,3,4,56,7,8]))
min 求最小值
print(min([1,2,3,4,-56,7,8]))
sum 求和
print(sum([1,2,3,4,5],100))
range
python3.6:
    g = range(0,10)   # 可迭代对象
    g.__iter__()
python2.6:
    range(0,10)       # 获取是一个列表
    xrange(0,10)      # 获取是一个可迭代对象
    
from collections import iterable,iterator
print(isinstance(g,iterable))
print(isinstance(g,iterator))
sep多个元素的连接符
print(sep=" ", end="\n")
print(1, 2, 3, sep="      ")  # sep多个元素的连接符
print(1, end="\t")
print(2, end=" ")
print(3)
open
print(12345,file=open("t1.txt","w",encoding="utf-8"))
list,dict
print(list("alex")) #['alex',]
print(dict(key=1,a="alex"))

print(dict(((1,2),(2,3),(3,4))))
print(dict([i for i in enumerate(range(20),1)]))
zip拉链 按照最少的进行合并
lst1 = [1,2,3,4,5]
lst2 = ['a',"b","c","d","f","e"]
print(dict(list(zip(lst1,lst2))))  # 面试题
print(dict(zip(lst1,lst2)))  # 面试题
dir 查看当前函数的方法
print(dir(list))

重要的内置函数和匿名函数

匿名函数

f = lambda x,y:(x,y)
print(f(1,2))
print(f.__name__)

def func():
    return 1

print(func())

print((lambda x:x)(2)) # 同一行定义 同一行调用

lambda 关键字 -- 定义函数
x,y  形参
:x+y  返回值 -- 只能返回一个数据类型

lst = [lambda i:i*i for i in range(10)]
print(lst[2](2))

lst = []
for i in range(10):
    def func(i):
        return i*i
    lst.append(func)
print(lst[2](3))

lst = [lambda :i*i for i in range(10)]
print(lst[2]())

for i in range(10):
    pass
print(i)

lst = []
for i in range(10):
    def func():
        return i*i
    lst.append(func)
print(lst[2]())

一行函数
形参可以不写
返回值必须要写,返回值只能返回一个数据类型

lst = list((lambda i:i*i for i in range(5)))
print(lst[1](4))

lst = [x for x in (lambda :i**i for i in range(5))]
print(lst[2]())

lst1 = []
def func():
    for i in range(5):
        def foo():
            return i**i
        yield foo

for x in func():
    lst1.append(x)
print(lst1[2]())

format

print(format(13,">20"))  # 右对齐
print(format(13,"<20"))  # 左对齐
print(format(13,"^20"))  # 居中

# 进制转换
print(format(13,"08b"))    # 2
print(format(13,"08d"))    # 10
print(format(13,"08o"))    # 8
print(format(12,"08x"))    # 16

print(bin(13))

filter() 过滤

lst = [1,2,3,4,5,6,7]
def func(s):
    return s > 3
print(list(filter(func,lst)))
# func就是自己定义一个过滤条件,lst要迭代的对象
lst = [1,2,3,4,5,6,7]
print(list(filter(lambda x:x % 2 == 1,lst)))

map() # 对象映射

print(list(map(lambda x:x*x,[1,2,3,8,4,5])))
对可迭代对象中每个元素进行加工

reversed 反转

    lst = [1,2,3,4,5]
    lst.reverse()
    print(lst)

    lst1 = list(reversed(lst))
    print(lst)
    print(lst1)

sorted 排序

lst = [1,23,34,4,5,213,123,41,12,32,1]
print(sorted(lst))   # 升序
print(lst)

lst = [1,23,34,4,5,213,123,41,12,32,1]
print(sorted(lst,reverse=true))  # 降序

key 制定排序规则

dic = {"key":1,"key1":2,"key3":56}
print(sorted(dic,key=lambda x:dic[x],reverse=true))  # key是指定排序规则

print(max([1,2,-33,4,5],key=abs))  # key指定查找最大值的规则

reduce 累计算

from functools import reduce
# reduce 累计算
print(reduce(lambda x,y:x-y,[1,2,3,4,5])

闭包

def func():
    a = 1
    def f1():
        def foo():
            print(a)
        return foo
    return f1
ret = func()
a = ret()
a()

func()()()

在嵌套函数内,使用非全局变量(且不是本层变量) -- 就是闭包

avg_lst = []
def func(pirce):
    avg_lst.append(pirce)
    avg = sum(avg_lst) / len(avg_lst)
    return avg
print(func(150000))
print(func(160000))
print(func(170000))
print(func(150000))
avg_lst.append(18888888)
def func(pirce):
    avg_lst = []
    avg_lst.append(pirce)
    avg = sum(avg_lst) / len(avg_lst)
    return avg
print(func(150000))
print(func(160000))
print(func(170000))
print(func(150000))
def func():
    avg_lst = []  # *变量
    def foo(pirce):
        avg_lst.append(pirce)
        avg = sum(avg_lst) / len(avg_lst)
        return avg
    return foo
ret = func()()
print(ret(150000))
print(ret(160000))
print(ret(170000))
print(ret(150000))
print(ret(180000))
print(ret.__closure__)
(<cell at 0x0000018e93148588: list object at 0x0000018e931d9b08>,)

closure 判断是不是闭包

了解:
print(ret.__code__.co_freevars)  # 获取的是*变量
print(ret.__code__.co_varnames)  # 获取的是局部变量

闭包的作用

 1.  保证数据的安全性
 2.  装饰器