Python 学习笔记1:变量,运算符,数据类型及位运算

Python 学习笔记1:变量,运算符,数据类型及位运算

  • 变量,运算符,数据类型及位运算
    • 变量
    • 运算符
    • 基本的数据类型
    • 位运算
    • leetcode 习题136:只出现一次的数字
    • 参考文献

变量,运算符,数据类型及位运算

变量

在python中

  • 变量名可以包括字母,数字和下划线,但变量名不能以数字开头
  • python变量名是大小写敏感的
  • 有关注释:
    单行注释(#):用于整行的注释
    多行注释(’‘’ ‘’‘,“”“ ”“”):用于区间注释

print函数:

print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)

  • 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按str()方式进行转换为字符串输出;
  • 关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符;
  • 关键字参数end是输出结束时的字符,默认是换行符\n;
  • 关键字参数file是定义流输出的文件,可以是标准的系统输出sys.stdout,也可以重定义为别的文件;
  • 关键字参数flush是立即把内容输出到流文件,不作缓存。

example:
item值与’another string’两个值之间用sep设置的参数&分割。由于end参数没有设置,因此默认是输出解释后换行,即end参数的默认值为\n。

shoplist = ['apple', 'mango', 'carrot', 'banana']
print("This is printed with 'sep='&''.")
for item in shoplist:
    print(item, 'another string', sep='&')

输出值为:

This is printed with ‘sep=’&’’.
apple&another string
mango&another string
#carrot&another string
banana&another string

运算符

1.运算符

项目 Value
算术运算符 +,-,*,/,// ,%,**
比较运算符 >,≥,<,≤,==,!=
逻辑运算符 and,or,not
位运算符 ~,&,|,«,»,^
三元运算符 x if x
其他运算符 in(存在),not in(不存在),is(是),is not(不是)

注意

  • is, is not 对比的是两个变量的内存地址
  • ==, != 对比的是两个变量的值
  • 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
  • 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。

运算符的优先级

  • 一元运算符优于二元运算符。例如3 ** -2等价于3 ** (-2)。
  • 先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7。
  • 逻辑运算最后结合。例如3 < 4 and 4 < 5等价于(3 < 4) and (4 < 5)。

基本的数据类型

整型(int), 浮点型(float),布尔型(bool)

dir(X) #通过 dir( X ) 和help( X ) 可看出 X 对应的对象里可用的属性和方法。

获取数据类型的信息

type(object) #获取类型信息
isinstance(object, classinfo) #判断一个对象是否是一个已知的类型。

type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()

1.整型(int)and 浮点型(float)
有时候我们想保留浮点型的小数点后 n 位。可以用 decimal 包里的 Decimal 对象和 getcontext() 方法来实现。

import decimal
from decimal import Demical

Python 里面有很多用途广泛的包 (package),用什么你就引进 (import) 什么。包也是对象,也可以用上面提到的dir(decimal) 来看其属性和方法。比如 getcontext() 显示了 Decimal 对象的默认精度值是 28 位 (prec=28)。
如果想要保留四位小数,可以使用 getcontext().prec 来调整精度:

decimal.getcontext().prec = 4

2.布尔型(boolen)
布尔 (boolean) 型变量只能取两个值,True 和 False。当把布尔型变量用在数字运算中,用 1 和 0 代表 True 和 False。
除了直接给变量赋值 True 和 False,还可以用 bool(X) 来创建变量,其中 X 可以是

基本类型:整型、浮点型、布尔型
容器类型:字符串、元组、列表、字典和集合

bool 作用在基本类型变量:X 只要不是整型 0、浮点型 0.0,bool(X) 就是 True,其余就是 False。
bool 作用在容器类型变量:X 只要不是空的变量,bool(X) 就是 True,其余就是 False。

确定bool(X) 的值是 True 还是 False,就看 X 是不是空,空的话就是 False,不空的话就是 True。对于数值变量,0, 0.0 都可认为是空的。对于容器变量,里面没元素就是空的。

3.数据类型的转换

  • 转换为整型 int (X, base=10)
  • 转换为字符串 str (object=’ ')
  • 转换为浮点型 float(X)

位运算

1.原码、反码和补码
二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。

  • 对于正数:原码=反码=补码
  • 对于负数:原码(二进制表示)、反码(原码符号位不变,其余位取反)、补码(反码+1)

位运算中的异或操作:满足交换律和结合律

2.通过位运算快速计算

  • 通过 <<,>> 快速计算2的倍数问题。

n << 1 -> 计算 n * 2
n >> 1 -> 计算 n / 2,负奇数的运算不可用
n << m -> 计算 n * (2 ^ m),即乘以 2 的 m 次方
n >> m -> 计算 n / (2 ^ m),即除以 2 的 m 次方
1 << n -> 2 ^ n

  • 通过 ^ 快速交换两个整数。

a ^= b
b ^= a
a ^= b

  • 通过 a & (-a) 快速获取a的最后为 1 位置的整数。

00 00 01 01 -> 5
&
11 11 10 11 -> -5
00 00 00 01 -> 1
00 00 11 10 -> 14
&
11 11 00 10 -> -14
00 00 00 10 -> 2

3.利用位运算实现整数集合
一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)。

比如集合 {1, 3, 4, 8},可以表示成 01 00 01 10 10 而对应的位运算也就可以看作是对集合进行的操作。

  • 元素与集合的操作:

a | (1< 把 i 插入到集合中
a & ~(1< 把 i 从集合中删除
a & (1< 判断 i 是否属于该集合(零不属于,非零属于)

  • 集合之间的操作:

a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

leetcode 习题136:只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
相关代码如下:

class Solution(object):
    def singleNumber(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        a=0
        for i in nums:
            a^=i
        return a

参考文献

【1】: https://mp.weixin.qq.com/s/DZ589xEbOQ2QLtiq8mP1qQ
【2】: https://github.com/datawhalechina/team-learning

你可能感兴趣的:(Python 学习笔记1:变量,运算符,数据类型及位运算)