python之内置函数(二)与匿名函数、递归函数初识
一、内置函数(二)
1、和数据结构相关(24)
列表和元祖(2)
list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素)。
tuple:将一个可迭代对象转化成元组(如果是字典,默认将key作为元组的元素)
2、相关内置函数(2)
reversed:将一个序列翻转,并返回此翻转序列的迭代器。 *****
slice:构造一个切片模板,用于列表的切片。***
2-1、reversed()与列表的reverse()区分:
列表的reverse()只能列表使用:列表.reverse(),对原列表进行翻转,结果返回的还是列表。
内置函数reversed(),将一个序列翻转,结果是返回一个迭代器。
列表的reverse()
l1 = [1,3,4,2,6]
l1.reverse() #将列表进行翻转
print(l1) #返回修改后的列表[6, 2, 4, 3, 1]
内置函数reversed()
reversed(l1) #生成一个迭代器
print(reversed(l1)) #一个地址
for i in reversed(l1):
print(i)
# 结果:
# 用for循环输出迭代器的值
# 6 2 4 3 1 # 字符串使用reversed()
s1 = 'abcdefg'
for i in reversed(s1):
print(i)
结果:
g f e d c b a # 字典使用reversed() 报错
dic = {'name':'xiaoming','age':1000,'hobby':'oldwomen'} # 不行
2-2、slice:构造一个切片模板,用于列表的切片。 ***
l3 = [1,2,3,4,5,6,7,8,9,10]
sli_obj = slice(0,5,2) #制作切片模板,索引从0到4,间隔取值
print(l3[sli_obj]) # [1 3 5]
l4 = ['a', 'b', 'c', 'd', 'e']
print(l4[sli_obj]) # ['a', 'c', 'e']
3、字符串相关(9)
3-1、str:将数据转化成字符串。
3-2、format:与具体数据相关,用于计算各种小数,精算等。 **
平常使用format情况较少,下面这种形式已经是最多的了,剩下的科学运算,需要用到的可自行研究。
字符串可以提供的参数,指定对齐方式,<是左对齐, >是右对齐,^是居中对齐
print(format('test', '<20')) # 左对齐 (20是长度)
print(format('test', '>20')) # 右对齐
print(format('test', '^20')) # 居中对齐
3-3、bytes:unicode ---> bytes类型(单向的编码) ****
# 编码encode():
s1 = '小明'
b1 = s1.encode('utf-8')
print(b1) # b'\xe5\xb0\x8f\xe6\x98\x8e' # 解码decode():
s2 = b1.decode('utf-8')
print(s2) # 小明 # 用bytes()方法编码(单向)
a1 = '小白'
b1 = bytes(a1,encoding='utf-8')
print(b1) # b'\xe5\xb0\x8f\xe7\x99\xbd' # 不能用bytes()方法解码
a2 = bytes(b1,encoding='utf-8')
print(a2) # 报错 # 只能用decode()解码
a2 = b1.decode('utf-8')
print(a2) #小白
3-4、bytearry:返回一个字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。
(bytearray其实也是一种编码的方法,不过bytearray可对编码后的字节进行修改,即对原数据进行修改)
例如:字符串 小明
b1 = bytearray('小明',encoding='utf-8') #对小明进行编码,生成一串字节码(utf-8一个中文代表三个字节)
print(b1) # bytearray(b'\xe5\xb0\x8f\xe6\x98\x8e')
print(b1[0]) # 229
b1[0] = 65 #对前三个字节进行修改(即修改中文'小')
b1[1] = 97
b1[2] = 104
print(b1) # bytearray(b'Aah\xe6\x98\x8e')
print(b1.decode('utf-8')) # 解码出来:Aah明
例如:字符串 hot
ret = bytearray('hot',encoding='utf-8')
print(id(ret)) # 2997820203056
print(ret) # bytearray(b'hot')
print(ret[0]) # h的ASCII:104
ret[0] = 65 # 把索引0的ASCII值改为65(A)
print(ret) # bytearray(b'Aot') hot索引0就改成了A
print(id(ret)) # 2997820203056 内存地址不变
3-5、memoryview
ret = memoryview(bytes('你好',encoding='utf-8'))
print(len(ret)) # 6
print(ret) # <memory at 0x000001D3D6FCD048> # [\xe4,\xbd,\xa0,\xe5,\xa5,\xbd]
print(bytes(ret[:3]).decode('utf-8')) # 你
print(bytes(ret[3:]).decode('utf-8')) # 好
3-6、ord:输入字符找该字符unicode编码的位置 **
print(ord('a')) # 97
print(ord('中')) # 20013
3-7、chr:输入位置数字找出其对应的unicode编码的字符 **
print(chr(97)) # a
print(chr(20013)) # 中
3-8、ascii:在ascii码中的就返回该值,不是则返回它在unicode的位置(16进制。) **
print(ascii('a')) # 'a'
print(ascii('中')) # '\u4e2d'
3-9、repr:返回一个对象的string形式(原形毕露) *****
print(repr('{"name":"xiaoming"}')) #'{"name":"xiaoming"}'
print('{"name":"xiaoming"}') # {"name":"xiaoming"} 格式化输出%r--->原封不动的写出来(基础数据类型都可接收)
字符串单双引号都默认是单引号
msg = 'xiaoming是%r的人' % ('德高望重')
print(msg) # xiaoming是'德高望重'的人 msg = 'xiaoming是%r的人' % ("德高望重")
print(msg) # xiaoming是'德高望重'的人 msg = 'xiaoming是%r的人' %(18)
print(msg) # xiaoming是18的人 msg = 'xiaoming是%r的人' %(True)
print(msg) # xiaoming是True的人 msg = 'xiaoming是%r的人' %({'name':'xiaming','age':18})
print(msg) # xiaoming是{'name': 'xiaming', 'age': 18}的人 repr():可用于判断json pickle序列化模块 特殊字符串,python字符串的区别
4、数据集合(3)
4-1、dict:创建一个字典。
4-2、set:创建一个集合。
4-3、frozenset:返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。
5、相关内置函数(8)
5-1、len:返回一个对象中元素的个数。
5-2、sorted:对所有可迭代的对象进行排序操作。 *****
与列表的sort区分:
列表的sort方法是对原列表进行排序修改,并没有生成新的列表
内置函数sorted方法会形成一个新列表
l1 = [2,3,5,3,1,9,8,6]
l1.sort()
print(l1) print(sorted(l1)) # 形成了一个新列表
print(l1) # 原列表不变 内置函数sorted还可以与函数结合使用
l2 = [(1,1000),(2,18),(4,250),(3,500)] def func1(x):
return x[1] print(sorted(l2,key=func1))
#按第二个元素升序排序 [(2, 18), (4, 250), (3, 500), (1, 1000)] print(sorted(l2,key=func1,reverse=True))
#按第二个元素降序排序 [(1, 1000), (3, 500), (4, 250), (2, 18)]
5-3、enumerate:枚举,返回一个枚举对象。****
返回的每个元素是元组,元组第一个元素是索引(默认从0开始)
第二个元素是可迭代对象的每个元素。
for i in enumerate([1,2,3]):
print(i)
结果:
(0, 1)
(1, 2)
(2, 3)
for i in enumerate([1,2,3],100): # 修改索引,把索引设置成从100开始
print(i)
结果:
(100, 1)
(101, 2)
(102, 3)
for i,j in enumerate([1,2,3],100):
print(i,j)
结果:
100 1
101 2
102 3
5-4、all:可迭代对象中,全都是True才是True *** 多做条件判断
l1 = [1,'',[1,3],(2,4)]
print(all(l1)) #False 有一个元素是空
5-5、any:可迭代对象中,有一个True就是True *** 多做条件判断
l2 = [1,0,'',()]
print(any(l2)) #True
5-6、拉链方法:zip() 将多个iter纵向组成元素为元组的迭代器,以长度最小的iterable为标准长度 *****
l1 = [1,2,3,4]
tu1 = ('a','b','c')
dic = {'name':'xiaoming','age':18,'hobby':'girl','hometown':'guangzhou'} zip(l1,tu1,dic) #迭代器(生成器对象) print(zip(l1,tu1,dic)) #迭代器地址:<zip object at 0x000002C878E6A6C8> for i in zip(l1,tu1,dic):
print(i) #循环输出迭代器的内容:
(1, 'a', 'name')
(2, 'b', 'age')
(3, 'c', 'hobby')
5-7、filter:过滤,通过你的函数,过滤一个可迭代对象(类似于生成器表达式的筛选模式) 生成一个迭代器。 *****
l1 = [1,2,3,4,5,6]
def fun(x):
return x % 2 == 0 #筛选出偶数
g = filter(fun,l1) # filter(fun,l1)生成的是一个迭代器
print(g)
for i in g:
print(i)
结果:
2 4 6 l2 = [(2,1),(3,4),(4,5)]
def fun2(x):
return x[1] % 2 == 1 #筛选出第二个元素为奇数的元组
g = filter(fun2,l2)
for i in g:
print(i)
结果:
(2, 1)
(4, 5)
5-8、map:会根据提供的函数对指定序列做映射。(循环修改并返回) 生成一个迭代器*****
l1 = [1,2,3,4,5,6]
def fun(x):
return x**2 #返回每个元素的平方
g = map(fun,l1)
for i in g:
print(i)
结果:1 4 9 16 25 36
(min max filter返回的都是遍历的参数,map返回的是return的值)
二、匿名函数
有且只有返回值的函数才可以用匿名函数进行简化,一行函数,多与内置函数结合使用。
1、匿名函数表达式:
函数名 = lambda 参数 :返回值
参数可以有多个,用逗号隔开
匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
返回值和正常的函数一样可以是任意数据类型
2、
def func2(x):
return x**2
上面函数就有且只有返回值,所以可以写成匿名函数:
func2 = lambda x: x*2 #func2是函数名,func2(参数)才是调用
print(func2(6)) #调用并打印结果
3、匿名函数 不单独使用,多与内置函数结合。
l2 = [(1,1000),(2,18),(4,250),(3,500)]
print(sorted(l2,key=lambda x:x[1]))
4、例子
1,利用内置函数匿名函数将dic按照值进行排序。
dic={'k1':10,'k2':100,'k3':30}
print(sorted(dic.items(),key=lambda x:x[1])) 2,利用内置函数匿名函数 计算列表的每个数的2倍。
l1 = [1,5,7,4,8]
print(list(map(lambda x:x*2,l1))) 3,利用内置函数匿名函数,将值大于10的留下来
l2 = [5,8,11,9,15]
print(list(filter(lambda x:x > 10,l2))) 4,匿名函数可与三元运算结合
func = lambda x:x if x > 2 else x * 2
三、递归函数(自己调用自己)
1、人理解函数,神理解递归。
def func():
print(666)
func()
func()
结果:输出一段时间后会报错,因为
默认递归深度为998次,(官方给出的默认深度是1000,但实际上只有998次左右)
超过了就会报错
2、引用模块修改递归次数
import sys
sys.setrecursionlimit(100000)
n = 1
def func(x):
print(x)
x += 1
func(x)
func(n)
结果:3222
虽然设置了100000次,但是电脑跑不起呀,
一般电脑就跑3222次左右,这个会根据电脑性能而定。
3、
小明比小白大两岁 n = 4
小白比小狗大两岁 n= 3
小狗比小红大两岁 n = 2
小红24岁 n = 1
小明多少岁?
def age(n):
if n == 1:
return 24
else:
return age(n-1) + 2
age(4) # 30
详解:
age(4)传进参数n=4:
def age(4):
if n == 1:
return 24
else:
return age(4-1) + 2
结果:age(3)+2
def age(3):
if n == 1:
return 24
else:
return age(3-1) + 2
结果:age(2)+2+2
def age(2):
if n == 1:
return 24
else:
return age(2-1) + 2
结果:age(1)+2+2+2
def age(1):
if n == 1:
return 24
else:
return age(n-1) + 2
结果:age(1)+2+2+2 ---> 24+2+2+2--->30
python之内置函数(二)与匿名函数、递归函数初识的更多相关文章
- python函数知识六 内置函数二、匿名函数与内置函数三(重要)
19.内置函数二 abs():绝对值 lst = [1,2,-3,1,2,-5] print([abs(i) for i in lst]) enumerate("可迭代对象",&q ...
- day13 内置函数二 递归,匿名函数,二分法
.匿名函数(名字统一叫lambda) .语法 lambda 参数:返回值 .参数可以有多个,用逗号隔开 .只能写一行,执行结束后直接返回值 4返回值和正常函数一样,可以是任意值 .列: f=lambd ...
- python之内置函数,匿名函数,递归函数
一. 内置函函数 什么是内置函数?就是Python给你提供的,拿来直接用的函数,比如print,input等等.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就 ...
- 《Python》 内置函数补充、匿名函数、递归初识
一.内置函数补充: 1.数据结构相关(24): 列表和元祖(2):list.tuple list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素). tuple:将一个可迭代对象转 ...
- python学习-day16:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r
一.作用域 作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变 二.匿名函数 lambda:正常和其他函数进行配合使用.正常无需把匿名函数赋值给一个变量. f=lambda x:x*x p ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- 内置函数filter()和匿名函数lambda解析
一.内置函数filter filter()函数是 Python 内置的一个高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回由符合条件迭代器 ...
- day16_函数作用域_匿名函数_函数式编程_map_reduce_filter_(部分)内置函数
20180729 补充部分代码 20180727 上传代码 #!/usr/bin/env python # -*- coding:utf-8 -*- # ***************** ...
- JavaScript 闭包系列二(匿名函数及函数的闭包)
一. 匿名函数 1. 函数的定义,可分为三种 1) 函数声明方式 function double(x) { return 2*x; } 2)Function构造函数,把参数列表和函数体都作为字 ...
随机推荐
- angularjs+webapi2 跨域Basic 认证授权(二)
在上一篇中大概演示了 整个认证授权的过程.今天在这篇博客中将结合上一篇的例子继续在跨域的情况 我们用ionic 写一个简单的页面 值得注意的是 在ionic.bundle.js 里面集成了angula ...
- Web前端:博客美化:三、右上角的Github Ribbon
1.保存图片到博客园相册 2.复制代码到可以放html代码的地方 我因为数量问题把这段sei到了 页首Html代码 <a href="https://github.com/zhengw ...
- ArcGIS API for JavaScript:Layer之间那点儿事
先来看一个模型: |–TiledMapServiceLayer | |–ArcGISTiledMapServiceLayer |–DynamicLayer | |–Dyn ...
- android java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout
造成这个问题的原因是在xml文件中出现了重复依赖,何为重复依赖,如下: 以上便叫重复依赖 转载请标明出处:http://www.cnblogs.com/tangZH/p/8386978.html
- Android远程桌面助手之系统兼容篇
Android远程桌面助手理论上兼容Android4.4至Android8.1之间所有的原生安卓系统,其他第三方ROM,如MIUI.Flyme.EMUI和Smartisan OS等也都陆续测试过,目前 ...
- js 条件判断
练习 小明身高1.75,体重80.5kg.请根据BMI公式(体重除以身高的平方)帮小明计算他的BMI指数,并根据BMI指数: 低于18.5:过轻 18.5-25:正常 25-28:过重 28-32:肥 ...
- spring基本知识
什么是spring: spring就是以IOC反转控制和AOP面向切面编程为内核,使用基本的JavaBean来完成以前由EJB完成的工作. spring框架的优点: (1)方便耦合,简化开发:spri ...
- Zookeeper与Kafka基础概念和原理
1.zookeeper概念介绍 在介绍ZooKeeper之前,先来介绍一下分布式协调技术,所谓分布式协调技术主要是用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种共享资源,防止造成 ...
- IO多路复用三种方式select/poll/epoll
select多并发socket例子: #_*_coding:utf-8_*_ __author__ = 'Alex Li' import select import socket import sys ...
- 应用 memcached 提升站点性能
减少读自数据库和数据源 开源 memcached 工具是一个用来存储常用信息的缓存,有了它,您便无需从缓慢的资源,比如磁盘或数据库,加载(并处理)信息了.该工具可部署在专用的情况下,也可作为用完现有环 ...