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