Python:盲点

本文涵盖了Python编程中的一些常见盲点,包括import的使用、generator、深拷贝与浅拷贝的区别、numpy操作、异常处理、字符串与列表操作等。强调了在Numpy中避免对数组直接进行类型转换,以及在处理二维数组时如何实现真正的深拷贝。同时,还分享了一些编程技巧和陷阱,如三目运算符、matplotlib的legend位置、列表推导式等。
摘要由CSDN通过智能技术生成

1. 不论是import还是from...import,初始化代码都会被执行

2. if __name__ == __main__下面的语句,不会在这个py文件导入的时候调用,只会在执行这个文件的时候调用,相当于程序的入口

3. 关于import 和 from ... import

(1)import 模块 可以

(2)import 包 不可以

(3)from 包 import 模块 可以

(4)from 包 import * (这里*指函数或者类) 可以,并且这里和__all__这个东西无关

(5)from 包 import 包  不可以,没有这种写法

(6)import 包 import * (这里的import后面接的包,包里面必须含有模块,不然也是不可以的) 如果是这种写法,那么在这个包对应的__init__.py下面,必须用__all__指明对外暴露的模块,不然搜不到

(7)__all__里面装的是模块,不是包

(8)from 包 import 函数 / 类 可以

4. 关于generator, next, send和yield

# !user/bin/python
# -*- coding: UTF-8 -*-

def f():
    print('start...')
    a = yield 5
    print('a = ', a)
    b = yield 6
    print('b = ', b) # 永远不会被执行

ob = f() # 带有yield的函数就是一个生成器
res1 = next(ob) # 首次运行生成器不能传参,因为还没碰到yield,这里将执行第一个yield之前的程序,并且将yield的返回值传给res1,函数里面的a,因为没有传参进来,所以目前是None
print('res1:', res1) # 此时res1为5,程序此时停留在'a = yield 5'这一行,因为next遇到yield跳出来了
res2 = ob.send('msg') # 第二次运行生成器,此时停留在'a = yield 5'这一行,因此,a从None变成'msg',并且继续执行代码直至遇到下一个yield并停留在yield那一行然后退出
print('res2:', res2) # 此时res2返回6,然后跳出函数,b这个时候为None,可惜永远都输出不了了


# start...
# res1: 5
# a =  msg
# res2: 6

new_ob = f()
for i in new_ob:
    print(i)

# start...
# 5
# a =  None
# 6
# b =  None


5. 关于切片到底是深拷贝还是浅拷贝的问题

Python中:深拷贝,地址不同,修改不影响原来的值

Numpy中:浅拷贝,虽然地址不同,但是修改却会影响原来的值

也就是说,在Numpy中,要对Ndarray进行深拷贝的话,最好用copy函数,其他的都不好使

总结:

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值