📜  Python的高级特性

📅  最后修改于: 2022-05-13 01:55:35.405000             🧑  作者: Mango

Python的高级特性

Python是一种语法简单的高级解释型编程语言。 Python代码是逐行编译的,这使得错误的调试更加容易和高效。 Python适用于几乎所有类型的平台,如 Windows、Mac、Linux、Raspberry Pi 等Python支持模块和包,这鼓励程序模块化和代码重用。 Python可用于处理大量数据并执行复杂的数学问题,也可用于开发应用程序。

Python的高级特性

发电机

生成器函数允许我们声明一个行为与迭代器相同的函数,即它可以用来代替 for 循环。生成器是迭代器,但它们只能迭代一次。生成器在Python中引入了 yield 语句,它的工作方式有点像 return,因为它返回一个值。生成器将创建元素并仅在需要时将它们存储在内存中,即一次一个。这意味着,如果您必须创建大量浮点数,您一次只能将它们存储在内存中!这极大地简化了代码并使代码比简单的 for 循环更高效。
示例 1:-

# A simple generator function
def my_func():
    n = 1
    print('First Number')
    # Generator function contains yield statements
    yield n
  
    n += 1
    print('Second Number ')
    yield n
  
    n += 1
    print('Last Number ')
    yield n
  
# Using for loop
for number in my_func():
    print(number)    

输出:

First Number
1
Second Number 
2
Last Number 
3


示例 2:-

def str(my_str):
    length = len(my_str)
    for i in range(0, length ):
        yield my_str[i]
  
# For loop to print the string as 
# it is using generators and for loop.
for char in str("Shivam And Sachin"):
    print(char, end ="")

输出:

Shivam And Sachin

注意:有关更多信息,请参阅Python中的生成器

装饰者

装饰器是Python的重要组成部分之一。它们对于将功能添加到之前实现的函数而不对原始函数进行任何更改非常有帮助。在装饰器中,函数作为参数传递给另一个函数,然后在包装函数内部调用。它们允许我们包装另一个函数以扩展包装函数的功能,而无需永久修改它。装饰器通常在定义要装饰的函数之前调用。当您想为现有代码提供更新的代码时,装饰器非常有效。


示例 1:-

def decorator(a_func):
  
    def wrapper():
        print("Before executing function requiring decoration.")
  
        a_func()
  
        print("After executing requiring decoration.")
  
    return wrapper
  
def function():
    print("Function requiring decoration.")
  
function()
  
function = decorator(function)
  
function()

输出:

Function requiring decoration.
Before executing function requiring decoration.
Function requiring decoration.
After executing requiring decoration.


示例 2:-

def flowerDecorator(func):
    def newFlowerPot(n):
        print("We are decorating the flower vase.")
        print("You wanted to keep % d flowers in the vase." % n)
  
        func(n)
  
        print("Our decoration is done.")
  
    return newFlowerPot
  
def flowerPot(n):
    print("We have a flower vase.")
  
flowerPot = flowerDecorator(flowerPot)
flowerPot(5)

输出:

We are decorating the flower vase.
You wanted to keep 5 flowers in the vase.
We have a flower vase.
Our decoration is done.

注意:有关详细信息,请参阅Python中的装饰器

Lambda 函数

Lambda函数是一个小型匿名函数。这些类型的函数可以接受任意数量的参数,但只能有一个表达式。普通函数使用def关键字定义,而匿名函数使用关键字“ lambda ”定义。 Lambda 函数不需要 return 语句,它们总是返回通过计算 lambda 表达式获得的值。

示例:- 3 个数字相乘的代码。

x = lambda a, b, c : a * b*c
print(x(5, 4, 3))

输出:

60

示例:- 添加 3 个数字的代码。

x = lambda a, b, c : a + b+c
print(x(12, 40, 8))

输出:

60

注意:更多信息请参考Python lambda

地图

Map()是一个内置的Python函数,用于将函数应用于一系列元素,例如列表或字典,并返回结果列表。 Python map 对象是一个迭代器,所以我们可以迭代它的元素。我们还可以将映射对象转换为序列对象,例如列表、元组等。这是执行诸如映射两个列表或对列表或字典的元素进行排序等操作的一种简单而有效的方法。


示例:- 将字符串转换为其长度的代码。

def func(n):
    return len(n)
  
a =('Singla', 'Shivam', 'Sachin')
x = map(func, a)
print(a)
  
# convert the map into a list,
#  for readability:
print(list(x))

输出:

('Singla', 'Shivam', 'Sachin')
[6, 6, 6]


示例:- 将数字映射到其多维数据集的代码。

numbers = (1, 2, 3, 4)
res = map(lambda x: x * x*x, numbers)
  
# converting map object to list
numbersCube = list(res)
print(numbersCube)

输出:

[1, 8, 27, 64]

注意:更多信息请参考Python map()函数

筛选

Filter()是一个内置函数,与 Map函数非常相似,因为它将函数应用于序列(元组、字典、列表)。关键区别在于 filter()函数将一个函数和一个序列作为参数并返回一个可迭代对象,仅产生函数返回 True 的序列中的项目,并且删除序列中评估为 False 的所有项目。简而言之,filter() 方法从函数返回 true 的可迭代元素中构造一个迭代器。


示例 1:-

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
          11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
  
# Function that filters out all 
# numbers which are multiple of 4
def filter_numbers(num):
  
    if num % 4 == 0:
        return True
    else:
        return False
  
filtered_numbers = filter(filter_numbers, numbers)
filters = list(filtered_numbers)
print(filters)

输出:

[4, 8, 12, 16, 20]


示例 2:-

# To sort all ages which 
# are above 20 years
ages = [35, 21, 17, 18, 24,
        32, 50, 59, 26, 6, 14]
  
def Func(x):
  if x < 20:
    return False
  else:
    return True
  
adults = filter(Func, ages)
  
for z in adults:
  print(z)

输出:

35
21
24
32
50
59
26

注意:更多信息请参考Python中的filter()

压缩和解压缩

Zip()是一个内置的Python函数,它为我们提供了一个元组迭代器。 Zip 是一种在其中保存真实数据的容器。它将可迭代元素作为输入并在它们上返回一个迭代器(元组的迭代器)。它从左到右评估迭代。我们可以使用生成的迭代器快速有效地解决常见的编程问题,例如创建字典。解压缩只是压缩的逆过程,解压缩我们使用带有zip()函数的 *字符。

示例 1:-

# ZIPPING 
a = ("SHIVAM", "SACHIN", "VIKALP", "RAGHAV", "PRANAY")
b = ("SINGLA", "SINGLA", "GARG", "GUPTA", "GUPTA")
  
x = zip(a, b)
  
# use the tuple() function to display
#  a readable version of the result:
print(tuple(x))

输出:

示例 2:-

# ZIPPING AND UNZIPPING
name = ['sachin', 'shivam', 'vikalp']
age = [20, 18, 19]
  
result = zip(name, age)
result_list = list(result)
print(result_list)
  
n, a = zip(*result_list)
  
print('name =', n)
print('age =', a)

输出:

[('sachin', 20), ('shivam', 18), ('vikalp', 19)]
name = ('sachin', 'shivam', 'vikalp')
age = (20, 18, 19)