6个高级Python技巧_python高级技巧

83 阅读4分钟

img img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

开源项目:docs.qq.com/doc/DSlVlZExWQ0FRSE9H

这里,我们再次连接两个切片操作的结果(列表)。首先,我们将列表从索引’ d ‘切片到结束,然后从开始切片到索引’ d '。

# Python program to reverse an array.
def reverse(arr):
  return arr[::-1]

if __name__ == '\_\_main\_\_':
  arr = [1, 2, 3, 4, 5, 6, 7, 8]
  arr = reverse(arr)
  print (arr)
  # prints [8 ,7, 6, 5, 4, 3, 2, 1]

这是一个显示step_size用法的例子。步长为-1表示从结束到开始切片。

03、Lambda

Lambda是一个匿名函数,它只包含一个表达式。它基本上是函数的简写,可以在任何需要表达式的地方使用。

举例:

import math
square_root = lambda x: math.sqrt(x)
# is an equivalant lambda expression for below function

def square\_root(x): 
  return math.sqrt(x)

这里lambda函数用来表示对一个数求根号的函数

04、Map

Map用于需要对元素序列应用函数/lambda的场景。尽管您几乎总是可以用列表解析来代替使用映射的需求。

举例:

# Square the numbers in the list.
import math

if __name__ == '\_\_main\_\_':
  arr = [1, 2, 3, 4, 5]
  arr = list(map(lambda x : x\*\*2, arr))
  print (arr)
  # prints [1, 4, 9, 16, 25]

Map用于对序列中的每个元素进行平方。由于map返回一个iterable,我们需要用所需的类型(上面例子中的列表)包装结果。

05、Filter

另一方面,Filter对一个元素序列应用一个函数/lambda,并返回该函数/lambda返回True的元素序列。

# Print all even numbers in an array.
if __name__ == '\_\_main\_\_':
  arr = [1, 2, 3, 4, 5, 6]
  arr = list(filter(lambda x : x%2 == 0, arr))
  print (arr)
  # print [2, 4, 6]

这里,我们应用过滤器只返回序列中的偶数。

06、生成器

生成器是创建迭代器的简单方法。更正式地说,生成器是返回一个对象(迭代器)的函数,我们可以迭代该对象(一次一个值)。如果我们在python中从头开始编写相同的功能,它应该是这样的:

# Iterator for next power of two.
class NextPowTwo:
    def \_\_init\_\_(self, max_ele = 0):
        self.max_ele = max_ele
        
    def \_\_iter\_\_(self):
        self.n = 0
        return self

    def \_\_next\_\_(self):
        if self.n <= self.max_ele:
            result = 2 \*\* self.n
            self.n += 1
            return result
        else:
            raise StopIteration     

if __name__ == '\_\_main\_\_':
    it = iter(NextPowTwo(20))
    print (next(it))     # prints '1'
    print (next(it))     # prints '2'
    print (next(it))     # prints '4'
    print (next(it))     # prints '8'
view raw
power2iterator.py hosted with ❤ by GitHub

然而,实际的python不会让我们这么麻烦。下面是使用生成器的类似内容。正如您所看到的,上面提到的内容(调用__iter__()和__next__())都是由生成器自动处理的:

# Generator for next power of two.
def NextPowTwo(max_ele):
    n = 0
    while n < max_ele:
        yield 2 \* n
        n += 1
    raise StopIteration

           
obj = NextPowTwo(20)
print (obj.next())
print (obj.next())
print (obj.next())
print (obj.next())

生成器是通过使用yield语句而不是return语句i定义一个普通函数来创建的。如果函数包含至少一个yield语句,它就成为一个生成器函数。yield和return都将从函数返回一些值。函数在执行return时终止,而yield语句暂停函数,保存它的所有状态,然后在后续调用时继续执行。
一个生成器包含以下内容:

  • 至少有一个yield语句。
  • 返回一个对象(迭代器),但不立即开始执行。
  • 记住连续调用之间的局部变量及其状态。
  • 实现迭代协议

参考链接 :

6个高级Python技巧 :mp.weixin.qq.com/s/42SEuUbXq…

img img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

开源项目:docs.qq.com/doc/DSlVlZExWQ0FRSE9H