zoukankan      html  css  js  c++  java
  • python基础之内置函数补充、匿名函数、递归函数

    内置函数补充

    python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b)

    语法:

    1 divmod(a, b)  #a、b为数字,a为除数,b为被除数

    示例:

    1 >>> divmod(7, 2)
    2 (3, 1)  #3为商,1为余数
    3 >>> divmod(7, 2.5)
    4 (2.0, 2.0)

    应用:web前端页数计算

    1 total_count=73
    2 per_count=23
    3 res=divmod(total_count,per_count)
    4 if res[1] > 0:
    5     page_count=res[0]+1
    6 print(page_count)

    enumerate()函数:用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

    语法:

    1 enumerate(sequence, [start=0])    
    2 # sequence -- 一个序列、迭代器或其他支持迭代对象
    3 # start -- 下标起始位置

    示例:

    1 l=['a','b','c']
    2 for i in enumerate(l):
    3     print(i)
    4 输出结果:
    5 (0, 'a')
    6 (1, 'b')
    7 (2, 'c')

    frozenset()函数:返回一个冻结的集合,冻结后集合不能再添加或删除任何元素

    语法:

    1 frozenset([iterable]) #iterable为可迭代对象

    示例:

    1 >>> dir(set)    #包含add、clear、pop、remove等修改方法
    2 ['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
    3 >>> dir(frozenset)  #冻结并不包含任何可修改方法
    4 ['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'copy', 'difference', 'intersection', 'isdisjoint', 'issubset', 'issuperset', 'symmetric_difference', 'union']
    5 
    6 s=frozenset({1,2,3})

    globals()函数:以字典类型返回当前位置的全部全局变量,对应的为locals()返回当前位置的局部变量

    语法:

    1 globals()

    示例:

    1 >>> globals()
    2 {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
    3 >>> locals()
    4 {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}

    hash()函数:用于获取取一个对象(字符串或者数值等)的哈希值

    语法:

    1 hash(object)  #对象可以是数字、字符串、元组等不可变类型

    示例:

    1 >>> hash('test')
    2 -2819287477203653805
    3 >>> hash((1,2,3))
    4 2528502973977326415

    isinstance()函数:来判断一个对象是否是一个已知的类型,类似 type()

    语法:

    1 isinstance(object, classinfo)
    2 #object -- 实例对象。
    3 #classinfo -- 可以是直接或间接类名、基本类型或者有它们组成的元组。

    示例:

    1 >>> isinstance(1,int)
    2 True
    3 >>> isinstance(1,(int,float,list))    #类型可以用一个元组包含多个,只要有一个匹配上就返回True
    4 True

    iter()函数:用来生成迭代器

    语法:

    1 iter(object[, sentinel]) 
    2 # object -- 支持迭代的集合对象
    3 # sentinel -- 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object

    示例:

    1 for i in iter([1,2,3]): #[1,2,3].__iter__()
    2     print(i)
    3 输出结果:
    4 1
    5 2
    6 3

    pow()函数:返回 xy(x的y次方)的值

    语法:

    1 pow(x, y[, z])
    2 #函数是计算x的y次方,如果z在存在,则再对结果进行取模,其结果等效于pow(x,y) %z

    示例:

    1 >>> pow(5,2,2)  #计算5的2次方的2的余数
    2 1

    range()函数:可创建一个整数列表,一般用在 for 循环中

    语法:

    1 range(start, stop[, step]) 
    2 #start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
    3 #end: 计数到 end 结束,但不包括 end。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
    4 #step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

    示例:

    1 for i in range(0,5,2):     #0  2  4
    2     print(i)
    3 for i in range(5,0,-1):    #反向取
    4     print(i)

    reverse()函数:用于反向列表中元素

    语法:

    1 list.reverse()

    示例:

    1 >>> l1=[3,5,1,2]
    2 >>> list(reversed(l1))
    3 [2, 1, 5, 3]
    4 >>> reversed(l1)    #本身是个迭代器
    5 <list_reverseiterator object at 0x0000023CA11E3D30>

    round()函数:返回浮点数的四舍五入值

    语法:

    1 round( x [, n] )    #x为浮点数,n为四舍五入位数

    示例:

    1 >>> round(80.23456, 2)
    2 80.23
    3 >>> round(100.0010056, 3)
    4 100.001
    5 >>> round(-100.0030056, 3)
    6 -100.003

    slice()函数:返回一个切片对象,主要用在切片操作函数里的参数传递

    语法:

    1 slice(start, stop[, step])
    2 #start -- 起始位置
    3 #stop -- 结束位置
    4 #step -- 间距,步长

    示例:

    1 >>> l=['a1','a2','a3','a4','a5','a6','a7','a8','a9']
    2 >>> l[2:5:2]
    3 ['a3', 'a5']
    4 >>> x=slice(2,5,2)
    5 >>> l[x]
    6 ['a3', 'a5']

    sorted()函数:对所有可迭代的对象进行排序操作,产生一个新的对象,不对原对象生效

    语法:

    1 sorted(iterable[, cmp[, key[, reverse]]])
    2 #iterable -- 可迭代对象。
    3 #cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
    4 #key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    5 #reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

    示例:

    1 >>> l=[1,2,4,9,-1]
    2 >>> sorted(l)  #从小到大
    3 [-1, 1, 2, 4, 9]
    4 >>> sorted(l,reverse=True)  #从大到小
    5 [9, 4, 2, 1, -1]

    sum()函数:对系列进行求和计算

    语法:

    1 sum(iterable[, start])
    2 #iterable -- 可迭代对象,如列表。
    3 #start -- 指定相加的参数,如果没有设置这个值,默认为0。

    示例:

    1 >>> sum([0,1,2])
    2 3
    3 >>> sum((2, 3, 4), 1)        # 元组计算总和后再加 1
    4 10
    5 >>> sum([0,1,2,3,4], 2)      # 列表计算总和后再加 2
    6 12

    zip()函数:用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

    如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表

    语法:

    1 zip([iterable, ...])    #一个或多个迭代器,zip函数返回的是一个迭代器

    示例1:

    1 s='hello'
    2 l=[1,2,3]
    3 for i in zip(s,l):
    4     print(i)
    5 输出结果:
    6 ('h', 1)
    7 ('e', 2)
    8 ('l', 3)

    示例2:

    1 s='hello'
    2 l=[1,2,3]
    3 zipped = zip(s,l,)     # 打包为元组的列表
    4 for x in zip(*zipped):  # 与 zip 相反,可理解为解压,返回二维矩阵式
    5     print(x)

    匿名函数

    匿名函数,即没有名字的函数。

    有名函数使用def定义,通过函数名字调用,匿名函数是用lambda定义,直接调用或者人为指定一个函数名字定义。

    比如定义函数,返回一个值的平方,有名函数定义如下:

    1 def func1(x):
    2     return x**2
    3 print(func1(5))

    匿名函数定义:

    1 func=lambda x:x**2   #x为函数接收的值,x**2相当于有名函数的return x**2
    2 print(func(5))

    其他示例:

    1 f1=lambda x,y:x+y  
    2 print(f1(1,2))  #返回值为3
    3 #
    4 f2=lambda x:x>1
    5 print(f2(3))  #返回值为True

    匿名函数如果不人为指定一个名字,那么在定义完了之后就会在内存中删除,所以匿名函数一般只会使用一次,主要应用在内置函数max、min、map、reduce和filter中。

    max()函数:返回给定参数的最大值,参数可以为序列,max类似于for循环,一个个遍历

    语法:

    1 max( x, y, z, .... [key] )  #key为比较的值类型,是一个函数

    示例:

    >>> max(-20, 100, 400)
    400
    >>> max(-80, -20, -10)
    -10
    >>> max(0, 100, -400)
    100
    >>> max('abc','bcd','aaa')  #字符串比较大小是根据字母顺序,越靠后越大。先比较第一个字符,如果第一个字符一样,比较第二个,依次
    'bcd'

    结合匿名函数应用:

     1 #普通方法:输出工资最高的人的名字
     2 salaries={
     3     'egon':3000,
     4     'alex':100000000,
     5     'wupeiqi':10000,
     6     'yuanhao':2000
     7 }
     8 
     9 print(max(salaries))    #比较的是名字字符串的大小,输出的是名字
    10 print(max(salaries.values()))    #比较的是工资大小,输出的是工资数
    11 res=zip(salaries.values(),salaries.keys())    #拉链函数将key和value做成元组
    12 print(max(res)[1])    #比较元组的0索引位置,输出索引位置1的值
    13 输出结果:
    14 yuanhao
    15 100000000
    16 alex
    17 
    18 #===========分割线君============
    19 #结合lambda应用:输出工资最高的人的名字
    20 salaries={
    21     'egon':3000,
    22     'alex':100000000,
    23     'wupeiqi':10000,
    24     'yuanhao':2000
    25 }
    26 #def func(x):  #定义函数,输出一个key的value值
    27 #   return salaries[x]
    28 print(max(salaries,key=lambda x:salaries[x]))  #key是指定一个函数作为比较对象,默认比较的是字典key的大小,通过lambda的返回值,变成了对应value的比较

    min()函数:返回给定参数的最小值,参数可以为序列,类似于max的使用方法

    语法:

    示例:

    map()函数:会根据提供的函数对指定序列做映射

    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

    语法:

    1 map(function, iterable)
    2 #function -- 函数
    3 #iterable -- 一个或多个序列

    示例1:

    1 l=[1,2,3,4]
    2 m=map(lambda x:x**2,l)
    3 print(list(m))
    4 输出结果
    5 [1, 4, 9, 16]

    示例2:

    names=['bob','natasha','lisa']
    print(list(map(lambda item:item+'_sb',names)))
    输出结果
    ['bob_sb', 'natasha_sb', 'lisa_sb']

    reduce()函数:对参数序列中元素进行合并。

    函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

    语法:

    1 reduce(function, iterable[, initializer])  
    2 #function -- 函数
    3 #iterable -- 可迭代对象
    4 #initializer -- 可选,初始参数

    示例:

     1 #普通方法实现0-100(不包括100)的和
     2 res=0
     3 for i in range(100):
     4     res+=i
     5 print(res)
     6 
     7 #==============分割线君=============
     8 from functools import reduce
     9 #reduce方法实现0-100的和,加了默认值
    10 print(reduce(lambda x,y:x+y,range(100),100))

    filter()函数:用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

    语法:

    1 filter(function, iterable)
    2 #function -- 判断函数。
    3 #iterable -- 可迭代对象

    示例:

    1 names=['bob_sb','natasha_sb','lisa_sb','egon']
    2 print(list(filter(lambda name:name.endswith('_sb'),names)))  #筛选出_sb结尾的元素
    3 输出结果
    4 ['bob_sb', 'natasha_sb', 'lisa_sb']

    递归函数

    递归调用:在调用一个函数的过程中,直接或者间接调用了该函数本身

    直接调用:

    1 def func():
    2     print('====>func')
    3     func()
    4 func()
    5 #会陷入死循环报错,默认递归层级限制,可改

    间接调用:

    1 def foo():
    2     print('from foo')
    3     bar()
    4 def bar():
    5     print('from bar')
    6     foo()
    7 foo()
    8 #会陷入死循环报错,默认递归层级限制,可改

     示例1:计算年龄

    1 def age(n):
    2     if n == 5:
    3         return 18
    4     return age(n+1)+2
    5 print(age(1))

    递归函数有两个过程:递推和回溯

    递推的过程中需要有一个中断点,即示例1中的if判断,如果没有中断点,将陷入死循环,导致内存溢出

    回溯即从断点处返回求值

    示例2:

    1 l=[1,[2,3,[4,5,[6,7,[8,9,[10,11,[12,13]]]]]]]
    2 def func(l):
    3     for i in l:
    4         if isinstance(i,list):
    5             func(i)
    6         else:
    7             print(i)
    8 func(l)
  • 相关阅读:
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 特等奖学金(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 GPA(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    Java实现 蓝桥杯 算法提高 套正方形(暴力)
    第一届云原生应用大赛火热报名中! helm install “一键安装”应用触手可及!
    云原生时代,2个方案轻松加速百万级镜像
    Knative 基本功能深入剖析:Knative Serving 自动扩缩容 Autoscaler
  • 原文地址:https://www.cnblogs.com/lidagen/p/7060132.html
Copyright © 2011-2022 走看看