python 小提高

python 小提高,第1张

python 小提高 错综复杂的复制

浅拷贝

list1=[1,2,3,4]
list2=list1   #或者list1[:]  list(list1)均可实现浅拷贝
list2.append(5)
print(list1)
print(list2)

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

修改一个列表,另外一个列表也会变换

列表的底层实现:

列表内的元素可以分散的存储在内存中

列表存储的,实际上是这些元素的地址------地址的存储在内存中是连续的

浅拷贝是将地址复制了一份给别的变量名

但是对元组 *** 作时又不一样,这个时候像深拷贝

深拷贝 使用copy()

list1=[1,2,3,4]
list2=list1.copy()
list2.append(5)
print(list1)
print(list2)

[1, 2, 3, 4]
[1, 2, 3, 4, 5]

可变类型: 列表,字典,集合

id保持不变,但是里面的内容可以变

可变对象+= *** 作 实际在原对象的基础上就地修改

更加简洁的语法

创建多维列表

ls=[[0]*10 for i in range(5)]
ls
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

解析语法的基本结构----以列表解析为例(也称为列表推导)
[expression for value in iterable if conditihon]

三要素: 表达式,可迭代对象,if条件(可选)

执行过程:

  1. 从可迭代对象中拿出一个元素

  2. 通过if条件(如果有的话),对元素进行筛选

    若通过筛选,则将元素传给表达式

    若未通过,则进入下一次迭代

  3. 将传递给表达式的元素,代入表达式进行处理,产生一个结构

  4. 将第三步产生的结果作为列表的一个元素进行存储

  5. 重复1-4 步,直到迭代对象迭代结束,返回新创建的列表

#求20以内奇数的平方
res=[i**2 for i in range(1,21) if i%2==1]
print(res)

[1, 9, 25, 49, 81, 121, 169, 225, 289, 361]

支持多变量

x=[1,2,4]
y=[2,3,4]
res=[i*j for i, j in zip(x,y)]
res

[2, 6, 16]

支持循环嵌套

其它字典,集合的推导也类似

条件表达式

expr1 if condition else expr2

如果条件成立,执行expr1

如果不成立,执行expr2

#将n的绝对值赋予x
n=10
x=n if n>=0 else -n
x
生成器

采用惰性计算的方式

无需一次性存储海量数据

一边执行一边计算,只计算每次需要的值

实际上一直在执行next() *** 作,直到无值可取

生成器表达式 ()

res=(i**2 for i in range(1000000))

生成器函数----yield

def fib(max):
    n,a,b=0,1,1
    while n 

在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行

迭代器

可迭代对象:

可以直接作用于for循环的对象统称为可迭代对象:iterable

列表,元组,字符串,字典,集合,文件

装饰器

需要对已开发上线的程序添加某些功能

不能对程序中函数的源代码进行修改

不能改变程序中函数的调用方式

高阶函数
  1. 接收函数作为参数
  2. 或者返回一个函数

满足上述条件之一的函数称之为高阶函数

def squ(x):
    return x**2

def pow (fun):
    return fun

f=pow(squ)
f(8)

64
#上面的pow便是一个高阶函数

嵌套函数

在函数内部定义一个函数

def outer():
    print("outer is running ")
    
    def inner():
        print("inner is ruuning ")
    inner()
    
outer()

outer is running 
inner is ruuning 

先执行外部函数,再执行内部函数

闭包:延申了作用域的函数

如果一个函数定义在另一个函数的作用域内,并且引用了外层函数的变量,则该函数称为闭包

闭包时由函数及其相关的引用环境组合而成的实体

一旦在内层函数重新定义了相同名字的变量,则变量成为局部变量

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5496188.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存