技巧 | 99.9%的人都会犯错的几个Python小常识!


大家好,我是 👉 【Python当打之年(点击跳转)】

本期整理了几个基础python防坑小常识,希望对大家有所帮助。

🏳️‍🌈 1. 链式运算

(False == False) in [False] # makes sense
# False
False == (False in [False]) # makes sense
# False
False == False in [False] # why?
# True

True is False == False
# False
False is False is False
# True

注: 参考常见链式运算:1<5<10

🏳️‍🌈 2. is 运算符

a = 256
b = 256
a is b
# True

a = 257
b = 257
a is b
# False

a, b = 257, 257
a is b
# True

python中经常使用的一些数值定义为小整数池,小整数池的范围是[-5,256],python对这些数值已经提前创建好了内存空间,即使多次重新定义也不会在重新开辟新的空间,但是小整数池外的数值在重新定义时都会再次开辟新的空间,不同编辑器不同平台可能会有所不同。

🏳️‍🌈 3. all() 函数

all([True, True, True])
# True
all([True, True, False])
# False

all([])
# True
all([[]])
# False
all([[[]]])
# True

all() 函数用于判断给定的可迭代参数 iterable 中的所有元素是否都为True,如果是返回 True,否则返回 False,元素除了是 0、空、None、False 外都算 True,函数等价于:

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

🏳️‍🌈 4. 列表移除元素

list_1 = [1, 2, 3, 4]
list_2 = [1, 2, 3, 4]
list_3 = [1, 2, 3, 4]
list_4 = [1, 2, 3, 4]

for idx, item in enumerate(list_1):
    del item

for idx, item in enumerate(list_2):
    list_2.remove(item)

for idx, item in enumerate(list_3[:]):
    list_3.remove(item)

for idx, item in enumerate(list_4):
    list_4.pop(idx)
    
# list_1 -- [1, 2, 3, 4]
# list_2 -- [2, 4]
# list_3 -- []
# list_4 -- [2, 4]

列表的移除操作会改变原列表元素的索引。

🏳️‍🌈 5. + and +=

a = [1, 2, 3, 4]
b = a
a = a + [5, 6, 7, 8]
# a -- [1, 2, 3, 4, 5, 6, 7, 8]
# b -- [1, 2, 3, 4]

a = [1, 2, 3, 4]
b = a
a += [5, 6, 7, 8]
# a -- [1, 2, 3, 4, 5, 6, 7, 8]
# b -- [1, 2, 3, 4, 5, 6, 7, 8]

a = a + [5,6,7,8] 创建了一个新列表,a += [5,6,7,8] 扩展了原列表。

🏳️‍🌈 6. sorted/reversed

x = 1, 2, 3

sorted(x) == x
# False

sorted(x) == sorted(x)
# True

y = reversed(x)
sorted(y) == sorted(y)
# False

sorted 方法返回的是一个list,reversed 方法返回的是一个iterator。

🏳️‍🌈 7. **

False ** False == True
# True
False ** True == False
# True
True ** False == True
# True
True ** True == True
# True

True, False 转换为 1,0。

🏳️‍🌈 8. 列表/字典更新

some_list = [1, 2, 3]
some_dict = {
  "key_1": 1,
  "key_2": 2,
  "key_3": 3
}

some_list = some_list.append(4) 
some_dict = some_dict.update({"key_4": 4})

print(some_list)
# None
print(some_dict)
# None

列表、字典的更新都是就地修改对象并返回None,以提高性能。

🏳️‍🌈 9. 可变对象/不可变对象

def func1(a):
    if a[0] == 0:
        return
    a[0] -= 1
    func1(a)
    return a

def func2(a):
    if a == 0:
        return a
    a -= 1
    func2(a)
    return a

print(func1([3, 1]))
# [0, 1]
print(func2(3))
# 2

可变对象(如list)可以在函数中被改变,而对不可变对象(a -= 1)的重新赋值并不是对值的改变。

🏳️‍🌈 10. 猜一猜

a, b = a[b] = {}, 1

print(a)
# {1: ({...}, 1)}

print(b)
# 1

a[b][0] is a
# True

参考 https://docs.python.org/3/reference/simple_stmts.html#assignment-statements


🏳️‍🌈 更多技巧:

【源码下载 | Python可视化系列文章资源(源码+数据)】


以上就是本期为大家整理的全部内容了,赶快练习起来吧,原创不易,喜欢的朋友可以点赞、收藏也可以分享注明出处)让更多人知道。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python当打之年

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值