内置函数补充、匿名函数及闭包

内置函数、匿名函数及闭包

匿名函数

def func(x,y):
    return (x,y)
print(func(1,2))
# 结果:
(1,2)

f = lambda x,y:(x,y)  # lambda关键字
print(f(1,2))
# 结果:
(1,2)

print((lambda x,y:(x,y))(1,2))
# 结果:
(1,2)               # 一行代码实现匿名函数的定义及调用

print(lambda :1)
print((lambda :1)())       # 匿名函数可以不写参数,但必须具有返回值,返回值必须为一个,可以是任意数据类型
# 结果:
<function <lambda> at 0x000001C2089A6048>    # 打印函数名,即函数内存地址
1             # 调用函数,打印函数值

内置函数

  • abs() 绝对值函数

    print(abs(-2)) #结果:2
    lst = [1,2,4,6,-6,-4,4]
    print(abs(i) for i in lst)   #结果:<generator object <genexpr> at 0x000001CD1A64DF10> 生成器内存地址
    print([abs(i) for i in lst])  #结果:[1, 2, 4, 6, 6, 4, 4]
  • enumerate(可迭代对象,初始值)
    lst = [1,31,64,64,75]
    print([i for i in enumerate(lst,1)]) #默认初始值为0,指定为1
    # 结果:
    [(1, 1), (2, 31), (3, 64), (4, 64), (5, 75)]
  • print() 屏幕输出 文件输出
    print(1,2,3,sep='*',end='\t')   # sep指定间隔方式,end指定结束方式
    print(1)
    # 结果:1*2*3    1   
    print(12345,file=open('t1.txt','w',encoding='utf-8') )
  • list() 将一个可迭代对象转换成列表
  • tuple() 将一个可迭代对象转换成元组
  • dict() 通过相应的方式创建字典。
  • sum() 求和
    print(sum([1,2,3]))
    print(sum((1,2,3),100))
  • max() 求最大值
    print(max([1,6,12,7,432,3,-33]))  #返回列表元素的最大值
    print(max([1,4,23,-56,42,7],key=abs)) #返回列表元素绝对值的最大值
    dic = {'a':3,'b':2,'c':1}
    print(max(dic,key=lambda x:dic[x])) #按照字典的值进行比较,返回值最大的键
  • min() 求最小值(与求最大值方法一样)
  • reversed() 序列反转
    l = reversed('你好')  # l 获取到的是一个生成器
    print(list(l))
    ret = reversed([1, 4, 3, 7, 9])
    print(list(ret))  # [9, 7, 3, 4, 1]
  • zip() 拉链函数
    lst1 = [1,2,3]
    lst2 = ['a','b','c','d']
    lst3 = (11,12,13,14,15)
    for i in zip(lst1,lst2,lst3):
        print(i)
    结果:
    (1, 'a', 11)
    (2, 'b', 12)
    (3, 'c', 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)))
    # 以列表形式返回列表元素中为奇数的元素
  • 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))  # 降序
    
    dic = {"key":1,"key1":2,"key3":56}
    print(sorted(dic,key=lambda x:dic[x],reverse=True))  # key是指定排序规则
  • format()
    print(format(13,">20"))  # 右对齐
    print(format(13,"<20"))  # 左对齐
    print(format(13,"^20"))  # 居中
    
    print(format(13,"08b"))    # 8位二进制
    print(format(13,"08d"))    # 8位十进制值
    print(format(13,"08o"))    # 8位八进制
    print(format(12,"08x"))    # 8位十六进制
  • map() 映射
    map() # 对象映射
    print(list(map(lambda x:x*x,[1,2,3,8,4,5])))
    # 结果:
    [1, 4, 9, 64, 16, 25]
    # 对可迭代对象中每个元素进行加工
  • reduce("函数","可迭代对象") 累计器
    from functools import reduce
    print(reduce(lambda x,y:x-y,[1,2,3,4,5]))
    # 结果:-13

闭包

闭包:嵌套函数内,使用非全局变量就是闭包

闭包的好处:

保障数据安全性,装饰器使用

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>

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

原文地址:https://www.cnblogs.com/lifangzheng/p/11229543.html

时间: 2024-08-08 17:54:50

内置函数补充、匿名函数及闭包的相关文章

Python 内置函数补充匿名函数

