python简单测试

这篇博客主要介绍了Python的基础知识,包括数据类型如int、float、str、list、dict、set的特性与用途,以及线性数据结构的切片操作。此外,详细讲解了return、yield、continue、break、if-else、while-else等控制结构的用法,并探讨了列表解析式和生成器表达式的功能和特点。博客还涵盖了闭包的概念、奇数和的统计、特定条件下的集合取数、字符串编码、链接筛选、冒泡排序、随机ID生成、字典值互换以及列表去重等编程问题。
摘要由CSDN通过智能技术生成

一,尽可能多的列出已学过的数据类型,对比介绍他们的特点和用途(10分)

数据类型
  • int: float: complex: str: bytes: byterarry: bool:
  • 字节序bytes: 在二进制世界里只有0和1,其中每一个字节有8位,为了方便人们的理解字节序用b’string’表示,是一个不可变的数据类型,
  • 可变字节序列byterarry:它相对于bytes而言,多了一个可修改的功能

  • 字符串str:字符串用引号表示【‘ ’,““ ””,“““ ”””】,也是一个不可变的数据类型,和元组一样操作它也是从新生成一个全新的,全世界一半以上的算力基本都在处理字符串,在文本操作中用的都是字符串,

数据结构(只要是线性数据结构都能切片)
  • 列表list:列表用‘[ ]’表示,是一个有序可变的引用类型数据结构,由于其在内存中开辟的存储空间是连续的,所以可以用索引快速访问他的每一个元素,也正是因为是连续的存储空间,在列表的的非末尾增删时,会引起增删点后面的元素的大量挪动,此时如果所需的连续空闲空间不足,会导致程序崩溃,但在列表末尾用append按位增加,或用pop按位弹出,亦或用extend追加iterable对象等效率都是O(1)

  • 链表linked list:链表分为单向和双向链表,和列表一样都是有序可变序列,但是其开辟的内存空间是不连续的,可以理解为他在一个连续的内存空间里是【4,1,3,2】,但在人们操作它时,表现形式为【1,2,3,4】。就像一串珠子通过一条线连接,因此在对其中间进行插入操作时是非常方便的,只需要断开两珠子之间的线然后在连接即可,但是要在链表中用索引时就麻烦了,以为我们根本不知道这个索引对象在哪,只能从索引‘0’或‘-1’开始一个一个的找,

  • 栈stack:栈的特点是LILO,后进后出,就像抢的弹夹一样,一发一发的压在一起,当我们要取最下面的子弹时,只能把上面的子弹全部取出,此结构多用于函数的压栈,

  • 队列queue:队列的特点是FIFO,先进先出,只能在其首尾进行操作,

  • 元组tuple:元组用‘( )’表示,是一个有序但不可变序列,表面上对元组的增删操作其实是生成了一个新的元组,不能对其进行增删改,但是可以迭代它。

  • 字典dict:字典用‘{key:value}’表示,是一个可变,无序,不重复,的数据结构,它采用了和其他线性结构不同的对key进行hash计算,每一个可哈希的值哈希后会得到唯一的值,这就保证了字典数据不重复,hash函数在每一次shell的运行中会生成一个足够大的值用于取模运算,保证了在当次内核运行中的冥等性,当然也有极低的概率出现两个对象出现相同的哈希值,叫哈希冲突,

  • 集合set:基本和字典一样,只有连个不同点他没有指点的value,生成空集合时不能直接用‘{}’,只能用set()

二,分别简述return,yield,continue,break,if else,while else(10分)

  • return:其只在函数中出现,当函数运行时碰到return就会立即退出函数运算,并返回return值,一个函数可以没有return,此时当函数执行完所有语句时就会结束并返回一个默认值None,当然函数中也可以有多个return解释器关键字,次时函数执行到某个分支是碰到return也会返回,return后可写返回值,不写默认返回None

  • yield:其作为生成器函数的关键字,当函数碰到该关键字时,会暂停执行并返回yield值,生成器函数可以用for in迭代,也可以用next(iter,defalut),用next时生成器只能碰到一次yield返回一个值,没有返回值则返回None,同时python还提供了人机交互的iter.send()功能,方便我们对函数进行交互

  • continue:结束当层当次循环,进行当层的下一次循环

  • break:终止,退出当层循环

  • if else:当if条件为True时,不执行else语句。只有当if的条件为False时才执行了else语句

  • while else:当while为一个死循环时,不会执行else,只要while的条件为False时,就会执行else

三,简述列表解析式和生成器表达式功能和特点(5分)

  • 列表解析式:[i for i in iterable]立即生成一个列表需开辟连续的内存空间,当其内部的表达式计算一个值需要大量时间时,最后输出结果需要等待一段时间

  • 生成器表达式:(i for i in iterable)生成一个惰性求值,延迟计算的迭代器,它需要用for in,next驱动,每一次驱动才会计算一次,用next驱动但没有设置defalut时会报错,一定要注意生成器的闭包与其内部的标识符及函数的作用域,极容易出错

s = 0
a = (s+i for i in range(1))
s = 2
for j in a:
    print(j)
#输出2
  • 最后生成器的s变成2而不是之前定义的0,生成器只是记住了变量而已

四,解释python中的闭包,并写出代码(5分)

  • 闭包出现的情况是要有嵌套函数,内层的函数引用了外层函数的自由变量(对于内层来讲叫做自由变量)。当函数调用结束后其内层的函数使用了外层的自由变量,可是内层函数并没有释放(被其它标识符记住)导致该自由变量也不会消亡,此现象称为闭包
def foo():
    a = 0
    
    def too():
        nonlocal a
        a += 1
        return a
    return too

b = foo()
b()
#输出1

五,统计制定正整数n(包含n)以内的奇数和(5分)

def oddn_sum(x):
    sum1 = 0
    
    for i in range(1,n+1):
        if i & 1:
            sum1 += i
    return sum1

num = int(input('natural number'))
oddn_sum(num)

六,从集合numset = {1,9,15,60,77,21,18,6,-5,-21&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值