zoukankan      html  css  js  c++  java
  • 内置函数-max、min、round、sorted、ord、chr、any、all、dir、eval、exec、map、filter、reduce

    http://www.nnzhp.cn/archives/152

    1、max,min,round

    1 print(max([3,4.563,3,6,2.5])) #取最大值,可循环参数即可,int类型的,字符串类型不行
    2 print(min(9,4,7,1,0)) #取最小值
    3 print(round(3.43535345,2)) #取即为小数,四舍五入
    4 print(round(1.12345,2))

    2、sorted

    1 s = '235434125636234'
    2 res = sorted(s) #对字符串排序,默认升序
    3 print(list(res)) #需要转换下类型,打印
    4 res = reversed(sorted(s))#reversed反转,降序排序
    5 print(list(res))
    6 print(sorted(s,reverse=True)) #降序也可以这样写,与上面写法效果一样。
    #列表有.sort方法

    3、ord、chr

    1 print(ord('a'))#将字母转成ascii里面的值
    2 print(chr(97)) #把数字转成ascii码表里面的字母

    4、any、all

    1 res = any([1,2,3,4,0]) #如果这个循环迭代序列里面有一个为真的话,就返回true
    2 print(res)
    3 res = all([1,1,1,0,1])#如果这个循环迭代序列里面,全部为真,就返回true
    4 print(res)
    1 print(any((1,2,0))) #返回True
    2 print(any((0,0,0))) #全部是0,返回False

    5、dir获取帮助信息

    1 import hashlib
    2 m = hashlib.md5('abc'.encode())
    3 print(dir(m)) #查看变量m的所有方法

    6、eval 执行python代码,只能执行简单的,定义数据类型和运算

    实例1:

    1 # eval#执行python代码,只能执行简单的,定义数据类型和运算
    2 print(eval('1+1'))
    3 print(eval('{"a":"1"}'))

    执行结果:

    1 2
    2 {'a': '1'}

    实例2:

    1 f = open('a.txt').read() #文件里面的内容是“{'username':'abc','password':'123456'}”,但是读出来是字符串
    2 print(type(f))
    3 print(f)
    4 res = eval(f) #转数据类型
    5 print(type(res))
    6 print(res)

    执行结果:

    1 <class 'str'>
    2 {'username':'abc','password':'123456'}
    3 <class 'dict'>
    4 {'username': 'abc', 'password': '123456'}

    7、exec:执行python代码的,只要语法对,都能执行,不太安全

    1 # 在线写代码:http://www.runoob.com/try/runcode.php?filename=HelloWorld&type=python3。这种会对敏感代码进行控制
    2 my_code = '''  #前面写个变量,三引号作用于变量
    3 def my():
    4     print('运行程序')
    5 my()
    6 '''
    7 exec(my_code) #执行python代码的,这种方式不安全
    运行程序

     8、map 

    map是循环帮你调用函数,然后保存函数的返回值,python3中,返回的值放到了一个生成器里面。需要list强制类型转换下(能转成list或元组,集合等可变的类型)。
    map后面传的可以循环就行(字符串、列表等)
    实例:
    写一个调用函数:
    1 l = [1, 3, 4, 6, 2, 4, 7]
    2 l2 = [] #定义一个空list存放补0后的值
    3 def bl(i):  # 定义一个补0的函数
    4     return str(i).zfill(2)
    5 for i in l:
    6     l2.append(bl(i))
    7 print(l2)
    ['01', '03', '04', '06', '02', '04', '07']

    上面这个可以用map写:

    1 #另外用map写,帮你循环调用函数
    2 l = [1, 3, 4, 6, 2, 4, 7]
    3 l2 = list(map(bl,l))
    4 # l2 = tuple(map(bl,l))
    5 # l2 = set(map(bl,l)) #集合会去重
    6 print(l2)
    ['01', '03', '04', '06', '02', '04', '07']

    9、filter()

    也是循环调用函数的,如果函数返回的值是真,那么就保存这个值.如果返回值假,则过滤掉(过滤你传过来的值)

    实例1:上面的例子用filter过滤:
    1 def bl(i):  # 定义一个补0的函数
    2     return str(i).zfill(2)
    3 l = [1, 3, 4, 6, 2, 4, 7]
    4 l3 = list(filter(bl,l))
    5 print(l3)

    结果:返回的都是真,则全部值保留,list强制类型转换后,放在list中

    [1, 3, 4, 6, 2, 4, 7]

    实例2:

    1 def bl(i):  # 定义一个补0的函数
    2     if i >3:
    3         return True
    4 l = [1, 3, 4, 6, 2, 4, 7]
    5 l3 = list(filter(bl,l)) #循环调用函数,过滤掉传入的list中小于3的值
    6 print(l3)

    结果:

    [4, 6, 4, 7]

     10、reduce()

    一个月前,我同学去面试python开发岗,面试官给他出了一道题,使用三种不同的方法实现1到100的求和,并且要求语法尽量简洁。同学的代码如下

    #第一种
    sum1 = 0
    for i in range(1,101):
    sum1+=i
    print(sum1)
    #第二种
    print(sum(range(1,101)))
    #第三种
    print(reduce(lambda x,y:x+y,range(1,101)))

    这三种方法得到的结果都为5050
    写完这个代码以后,我同学下午就收到了offer(当然是因为他薪资要得比较低的原因!!!)
    听了我同学的传奇经历,我决定好好的学一学python的哪些内建函数。
    在此之前,我们需要了解一下lamba。

    1:lambda

    lambda作为一个表达式,定义了一个匿名函数,使用lambda简化了函数定义的书写形式。使代码更为简洁,使函数的定义方式更为直观,易理解。
    举个例子,平时我们手写一个函数实现两个数的求和,通常这样写:

    def f(x,y):
    return x+y
    print(1,2)

    但是使用lambda可以写成这样:

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

    这里lambda作为一个表达式,定义了一个匿名函数,上例的代码x,y为入口参数,x+y为函数体,其结果就是返回x+y的和。

    上面两个代码返回的结果都一样,但是使用lambada更为简洁。
    lambda与map,reduce等python内建函数配合使用能发挥更强大的作用。

    2:map

    map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。(python3中返回的是迭代器)

    f = lambda x,y,z:x+y+z
    x = map(f,[1,2,3],[4,5,6],[7,8,9])
    for i in x:
    print(i)

    这段代码分别将三个列表进行求和,然后返回一个可迭代的对象。
    (1+4+7)
    (2+5+8)
    (3+6+9)

    运行结果


    或者可以使用list将迭代器转换为列表

    print(list(x)
    1
    运行结果
    [12, 15, 18]

    3:reduce

    reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
    python3使用reduce需要引入

    from functools import reduce
    print(reduce(lambda x,y:x+y,range(1,101)))
    1
    这里以我同学笔试的题目为列子,他先定义了一个lambda表达式,目的是为了求两个数的和,使用range生成1-100的数,由于reduce对list的每个元素反复调用函数f,并返回最终结果值。
    因此,其过程为:
    (1,2,3,4,5,6,7,8,9……..100)
    1+2=3
    3+3=6
    6+4=10
    10+5=15
    ………..
    这样执行就相当于是执行了一次1+2+3+4+…….+100

    reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:

    print(reduce(lambda x,y:x+y,range(1,101),100))
    计算结果为5150

    ---------------------
    作者:katyusha1
    来源:CSDN
    原文:https://blog.csdn.net/katyusha1/article/details/81538944
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    思源:秒级体验百亿级数据量监控钻取
    禧云Redis跨机房双向同步实践
    谈谈数据中台技术体系
    RCA:收单设备调用云端接口频繁超时排查总结
    技术上的“深淘滩,低作堰”
    企业私有源代码上传github致入侵之大疆案判决了
    那些年我们一起犯过的错
    异地双活的四个误区
    没有预见性你凭什么晋升
    中国IT史上两大严重事故对我们的警醒及预防措施
  • 原文地址:https://www.cnblogs.com/once-again/p/9800745.html
Copyright © 2011-2022 走看看