博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python基础之内置函数补充、匿名函数、递归函数
阅读量:5025 次
发布时间:2019-06-12

本文共 8603 字,大约阅读时间需要 28 分钟。

内置函数补充

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=732 per_count=233 res=divmod(total_count,per_count)4 if res[1] > 0:5     page_count=res[0]+16 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__': 
, '__spec__': None, '__annotations__': {}, '__builtins__':
}3 >>> locals()4 {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__':
, '__spec__': None, '__annotations__': {}, '__builtins__':
}

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

语法:

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

示例:

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

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

语法:

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

示例:

1 >>> isinstance(1,int)2 True3 >>> isinstance(1,(int,float,list))    #类型可以用一个元组包含多个,只要有一个匹配上就返回True4 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 15 26 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]没有54 #step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

示例:

1 for i in range(0,5,2):     #0  2  42     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 

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

语法:

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

示例:

1 >>> round(80.23456, 2)2 80.233 >>> round(100.0010056, 3)4 100.0015 >>> 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 33 >>> sum((2, 3, 4), 1)        # 元组计算总和后再加 14 105 >>> sum([0,1,2,3,4], 2)      # 列表计算总和后再加 26 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**23 print(func1(5))

匿名函数定义:

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

其他示例:

1 f1=lambda x,y:x+y  2 print(f1(1,2))  #返回值为33 #4 f2=lambda x:x>15 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 yuanhao15 10000000016 alex17 18 #===========分割线君============19 #结合lambda应用:输出工资最高的人的名字20 salaries={21     'egon':3000,22     'alex':100000000,23     'wupeiqi':10000,24     'yuanhao':200025 }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 184     return age(n+1)+25 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)

转载于:https://www.cnblogs.com/lidagen/p/7060132.html

你可能感兴趣的文章
iOS RunLoop简介
查看>>
C++的引用
查看>>
T-SQL查询进阶--深入浅出视图
查看>>
MapKeyboard 键盘按键映射 机械革命S1 Pro-02
查看>>
Android读取url图片保存及文件读取
查看>>
完整ASP.Net Excel导入
查看>>
判断CPU大小端示例代码
查看>>
ARTS打卡第13周
查看>>
循环队列的运用---求K阶斐波那契序列
查看>>
pta 编程题14 Huffman Codes
查看>>
初始化bootstrap treeview树节点
查看>>
python selenium向<sapn>标签中写入内容
查看>>
JS常用坐标
查看>>
使用”结构化的思考方式“来编码和使用”流程化的思考方式“来编码,孰优孰劣?...
查看>>
C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】...
查看>>
关于git的认证方式
查看>>
字符串按照字典序排列
查看>>
IOS 开发调用打电话,发短信
查看>>
CI 框架中的日志处理 以及 404异常处理
查看>>
keepalived介绍
查看>>