Python的一些高级特性

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))

参考

blogroll

social