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)
python基础之内置函数补充、匿名函数、递归函数的更多相关文章
- python基础之内置函数和匿名函数
内置函数 学习函数以后多了很多概念,例如函数的命名空间,函数的作用域,函数的调用等等,函数的作用就是为了实现某些功能而方便以后可以调用,内置函数就是这样的一些公共的函数,被称为内置函数. 我们就一 ...
- Python基础之内置函数和递归
一.内置函数 下面简单介绍几个: 1.abs() 求绝对值 2.all() 如果 iterable 的所有元素都为真(或者如果可迭代为空),则返回 True 3.any() 如果 iterable 的 ...
- python基础之函数式编程、匿名函数、内置函数
一 函数式编程 不修改外部状态. 模仿数学里得函数进行编程. 用函数编程写出得代码相当精简. 可读性比较差. 例子: y=2*x+1 x=1 def test(x): return 2*x+1 tes ...
- python基础之内置函数
该博客内容参考http://www.cnblogs.com/wupeiqi/articles/4943406.html 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经 ...
- Python 内置函数补充匿名函数
Python3 匿名函数 定义一个函数与变量的定义非常相似,对于有名函数,必须通过变量名访问 def func(x,y,z=1): return x+y+z print(func(1,2,3)) 匿名 ...
- Python基础之内置函数(二)
先上一张图,python中内置函数: python官方解释在这:点我点我 继续聊内置函数: callable(object):检查对象是否可被调用,或是否可执行,结果为bool值 def f1(): ...
- python基础之内置函数(一)
内建函数都在 _builtins_ 里面 (1)abs() 取绝对值 adb(-10) 10 (2)bool()将参数转换成布尔型,返回值是True或False 参数是数字时,0返回False,其他任 ...
- Python基础-列表推导式、匿名函数、os/sys/time/datetime/pymysql/xlwt/hashlib模块
列表推导式 [表达式 for 变量 in range(n) if 条件] 等效于 for 变量 in in range(n): if 条件: 表达式 优点:书写方便,缺点:不易读 注意:用的是方括号 ...
- Python3 内置函数补充匿名函数
Python3 匿名函数 定义一个函数与变量的定义非常相似,对于有名函数,必须通过变量名访问 def func(x,y,z=1): return x+y+z print(func(1,2,3)) 匿名 ...
随机推荐
- windows10家庭中文版升级专业版或企业版简单方便的操作方法
以管理员的身份运行cmd 1 ,升级到专业版输入:slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX 输入slmgr.vbs -skms zh.us.to 激活 2, 升 ...
- CentOS 7.0 各版本下载说明 新增Everything版
CentOS-7.0-1406有很多可供选择的版本,对初学者来说,不知如何选择,下面做简单的介绍: CentOS-7.0-1406-x86_64-DVD.iso 标准安装版,一般下载这个就可以了 Ce ...
- 简单粗暴的更换固态硬盘及WIN10 Ubuntu双系统
简介:本文希望帮助如本人一样的计算机小白,能够以最快的速度更换固态硬盘及安装系统. 1.提前将准备空白U盘(至少8G),利用UltraISO工具,或者软媒魔方,制作U盘启动盘. PS:需提前下载好WI ...
- 如何利用BAPI SD_SALESDOCUMENT_CHANGE修改Sales Order的字段
假设我想修改S/4HANA里Sales Order抬头的Service Date字段SERV_DATE: 首先从数据库表VBKD里查找到SERV_DATE修改之前的值为2020年1月1日 使用如下代码 ...
- RPC电源监控总结
首先说一下监控机箱的监控原理. 设备的信息传输是通过tcp或者udp传输十六进制的数然后进行解析,传输数据. 如图: 设备反馈信息也是返回来的十六机制,然后按照对应的位置进将数据解析成二进制,用二进制 ...
- 【转载】#349 - The Difference Between Virtual and Non-Virtual Methods
In C#, virtual methods support polymorphism, by using a combination of the virtual and override keyw ...
- IOS 拉伸图片(封装)
/** * 根据图片名返回一张能够自由拉伸的图片 */ +(UIImage *)resizedImage:(NSString *)name { UIImage *image=[UIImage imag ...
- selenium 打开浏览器报错java.lang.NoSuchMethodError: org.openqa.selenium.chrome.ChromeOptions.addArguments([Ljava/lang/String;)
java.lang.NoSuchMethodError: org.openqa.selenium.chrome.ChromeOptions.addArguments([Ljava/lang/Strin ...
- 数长方形有多少个?POJ(1693)
题目链接:http://poj.org/problem?id=1693 解题报告: 随机选两根横的,再找一下与这两根横线相交的竖线有多少根,m,那么就有(m-1)*m/2个长方形. #include ...
- 2017.10.24 Java 详解 JVM 工作原理和流程
JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界 ...