Python的一些高级特性,有一些在其他语言中出现,有一些没有,明确共同点,找出差异,进而更加熟练掌握各种特性
Python的特性
迭代器:
迭代器协议:
在Python中文件可以使用for循环进行遍历
原因:文件对象在Python中实现了迭代器协议,标志 next方法
生成器
生成器对延迟操作提供了支持
Python提供了几种不同的方式构建生成器
01、生成器函数 yield
和常规函数类似,返回值通过yield,而不是return
02、生成器表达式
03.enumerate
装饰器decorator
上下文管理器
上下文管理器
with 语句块 + 上下文管理器
对象实现__enter__ 和 __exit__方法 或者contextlib模块
对资源的处理:Python中可使用finally语句保证无论什么情况下文件都会被关闭--with语句也可以
确保加锁以后锁的释放 try/finally 语句
递归
--递归就是函数调用自身
重点:
重点一:递归步骤 --分解问题并重组问题
如何分解成小的部分-每部分都是用函数来解决,然后重新组合
重点二:包含递归的结束条件
递归触底 即递归必须有基础情况,且出现在函数的第一步
说明:
Python maximum recursion depth exceeded
python解释器有一个默认的最大递归次数是999
同时,操作系统也有一个最大迭代次数
# -*- coding:utf8 -*-
# !/usr/bin/python
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
def fibon(n):
if n == 0 or n == 1:
return 1
else:
return fibon(n-1) + fibon(n-2)
if __name__ == '__main__':
data1 = factorial(23)
data2 = fibon(9)
print(data1)
print(data2)
高阶函数和匿名函数
高阶函数
map filter sorted
reduce
匿名函数 lambda 表达
Python反转字符串中涉及到的内容
1.字符串的一些特性
01.索引特性:负数索引--从末端建立索引,从-1开始
正数索引--从起始端建立索引,从0开始
02.分片特性:对字符串子序列建立索引 冒号:指出子序列的范围--起始以及步长
[],其中的字母是【)半开区间,包含范围起始值,不包含结束值
单个冒号和两个冒号的规则
[::-1] 步长为-1表示向后进行
03.字符串操作 连接 + 检查成员的 in
2.列表的一些特性:列表本身是可变的
01.列表的索引和分片特性
02.reverse() 将列表中的元素反向排列
列表和字符串之间的转换
将列表变为字符串-- s = ''.join(L) 调用字符串str.join(iterable)
将字符串变为列表 L= list(s)
内置函数reverse,是直接操作变量本身,调用reverse()后,
变量本身的值就是reverse后的值了,而返回值,是空的,不返回任何值
所以不能出现:
reversedList = orignalList.reverse();
而应该是
orignalList.reverse();
reversedList = orignalList;
sort等函数也有此类规则,方法.sort()和函数sorted 以及 方法.reverse() 和函数reserved类似
这一点和R语言有所不同,请注意
3.内置函数
reversed()返回的是一个迭代器对象
reversed()函数是返回序列seq的反向访问的迭代子。
参数可以是列表,元组,字符串,不改变原对象
4.高阶函数和匿名函数
map()函数、filter()函数 sorted()
reduce()传入的参数f必须接受2个参数
第一次调用是把list的前两个元素传递给f,第二次调用时,
就是把前两个list元素的计算结果当成第一个参数,list的第三个元素当成第二个参数,
传入f进行操作,以此类推,并最终返回结果
使用 lambda 来创建匿名函数
# -*- coding:utf8 -*-
# !/usr/bin/python
# 反转字符串
# 使用递归 -使用循环 -使用 reduce和lambda表达式
# 自身的索引特性-
# 使用Python内置函数结合字符串函数使用
# 变成其他数据类型使用其函数
def reversert(astr):
if(len(astr)) == 1:
return astr
else:
newstr = reversert(astr[1:]) + astr[0]
return newstr
def func(s):
result = ""
max_index = len(s)-1
for index, value in enumerate(s):
result += s[max_index-index]
return result
if __name__ == '__main__':
print(reversert('abc'))
print(func('efg'))
print(reduce(lambda x, y: y+x, 'efg'))
print('efg'[::-1])
print("".join(list('efg')[::-1]))
print("".join(reversed('efg')))
print("".join(reversed(list('efg'))))
print(len("efg"))
# 列表变为字符串 --注意事项
print(list('abc'))
print(''.join(list('abc')))
print(''.join(['a', 'b', 'c']))
Li = list('efg')
Li.reverse()
dealLi = Li
print(''.join(dealLi))
参考