python基础二

运算符

算数运算

运算符 描述 实例
+ 加 - 两个对象相加 a+b输出结果 30
- 减 - 得到负数 或是一个数减去另一个数 a-b输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a*b输出结果 200
/ 除 - x除以y b/a 输出结果 2
% 取模 - 返回除法的余数 b%a输出结果 0
** 幂 - 返回x的y次幂 a**b为10的20次方,输出结果10000000000000000000
// 取整除 - 返回商的整数部分 9//2输出结果4, 9.0//2.0输出结果4.0

比较运算

运算符 描述 实例
== 等于 - 比较对象是否相等 (a==b)返回False
!= 不等于 - 比较两个对象是否不相等 (a!=b)返回True
<> 不等于 - 比较两个对象是否不相等 (a<>b)返回True。这个运算符类似!=
> 大于 - 返回x是否大于y (a>b)返回False
< 小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊变量True和False等价,注意这些变量名的大写 (a<b)返回True
>= 大于等于 - 返回x是否大于y (a>=b)返回False
<= 小 于等于 - 返回x是否小于y (a<=b)返回True

赋值运算

运算符 描述 实例
= 简单的赋值运算符 c=a+b将a+b的运算结果赋值为c
+= 加法赋值运算符 c+=a等效于c=c+a
-= 减法赋值运算符 c-=a等效于c=c-a
*= 乘法赋值运算符 等效于c=c*a
/= 除法赋值运算符 c/=a等效于c=c/a
%= 取模赋值运算符 c%=a等效于c=c%a
**= 幂赋值运算符 等效于c=c**a
//= 取整除赋值运算符 c//=a等效于c=c//1

逻辑运算

运算符 描述 实例
and 布尔”与” - 如果x为False,x and y返回False,否则它返回y的计算值 (a and b)返回True
or 布尔”或” - 如果x是True,它返回True,否则它返回y的计算值 (a or b)返回True
not 布尔”非” - 如果x为True,返回False。如果x为False,它返回True not(a and b)返回False

如果and 和 or 同时存在,则or将整体分成两部分看

成员运算

运算符 描述 实例
in 如果在指定的序列中找到值返回True,否则返回False x在y序列中,如果x在y序列中返回True
not in 如果在指定的序列中没有找到值返回True,否则返回False x不在y序列中,如果x不在y序列中返回True

三元运算

1
result =值1 if 条件 else2

如果条件为真:result =值1

如果条件为假 :result =值2

1
2
3
a = 3
b = 7
c = a if a<b else b

如果a小于b则把a的值赋给c,相反则把b的值赋给c

身份运算

运算符 描述 实例
is is是判断两个标识是不是引用自一个对象 x is y,如果id(x)等于id(y),is返回结果1
not is is not是判断两个标识是不是引用自不同对象 x is not y,如果id(x)不等于id(y),is返回结果1

位运算

运算符 描述 实例
& 按位与运算符 (a&b)输出结果12,二进制解释:0000 1100
按位或运算符 (a丨b)输出结果61,二进制解释:0011 1101
^ 按位异或运算符 (a^b)输出结果49,二进制解释:0011 0001
~ 按位取反运算符 (~a)输出结果-61,二进制解释:1100 0011,在一个有符号二进制数的补码形式
<< 左移动运算符 a<<2输出结果240,二进制解释:1111 0000
>> 右移动运算符 a>>2输出结果15,二进制解释:0000 1111

运算符优先级

运算符 描述
** 指数(最高优先级)
~ + - 按位翻转,一元加号和减号(最后两个方法名为+@和-@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算
& 位’AND’
^ 丨 位运算符
<= <> >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not or and 逻辑运算符

bytes类型

Python3中内置类型bytes和str用法及byte和string之间各种编码转换
Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然).

1
2
3
4
msg = "我爱北京天安门"
print(msg)
print(msg.encode(encoding="utf-8"))
print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))

执行结果:

1
2
3
我爱北京天安门
b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
我爱北京天安门

格式化

%s 字符串

例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string="hello"
#%s打印时结果是hello
print "string=%s" % string # output: string=hello
#%2s意思是字符串长度为2,当原字符串的长度超过2时,按原长度打印,所以%2s的打印结果还是hello
print "string=%2s" % string # output: string=hello
#%7s意思是字符串长度为7,当原字符串的长度小于7时,在原字符串左侧补空格,
#所以%7s的打印结果是 hello
print "string=%7s" % string # output: string= hello
#%-7s意思是字符串长度为7,当原字符串的长度小于7时,在原字符串右侧补空格,
#所以%-7s的打印结果是 hello
print "string=%-7s!" % string # output: string=hello !
#%.2s意思是截取字符串的前2个字符,所以%.2s的打印结果是he
print "string=%.2s" % string # output: string=he
#%.7s意思是截取字符串的前7个字符,当原字符串长度小于7时,即是字符串本身,
#所以%.7s的打印结果是hello
print "string=%.7s" % string # output: string=hello
#%a.bs这种格式是上面两种格式的综合,首先根据小数点后面的数b截取字符串,
#当截取的字符串长度小于a时,还需要在其左侧补空格
print "string=%7.2s" % string # output: string= he
print "string=%2.7s" % string # output: string=hello
print "string=%10.7s" % string # output: string= hello

%d 整数

%f 浮点数

编码

在python3中不需要申明编码

从英文意思上看,encode和decode分别指编码和解码。在python中,Unicode类型是作为编码的基础类型,即:

1
2
decode                 encode
str ---------> str(Unicode) ---------> str
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
>>> u = '中文'                 # 指定字符串类型对象u 

>>> str1 = u.encode('gb2312') # 以gb2312编码对u进行编码,获得bytes类型对象
>>> print(str1)
b'\xd6\xd0\xce\xc4'

>>> str2 = u.encode('gbk') # 以gbk编码对u进行编码,获得bytes类型对象
>>> print(str2)
b'\xd6\xd0\xce\xc4'
>>> str3 = u.encode('utf-8') # 以utf-8编码对u进行编码,获得bytes类型对象
>>> print(str3)
b'\xe4\xb8\xad\xe6\x96\x87'

>>> u1 = str1.decode('gb2312') # 以gb2312编码对字符串str进行解码,获得字符串类型对象
>>> print('u1')
'中文'

>>> u2 = str1.decode('utf-8') # 报错,因为str1是gb2312编码的
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd6 in position 0: invalid continuation byte

其他

break 跳出本层循环

continue 跳出本次循环

1
2
3
4
5
6
7
for i in range(10):
print(i)
if i ==5:
break
else:
print("done")
print("done2")

只有正常结束for循环才会执行else的命令,所以done不会被输出

判断是否为数字

isdigit()

取嵌套列表的值

name = [12,23,34,[34,55]]

取55的值 :name[3][1]