Python3 匿名函数 定义一个函数与变量的定义非常相似,对于有名函数,必须通过变量名访问 def func(x,y,z=1): return x+y+z print(func(1,2,3)) 匿名函数定义:使用 lambda 来创建匿名函数 匿名函数1. 没有名字 2:函数体自带return 匿名函数 def func(x,y,z=1): return x+y+z print(lambda x,y,z=1:x+y+z) function <lambda> at 0x000000000346

Python 基础第十四天(内置函数和匿名函数)

今天主要内容 1.生成器补充--生成器推导式 2.内置函数 3.匿名函数 1.生成器推导式 (1)列表推导式:一行搞定 ,简单,感觉高端.但是,不易排错. 例: l1 = [] for i in range(1,12):  l1.append('python%s期' % i) print(l1) 生成式: l2 = ['python%s期' %i  i  for i in range(1,12)] print(l2) 结构: 循环模式[经过加工的i for i in 可迭代对象] 筛选模式 [经

python-3_函数_匿名函数_正则_yield_迭代器_序列化_内置函数_模块

L=['a','b','c','d'] for (offset,item) in enumerate(L):    print offset,item 打印的结果: 0 a1 b2 c4 d 迭代器: for i in range(100):     生成列表 for i in xrange(100)    迭代器,速度会比range快 readlines()    xreadlines() 例子: def run():    print "test1"    yield 1     

python——内置函数和匿名函数

内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的.那今天我们就一起来认识一下python的内置函数.这么多函数,我们该从何学起呢?     Built-in Functions     abs() dict() help() min() setat

python内置函数和匿名函数

内置函数 68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.     Built-in Functions     abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod() id() object() sorted() ascii() enumerate() input() oct() staticmethod() bin() eval() int() open()

python之迭代器生成器和内置函数,匿名函数

今天学习了迭代器生成器以及内置函数和匿名函数,说实话有些懵圈,有些难度了. 一.迭代器和生成器 1.如何从列表.字典中取值的: index索引 for循环 凡是可以使用for循环取值的都是可迭代的 (1)可迭代协议:内部含有__iter__方法的都是可迭代的 (2)迭代器协议:内部含有__iter__方法和__next__方法的都是迭代器 什么是可迭代的:内部含有__iter__方法的都是可迭代的 什么是迭代器:迭代器=iter(可迭代的),自带一个__next__方法 可迭代最大的优势:节省内

python内置函数及匿名函数

locals  本地作用域/局部作用域 会随着位置的改变而改变globals 全局作用域           永远不变 永远是全局 a = 1 b = 2 print(locals()) print(globals()) def func(): c = 3 d = 4 print(locals()) def func2(): l1 = [] d1 = {} print(locals()) #无论在哪里打印 得到的都是全局作用域中的名字 func() func2() # 结果 # {'__name

python之路——5、内置函数和匿名函数

阅读目录 楔子 内置函数 匿名函数 本章小结 返回顶部 楔子 在讲新知识之前,我们先来复习复习函数的基础知识. 问:函数怎么调用? 函数名() 如果你们这么说...那你们就对了!好了记住这个事儿别给忘记了,咱们继续谈下一话题... 来你们在自己的环境里打印一下自己的名字. 你们是怎么打的呀? 是不是print('xxx'),好了,现在你们结合我刚刚说的函数的调用方法,你有没有什么发现? 我们就猜,print有没有可能是一个函数? 但是没有人实现它啊...它怎么就能用了呢? 早在我们“初识函数”的

PHP内置的字符串处理函数

字符串的特点    1.其他类型的数据用在字符串类型处理函数中,会自动将其转化成字符串后,在处理 <?php echo substr("abcdefghijklmn",2,4),"<br>"; //cdef //使用数字会自动转化为字符串 echo substr(123456,2,4); //3456 ?> 2.可以将字符串视为数组,当做字符集合来看待 <?php $str="abcdefg"; //下面这两种方法都

python之内置函数,匿名函数

什么是内置函数? 就是Python给你提供的,拿来直接用的函数,比如print,input等等.其实就是我们在创建.py的时候python解释器所自动生成的内置的函数,就好比我们之前所学的作用空间 内置空间就是python文件在创建的时候python解释器所自动创建的 重要的 内置函数: *** eval: eval:执行字符串类型的代码,并返回最终结果.(其实就是对字符串内的类型进行操作 比如你字符串内事int类型的  相加相乘之类的  直接进行操作 如果字符串内事列表或者字典直接把列表字典给