python基础—10高级特性

一、生成式

1、定义

生成式就是一个用来快速生成特定语法形式的表达式。
列表生成式:用来快速生成列表
字典生成式:用来快速生成字典
集合生成式:用来快速生成集合

2、语法格式

(1)普通的语法格式:[exp for iter_var in iterable]
(2)带过滤功能语法格式: [exp for iter_var in iterable if_exp]
(3)循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
例如:

#(1)普通的语法格式:[exp for iter_var in iterable]
# 需求: 生成10个1~50之间的随机数值。
import random
def list_expression(count=10, start=0, end=50):
    return  [random.randint(start, end) for count in range(count)]
    
print(list_expression())

#(2)带过滤功能语法格式: [exp for iter_var in iterable if_exp]
# 需求: 找出1-50之间能被3整除的数值;
def list_expression(start=1, end=50, div_num=3):
    return [num for num in range(start, end + 1) if num % div_num == 0]
    
print(list_expression())

    
#(3)循环嵌套语法格式: [exp for iter_var_A in iterable_A for iter_var_B in iterable_B]
nums = [item1+ item2 for item1 in 'abc' for item2 in '123']
print(nums)

运行结果:
在这里插入图片描述

#集合生成式
# 需求: 生成10个1~20之间的随机且不重复数值。
import random
nums = {
   random.randint(1, 20) for count in range(10)}
print(nums)

3、生成式练习

# (1)求以r为半径的圆的面积和周长(r的范围从1到10)
import math
def circle_area(r):
    return  math.pi * pow(r,2)
def circle_perimeter(r):
    return 2 * math.pi * r

area =  [circle_area(r) for r in range(1, 11)]
perimeter = [circle_perimeter(r) for r in range(1,11)]
print(area)
print(perimeter)
#(2)找出1~100之间所有的质数
def is_prime(num):
    """判断是否为质数"""
    for i in range(2, num):
        if num % i == 0:
            return False
    else:
        return True

def find_prime():
    """找出1~100之间所有的质数"""
    return [num for num in range(1, 101) if is_prime(num)]

if __name__ == '__main__':
    result = find_prime()
    print(result)
#(3)将字典的key值和value值调换
def swap_key_value(dictObj):
    return {
   value: key for key, value in dictObj.items()}

if __name__ == '__main__':
    d = {
   
        'user1': 'passwd1',
        'user2': 'passwd2',
    }
    result = swap_key_value(d)
    print(result)
#字典key值大小写计数合并 : 已知字典{'A':10, 'b':5, 'a':2}, 合并后为{'a':12, 'b':5} 
#注意: key值最终全部为小写
dict = {
   'A':10, 'b':5, 'a':2}
d = {
   key.lower(): (dict.get(key.lower(), 0) + dict.get(key.upper(), 0)) for key, value in dict.items()}

print(d)

二、生成器

1、定义和特点

(1)在python中,一边循环一边计算的机制,称为生成器(Generator)
(2)应用场景:
性能限制需要用到,比如读取一个10G的文件,如果一次性将10G的文件加载到内存处理的话 (read方法),内存肯定会溢出。但使用生成器把读写交叉处理进行,比如使用(readline和readlines) 就可以再循环读取的同时不断处理,这样就可以节省大量的内存空间
(3)特点:
1> 解耦。 爬虫与数据存储解耦;
2> 减少内存占用.。随时生产, 即时消费, 不用堆积在内存当中;
3> 可不终止调用.。写上循环, 即可循环接收数据, 对在循环之前定义的变量, 可重复使用;
4> 生成器的循环, 在 yield 处中断, 没那么占 cpu

2、创建和访问

(1)创建
方法一:列表生成式的改写。 []改成()
方法二:yield关键字
(2)访问:
方法一:通过for循环, 依次计算并生成每一个元素
方法二:通过 next() 函数一个一个获取

# 生成器创建方法一:
nums_gen = (num for num in range(1, 10001) if num % 8 == 0)
print(nums_gen)             # <generator object <genexpr> at 0x7f8f2cb92350>
print(type(nums_gen))       # <class 'generator'>

# 查看一个对象是否可以for循环?
from collections.abc import  Iterable
print("生成器是否为可迭代对象?", isinstance(nums_gen, Iterable))

# 访问方法一: 通过for循环, 依次计算并生成每一个元素。
"""
for num in nums_gen:
    if num > 50:
        break
    print(num)
"""

# 访问方法二: 如果要一个一个打印出来,可以通过next()函数获得。
print(next(nums_gen))       # 执行一次next生成一个值
print(next(nums_gen))
print(next(nums_gen))
# 生成器创建方法二: 函数中包含yield关键字
def fib2(num):
    """不使用递归方式实现Fib数列,返回前num个fib数"""
    count = 0
    a = b = 1
    while True:
        if count < num:
            count += 1
            yield a
            a, b = b, a + b
        else:
            break
# 如果函数中有yield关键字, 那么函数的返回值是生成器对象.
result = fib2(100)
print(result)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种高级编程语言,具有简单易学、可读性强的特点。下面是Python基础理论的介绍: 1. 变量和数据类型:Python中的变量可以用来存储各种类型的数据,包括整数、浮点数、字符串、布尔值等。Python支持动态类型,即变量的类型可以根据赋值的数据自动确定。 2. 控制流语句:Python提供了多种控制流语句,包括条件语句(if-else)、循环语句(for、while)、跳转语句(break、continue)等,用于根据不同的条件执行不同的代码块。 3. 函数和模块:函数是一段可重复使用的代码块,可以接收输入参数并返回结果。Python还支持模块化编程,可以将函数封装到模块中,方便代码的组织和复用。 4. 数据结构:Python提供了多种内置的数据结构,包括列表(list)、元组(tuple)、字典(dictionary)、集合(set)等。这些数据结构可以用于存储和操作不同类型的数据。 5. 文件操作:Python提供了丰富的文件操作函数和方法,可以读取和写入文件内容,进行文件的复制、移动等操作。 6. 异常处理:Python支持异常处理机制,可以捕获和处理程序运行过程中的异常情况,保证程序的稳定性和可靠性。 7. 面向对象编程:Python是一种面向对象的编程语言,支持类和对象的概念。通过定义类和创建对象,可以实现面向对象编程的特性,如封装、继承和多态。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值