Day14 python基础---内置函数2、匿名函数、递归函数初识

一,内置函数2

1.数据结构相关(24个)

#  list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素)
#  tuple:将一个可迭代对象转化成元祖(如果是字典,默认将key作为元祖的元素)
# str:将数据转化成字符串
#  reversed:将一个序列翻转,并返回此翻转序列的迭代器。  *****
#
l1 = [1,3,4,2,6]
s1 = 'abcdefg'
dic = {'name':'alex','age':1000,'hobby':'oldwomen'}   # 报错

print(reversed(l1))
for i in reversed(l1):
    print(i)
for i in reversed(s1):
    print(i)
for i in reversed(dic):
    print(i)
#  slice:构造一个切片对象,用于列表的切片。  ***
l1 = [i for i in range(10)]
l2 = l1[:5:2]
l3 = [i for i in range(10,20)]
sli_obj = slice(0,5,2)
print(l3[sli_obj])
l4 = ['a', 'b', 'c', 'd', 'e']
print(l4[sli_obj])
# format:与具体数据相关,用于计算各种小数,精算等。 **
print(format('test', '<20'))
print(format('test', '>20'))
print(format('test', '^20'))
#  bytes:unicode类型单方面转为bytes 类型  ****
a1 = '太白'
b1 = bytes(a1,encoding='utf-8')
print(b1)

#对比encode 和 decode
a1 = '太白'
print(a1.encode('utf-8'))
print(a1.encode('utf-8').decode())
#  bytearry:返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256。
 # [97,108,101,120]
ret = bytearray('alex',encoding='utf-8')
print(id(ret))
print(ret)        # bytearray(b'alex')  十进制utf-8码
print(ret[0])      # 97     通过切片得出单个字符的十进制utf-8码
ret[0] = 65       # 根据切片修改
print(ret)  # bytearray(b'Alex')
print(id(ret))     #修改后,内存地址不变
# memoryview
ret = memoryview(bytes('你好',encoding='utf-8'))
print(len(ret))  # 6     #[\xe4,\xbd,\xa0,\xe5,\xa5,\xbd]
print(ret)  # <memory at 0x000001D3D6FCD048> 
print(bytes(ret[:3]).decode('utf-8'))  #
print(bytes(ret[3:]).decode('utf-8'))  #
# ord:输入字符找该字符编码 unicode  的位置  **
print(ord('a'))
print(ord(''))

# chr:输入位置数字找出其对应的字符 unicode **
print(chr(97))
print(chr(20013))

# ascii:是ascii码中的返回该值,不是则返回他在unicode的位置(16进制。) **
print(ascii('a'))
print(ascii(''))   # '\u4e2d'
# repr:返回一个对象的string形式(原形毕露)。  *****
print('alex')
print(repr("ale,x"))
print(repr("{'alex':'sb'}"))

#repr应用1:
  json pickle序列化模块 特殊字符串,python字符串的区别

# repr应用2: 格式化输出 %r
msg = 'alex 是 %r的人' % ('德高望重')
print(msg)
#  sorted:对所有可迭代的对象进行排序操作。 *****
l1 = [2,3,5,3,1,9,8,6]
l1.sort()
print(l1)
print(sorted(l1))  # 形成了一个新列表:[1, 2, 3, 3, 5, 6, 8, 9]
print(l1)          # 原列表不变:[2, 3, 5, 3, 1, 9, 8, 6]

l2 = [(1,1000),(2,18),(4,250),(3,500)]
print(sorted(l2))  #按元素的第一个元素大小排序

def func1(x):
    return x[1]
print(sorted(l2,key=func1,reverse=True))  #按元祖的第二个元素大小排序
# enumerate:枚举,返回一个枚举对象。
print(enumerate([1,2,3]))
for i in enumerate([1,2,3]):
    print(i)
for i in enumerate([1,2,3],100):
    print(i)
#  all:可迭代对象中,全都是True才是True  ***  多做条件判断
print(all([1,'',[1,3],(2,4)]))
#  any:可迭代对象中,有一个True 就是True ***  多做条件判断
print(any([1,0,'',()]))
#  zip:函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。 *****
#  如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。
#  又称:拉链方法:将多个iter 纵向组成一个个元组,通俗的讲:就是以最短的可迭代对象为主,纵向按传入顺序组成一个元组。
l1 = [1, 2, 3, 4, 5, 6]
tu1 = ('alex', '太白', 'wusir', '女神')
dic = {'name': '日天', 'age': 28, 'hobby': 'tea', 'weight': 100,'face':'cool'}
print(zip(l1,tu1,dic))
print('__next__' in dir(zip))
for i in zip(l1, tu1, dic):
print(i)

#执行结果:

(1, 'alex', 'name')
(2, '太白', 'age')
(3, 'wusir', 'hobby')
(4, '女神', 'weight')

 
#  filter:过滤· 迭代器。 *****   筛选模式
l1 = [i for i in range(10)]
def func1(x):
    return x % 2 == 0
print(list(filter(func1,l1)))

# map:会根据提供的函数对指定序列做映射。***** 循环模式
l1 = [1,2,3,4]
def func(x): return x**2
print(list(map(func,l1)))

#对比:列表推导式
# print([i**2 for i in l1])

总结:

#常用且重要:
print sum reversed
# 参数含key的内置函数 :
min max map sorted filter zip

 

二,匿名函数  lambda表达式

#   普通函数,有且只有返回值的函数才可以用匿名函数进行简化,简化为一行函数
#   匿名函数,不单独使用,多与内置函数结合
#结构:
#函数名 = lambda 参数 : 返回值
#例:
    func2 = lambda x: x*2

    l2 = [(1,1000),(2,18),(4,250),(3,500)]
    print(sorted(l2,key=lambda x:x[1]))

  func = lambda x:x if x > 2 else x * 2  #匿名函数与三元表达式结合使用
#匿名函数与内置函数结合使用
#练习: #利用内置函数匿名函数将dic={'k1':10,'k2':100,'k3':30}按照值进行排序。 #print(sorted(dic,key=lambda x:dic[x])) print(sorted(dic.items(),key=lambda x:x[1])) # 利用内置函数匿名函数 计算列表[1,5,7,4,8]的每个数的2倍。 print(list(map(lambda x:x*2,[1,5,7,4,8]))) # 利用内置函数匿名函数,[5,8,11,9,15]将值大于10的留下来。 print(list(filter(lambda x: x>10,[5,8,11,9,15])))

 

三,递归函数初识

    递归函数概念:在一个函数里再调用这个函数本身。

 递归最大深度:998

#递归深度验证:
n = 0
def func(x):
    x += 1
    print('第%d次'% x)
    func(x)
func(n)

   修改递归深度:

#修改递归深度为100000(实际上只能到达3222左右,与性能关系较大)
import sys
print(sys.setrecursionlimit(100000))

  递归函数示例:

def age(n):
    if n == 1:
        return 40
    else:
        return age(n-1)+2

print(age(4))


#age(4) = age(3) + 2 
#age(3) = age(2) + 2
#age(2) = age(1) + 2
#age(1) = 40

 

转载于:https://www.cnblogs.com/lianyeah/p/9518333.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值