DataWhale python基础 Task1
变量、运算符与数据类型
注释
- 行注释,作用于整行:#
# 注释
print('Hello world')
# Hello world
- 区间注释,作用于注释号区间内:
''' '''或 """ """
'''
多行注释,作用于单引号区间内
'''
"""
多行注释,作用于双引号区间内
"""
print('Hello world')
#Hello world
运算符
逻辑运算符
and(与):只要有一个为假则为假
or(或):只要有一个为真则为真
not(非):not(True)–> False ; not(False)–>True
位运算
位运算符
- ~(按位非/按位取反):参加运算的一个数据,按二进制位进行“取反”运算。
~0 = 1
~1 = 0
对二进制数进行取反0变1 1变0 - &(按位与):参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0 - | (按位或):参与运算的两个值,如果有一个位1,则为1
1 | 0 = 1
0 | 0 = 0
1 | 1 = 1 - ^ (按位异或):当参与运算的两个值如果相异时,则为1
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
异或操作满足交换律和结合律
A : 00 00 11 00
B : 00 00 01 11
A^B : 00 00 10 11
B^A : 00 00 10 11
A^A : 00 00 00 00
A^0 : 00 00 11 00
A^B^A = A^A^B = B = 00 00 01 11
-
<< (左移动运算符):运算符各二进制位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。
num << i 将num的二进制表示向左移动位11 << 3 ----------> 10 11 -> 10 11 00 0 11 << 3 = 88
-
>> (右移动运算符):运算符各二进制位全部右移若干位
11 << 3 ----------> 10 11 -> 1 11 << 3 = 1
原码、反码和补码
二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示
- 原码:二进制表示,第一位为符号位(0表示正数,1表示负数)
- 反码:正数的反码为其原码,负数的反码为原码的基础上符号位不变,其余各位取反。
- 补码:证书的补码为原码,富庶的补码为反码+1
[ + 1 ] = [ 0000 0001 ] 原 = [ 0000 0001 ] 反 = [ 0000 0001 ] 补 [+1] = [0000 \; 0001]_原 = [0000 \; 0001]_反 = [0000 \; 0001]_补 [+1]=[00000001]原=[00000001]反=[00000001]补
[ − 1 ] = [ 1000 0001 ] 原 = [ 1111 1110 ] 反 = [ 1111 1111 ] 补 [-1] = [1000 \; 0001]_原 = [1111 \; 1110]_反 = [1111 \; 1111]_补 [−1]=[10000001]原=[11111110]反=[11111111]补
三元运算符
- 语法: 语句1 if 条件表达式 else 语句2
x, y = 4, 5
small = x if x < y else y
print(small) # 4
其他运算符
- is(是)
'hello' is 'hello' # True
- is not (不是)
'hello' is not 'hello' # False
3 is not 5 # True
- in (存在)
5 in [1,2,3,4,5] # True
- not in (不存在)
5 not in [1,2,3,4,5] # False
Notice
- is, is not 和 ==, != 对比
- is, is not 对比的为两变量的内存地址
- ==, != 对比的是两变量的值
- 对于内存地址不可变类型 两类操作符等价(str等)
- 对于内存地址可变类型(list, dict, tuple等),则是有区别的
- 运算符的优先级
- 一元运算符优先于二元运算符
- 先算数,后移位,最后位运算
- 逻辑运算最后结合
#1. 一元运算符优先于二元运算符
print(-3 ** 2) # -9
print(-3 * 2 + 5 / -2 - 4) # (-6+ (-2.5) - 4) = -12.5
#2. 先算数,后移位,最后位运算
1 << 3 + 2 & 7
""" 3 + 2 = 5
1 << 5 --> 1->100000
1 << 5 = 32
32 & 7 = 0
"""
#3. 逻辑运算最后结合
3 < 4 and 4 < 5
"""
3 < 4 True
4 < 5 True
True and True ---> True
"""
变量和赋值
- 使用变量前,需要先对其进行赋值
- 变量名可以包括字母、数字、下划线,但是变量名不能以数字开头
- python 变量名大小写敏感, foo != Foo
数据类型转换
基本类型
- 整型:通常被称为是整型或整数,是正或负整数,不带小数点。
- 浮点型:Python的浮点数类似数学中的小数和C语言中的double类型。
- 布尔型:设置了true和false代表真假。任何对象都可以转成布尔类型,也可以直接用于条件判断。对象为空则False, 非空则True。
1、bool作用在基本类型变量,对数值型变量0, 0.0为空。
2、bool作用在容器类型变量:对容器变量,里面没有元素为空。
print(type(0), bool(0), bool(1))
# <class 'int'> False True
print(type(10.31), bool(0.00), bool(10.31))
# <class 'float'> False True
print(type(True), bool(False), bool(True))
# <class 'bool'> False True
print(type(''), bool(''), bool('python'))
# <class 'str'> False True
print(type(()), bool(()), bool((10,)))
# <class 'tuple'> False True
print(type([]), bool([]), bool([1, 2]))
# <class 'list'> False True
print(type({}), bool({}), bool({'a': 1, 'b': 2}))
# <class 'dict'> False True
print(type(set()), bool(set()), bool({1, 2}))
# <class 'set'> False True
python中的整型以补码形式存储,不限制长度时不会超范围溢出
变量类型获取
- type(object)
print(type(666))
# <class 'int'>
print(type(666.66))
# <class 'float'>
print(type(True))
# <class 'bool'>
- isinsrtance(object, classing)
print(isinstance(1, int))
# True
print(isinstance(True, bool))
# True
类型转换
- 转换为整型 int(x, base=10)
- 转换为字符串 str(object=’’)
- 转换为浮点型 float(x)
# str ---> int
print(int('520')) # 520
# float ---> int
print(int('520.52') # 520
# float ---> str
print(str(10.1 + 5.2), type(str(10.1 + 5.2))) # 15.3 <class 'str'>
print()函数
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- 将对象以字符串表示的方式格式化输出到流文件对象file。其中非关键字参数都按照str()方式进行转换为字符串输出
- sep:分隔符,以什么作为分隔
- end: 输出结束时的字符,默认换行符\n
- file: 定义流输出的文件,默认为标准的系统输出sys.stdout, 也可重定义为比的文件
- flush: 内容输出到流文件,不做缓存
位运算
利用位运算实现快速计算
-
通过<<, >> 快速计算2 的倍数问题
-
通过^快速交换两个整数
a ^= b
b ^= a -
通过a & (-a)快速获取a的最后为1位置的整数
利用位运算实现整数集合
一个数的二进制表示可以看作一个集合(0表示不在集合中,1表示在集合中)
比如集合{1, 3, 4, 8} 可以表示成 01 00 01 10 10
对应的位运算也可以看作是对集合进行的操作