我与Py的那些事——Python基础

Posted by Csming on 2017-04-15

Python是一个没有格式化{}符号的语言;他要求我们始终写出格式化的代码;
使用四个空格缩进;于是没办法用用复制粘贴的方法重用代码;
而且py是一个大小写敏感的语言;


数据类型和变量

  • 整型:

Python可以处理任意大小的整数,包括负整数(略)

  • 浮点数:

浮点数就是小数;
比如:1.23、3.14、-9.01;
很大或很小的浮点数可以表示为:1.23e9、12.3e8;即:1.23乘以10的9次方、12.3乘以10的8次方;
当然,浮点数运算在计算机计算中会有四舍五入的误差;

  • 字符串:

字符串是以单引号’或双引号"括起来的任意文本,比如’abc’,“xyz”;
’'或""本身只是一种表示方式,不是字符串的一部分;
字符串’abc’只有a,b,c这3个字符;

如果’本身也是一个字符,那就可以用""括起来

当然也可以用转义符\来表示

‘I’m “OK”!’

表示:

I’m “OK”!

*\表示的字符就是*

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
>>> print('I\'m ok.')
I'm ok.
>>> print('I\'m learning\nPython.')
I'm learning
Python.
>>> print('\\\n\\')
\
\

数据类型和变量

阅读: 827173
数据类型

计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:

整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

计算机由于使用二进制,所以,有时候用十六进制表示整数比较方便,十六进制用0x前缀和0-9,a-f表示,例如:0xff00,0xa5b4c3d2,等等。

浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是完全相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

字符串

字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等。请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此,字符串'abc'只有a,b,c这3个字符。如果'本身也是一个字符,那就可以用""括起来,比如"I'm OK"包含的字符是I,',m,空格,O,K这6个字符。

如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如:

'I\'m \"OK\"!'
表示的字符串内容是:

I'm "OK"!
转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\,可以在Python的交互式命令行用print()打印字符串看看:

>>> print('I\'m ok.')
I'm ok.
>>> print('I\'m learning\nPython.')
I'm learning
Python.
>>> print('\\\n\\')
\
\
如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义,可以自己试试:

>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许换行
并且可以在’’'前加上r使用

1
2
3
print('''line1
line2
line3''')
  • 布尔值:
    一个布尔值只有True、False两种值

布尔值可以用and、or、not运算

布尔值也常用于条件判断中:

1
2
3
4
if age >= 18:
print('adult')
else:
print('teenager')
  • 空值:
    空值用None表示
    None不能理解为0,因为0是有意义的,而None是一个特殊的空值

  • 变量
    变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合
1
2
3
4
5
a = 1

t_007 = 'T007'

Answer = True

等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量

1
2
3
4
a = 123 # a是整数
print(a)
a = 'ABC' # a变为字符串
print(a)
  • 常量

常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量(其实只是约好的)

几种除法

  • 普通除法
1
2
3
4
5
print(10/3)
# 3.33333333333335

print(9/3)
# 3.0

这种除法的结果是浮点数;即使两个整数相除,结果也为浮点数

  • 地板除
1
2
print(10//3)
# 3

地板除//永远是整数,即使除不尽

  • 余数运算
1
2
print(10%3)
# 1

字符编码

  • ASCII编码 只有127个字符:大小写英文字母、数字、一些符号
  • GB2312编码 编入中文
    由于多语言混合的文本会出现乱码,于是诞生了Unicode;
    Unicode将所有语言都统一到了一套编码中了,常用两个字节表示一个字符;

但是,Unicode也存在一个问题,就是文本全部使用英文的话,存储空间加大;

  • UTF-8编码 把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节

要传输的文本包中存在大量英文字符,UTF-8可以节省空间;


在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器


Python的字符串

在最新的Python 3版本中,字符串是以Unicode编码的

  • ord()函数获取字符的整数表示
  • chr()函数把编码转换成对应的字符
1
2
3
4
5
6
7
8
print(ord('A'))
# 64
print(ord('中'))
# 20013
print(chr(66))
# B
print(chr(25991))
# '文'
  • 如果知道字符的整数编码,还可以用十六进制这么写str:
1
2
print('\u4e2d\u6587')
# '中文'

Python的字符串类型是str,在内存中以Unicode表示;若要在网上传输,或保存在硬盘中就需要把str转为bytes;

Python对bytes类型的数据用带b前缀的单/双引号表示:

1
x = b'ABC'

bytes的每个字符都只占用一个字节

  • str的encode()方法可以编码为指定的bytes
  • decode()方法将bytes转为str
1
2
3
4
5
6
7
8
9
10
11
>>> 'ABC'.encode('ascii')
# b'ABC'
>>> '中文'.encode('utf-8')
# b'\xe4\xb8\xad\xe6\x96\x87'

# --------分割线-----------

>>> b'ABC'.decode('ascii')
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
  • len()函数计算str包含的字符数
  • 若参数改为bytes,则len()函数计算字节数
1
2
3
4
5
6
7
8
9
10
11
12
>>> len('ABC')
3
>>> len('中文')
2
# -------------

>>> len(b'ABC')
3
>>> len(b'\xe4\xb8\xad\xe6\x96\x87')
6
>>> len('中文'.encode('utf-8'))
6

格式化

利用%实现

%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数

  • 其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数
1
2
3
4
>>> '%2d-%02d' % (3, 1)
' 3-01'
>>> '%.2f' % 3.1415926
'3.14'

参考资料:http://www.liaoxuefeng.com/