python一些易弄错的小细节记录

1.python集合运行(-,&,|,^)

a = {
    
    1, 2, 3, 4, 5}
b = {
    
    5, 6}
# 集合a中包含而集合b中不包含的元素
print(a - b)  # {1, 2, 3, 4}

# 集合a和b中都包含了的元素
print(a & b)  # {5}

# 集合a或b中包含的所有元素  
print(a | b)  # {1, 2, 3, 4, 5, 6}

# 不同时包含于a和b的元素
print(a ^ b)  # {1, 2, 3, 4, 6}

2.python的默认参数

python的默认参数有一个坑,下面调用,默认参数只被初始化了一次。
可变默认参数情况:

def func(v, L=[]):
	print("address of L:", id(L))  # 地址
    L.append(v)
    return L


print(func('1'))  
print(func('2'))

"""输出:
address of L: 2819974003528
['1']
address of L: 2819974003528
['1', '2']   # 是不是和预想的不一样,'2'被直接加到了第一次初始化的列表上
"""

默认不可变参数情况:

def func(i=1):
    print('before address of i', id(i))
    i += 1
    print('after address of i', id(i))
    return i


print(func())
print("=========")
print(func())

"""
输出:
before address of i 1910795296
after address of i 1910795328
2
=========
before address of i 1910795296  
after address of i 1910795328
2
"""

3.==和is的区别

== 用于判断引用变量的值是否相等。只判断值和数据类型
is 用于判断两个变量引用对象是否为同一个,就是所引用的对象的内存地址是否一致

a = [1, 2, 3]
b = a
c = [1, 2, 3]

print("id(a) =", id(a))  # id(a) = 2224767619592
print("id(b) =", id(b))  # id(b) = 2224767619592
print("id(c) =", id(c))  # id(c) = 2224767597384

print(a == b)  # True
print(a == c)  # True
print(a is b)  # True
print(a is c)  # False
print(b is c)  # False

4.类型判断用isinstance, 不用type()

class Foo():
    pass


class Bar(Foo):
    pass


print(type(Foo()) == Foo)  # True
print(type(Bar()) == Foo)  # False
print(isinstance(Foo(), Foo))  # True
print(isinstance(Bar(), Foo)) # True

猜你喜欢

转载自blog.csdn.net/weixin_45455015/article/details/119080948
今日推荐