1. Python基础介绍
1.1 基础
1.1.1 格式
#
号用来注释缩进,一般用4个空格。请严格遵守!
以
:
结尾时,缩进的语句视为代码块,相当于{}
Python大小写敏感。
1.1.2 数据类型和变量
1. 整数
Python可以处理任意大小的整数。
2. 浮点数
浮点数可以用科学计数法表示。
1.23x10^5
可以用1.23e5
标示。0.000123
可以用1.23e-4
表示。整数和浮点数在计算机内部存储方式不同,整数运算永远是精确的–包括整数除法运算;浮点数运算可能会有四舍五入的误差。
整数的除法为啥是精确的?
在Python中,有两种除法,一种是
/
>>>10/3 3.3333333333333335
/
除法计算结果是浮点数,即使整除。还有一种是
//
,称为地板除,两个整数的除法结果依然是整数。>>>10//3 3
整数的地板除
//
依然是整数,即使除不尽。要做精确的除法,使用/
即可。
3. 字符串
字符串可以用
''
或者""
括起来。转义字符:
\n
表示换行,\t
表示制表符,\
本身也要转义,可以用\\
标示。注:
- 如果字符串内部有很多字符都需要转义,就需要加很多
\n
,Python允许使用r''
表示''
内部的字符串默认不转义。例如:
>>>print('\\\\') \ \ >>>print(r'\\\\') \\\\
- 如果字符串内部有很多换行,用
\n
写在一行里不好阅读,Pyhton允许'''...'''
表示多行内容。
- 如果字符串内部有很多字符都需要转义,就需要加很多
4. 布尔值
True or False
注意区分大小写。
5. 空值
空值None
,类似于java
语言的null
6. 变量
变量名必须是大小写英文、数字和_的组合,且不能以数字开头。Python是动态语言,使用之前不需要定义。
7. 常量
在Python中,通常用全部大写的变量名表示常量,实际上仍是一个变量,Python不提供任何保护机制,所以用全部的大写表示常量,只是一个习惯的用法。
1.2 字符串和编码
1.2.1 字符串编码
最早计算机8bit
表示一个字节(byte
)。一个字节最多能表示256个字符,最早只有127个字母(大小写字母、数字和一些符号),这个编码表被称为ASCII编码。
但是要处理中文,显然一个字节不够,至少两个字节,并且不能跟ASCII编码重复,因此,中国制定了GB2312
编码。各个国家也有自己的编码。全世界的混在一起,避免不了冲突。因此Unicode
诞生。
Unicode
把所有的语言都包含在内。最常用的是两个字节表示一个字符(如果非常生僻的字符,就需要4个字节)。新问题出来了:如果统一用Unicode
编码虽然问题解决了,但是如果您写的文档全部是英文的话,会浪费存储空间。为了解决此问题,又出现了新的编码可变长度的UTF-8
。
UTF-8
编码根据Unicode
字符根据不同的数字大小,编码成1-6个字节。常用的英文字母被编码成1个字节,常用的汉字通常是3个字节,只有生僻的汉字才会编码成4-6个字节。
注:在计算机内存中统一使用Unicode
编码,当需要存储到硬盘或传输的时候,就会转换为UTF-8
编码。用记事本打开的UTF-8
字符,被转换为Unicode
字符到内存里,当保存的时候,再把Unicode
转换为UTF-8
保存到文件。
Python 3版本中,字符串是以Unicode
编码,也就是说Python支持多语言。
Python字符串
常用函数:
ord()
:获取字符的整数的表示.如果知道字符的整数编码,还可以用十六进制写str
>>>'\u4e2d\u6587'
'中文'
chr()
:把编码变成对应的字符。
len()
:计算str
多少个字符。也可以计算多少个bytes
,len(b'ABC')=3
由于Python的字符串类型为str,在内存中以`Unicode`表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘,就需要把str转换为以字节为单位的`bytes`
- Python对
bytes
类型数据都用带b
的前缀的单引号或者双引号来表示
>>>x=b'ABC'
要注意区分`'ABC'`和`b'ABC'`,前者是`Unicode`编码格式的字符串,后者是`bytes`类型的字符串,每个字符占一个字节。
- `Unicode`可以通过`encode()`方法将字符串编码为指定的`bytes`。
>>>'ABC'.encode('ascii')
b'ABC'
>>>'中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'
- 反过来,如果我们从网络中或磁盘上读取了字节流,那么读到的数据就是`bytes`.要把`bytes`转换为`str`,就需要用`decode()`方法:
>>>b'ABC'.decode('ascii')
'ABC'
>>>b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
注意:Python
源代码也是一个文本文件,如果源文件中包含中文,在保存源码文件时,就务必制定为UTF-8
编码。
当Python
解释器读取源代码时,为了让它按UTF-8
编码读取,我们通常在文件开头写上以下两行:
#!/usr/bin/env python 3
# -*- coding:utf-8 -*-
第一行注释为了告诉Linux/OS X系统,这是一个python
可执行程序。windows系统会忽视该行。
第二行注释为了告诉Python
解释器,按照UTF-8
编码格式读取源代码。注:声明了UTF-8
格式,并不代表文本文件是UTF-8
编码格式,必须确保文本编辑器正在使用UTF-8 without BOM编码。
格式化
在Python
中,使用的格式化方式同C语言一致,用%
来实现:
>>>'Hello,%s' % 'world'
'Hello,world'
1.3 list
和tuple
1.3.1 list
list
是一种有序集合。list
使用[]
括号括起来。可以指定获取第index
个元素的值testList[index]
,注意:从0开始.
如果要获取最后一个元素,可以使用testList[-1]
,获取倒数第index
个元素,可以使用testList[-index]
,当然index<=len(testList)
。
常用函数:
1.
list
是一个有序列表,可以使用append()
追加元素:testList.append('item')
2.删除末尾元素,
testList.pop()
,如果删除指定位置的元素,使用testList.pop(i)
3.把某个位置的元素替换成别的元素,可以直接给指定位置元素赋值:
testList[i]='replaceItem'
4.
list
元素中的元素也可以是list
:testList=['a','b',['m','n'],'c']
,包含list
的列表可以使用类似二维数组,多维数组的形式获取元素值。
1.3.2 tuple
tuple
叫元组,也是一种有序列表。与list
非常类似,但是一旦初始化就不能修改。使用()
来括起来。
因为tuple
不可变,因此代码更安全。但是在定义的时候,tuple
就必须被定下来。
定义
tuple
当定义
tuple
时,用()
括起来,如果只有一个元素,括号不能省略。并且后面要加个,
号来避免跟数学表达式中的()
产生歧义:>>>t=(1,) >>>t (1,)
tuple
‘可变’情况当
tuple
包含一个可变的对象,那么该tuple
“可变”。例如:>>>testTuple = ('a','b',['l1','l2'],'c') >>>testTuple[2][0]='n1' >>>testTuple[2][1]='n2' >>>testTuple ('a','b',['n1','n2'],'c')
可见,该
tuple
已经改变,tuple
所谓的“不变” ,实际是各个元素的指向不变。
1.4 条件判断
1.4.1 条件判断
条件判断结果一般是:True
或者False
,注意大小写。
if ... else if ...
可以简写成if ... elif ...
,if
和elif
后面跟:
,然后再写代码块。
再议
input
:input
用来读取用户输入。temp = input('_input: ')
,等待用户输入。从键盘接收的默认是字符串
1.5 循环
Python
提供了两种循环,一种是for ... in ...
,依次把list
或tuple
中的每个元素迭代出来。
>>> names
['I', 'am', 'OK', '!']
>>> for name in names '''...
... print(name)
执行该语句会依次输出:
I
am
OK
!
循环中常用的函数:range(n)
可以生成一个整数序列,从0开始,小于n
第二种循环是while
,只要条件满足,就不断循环。比如:
sum = 0
n = 99
while n>0:
sum = sum + n
n = n-2
print(sum)
1.6 字典dict
和set
1.6.1 dict
python内置了字典:dict的支持,dict全程为dictionary,在其他语言中也成为map对象,使用(key-value)存储。
>>> d={'Hello':100,'World':101,'!':102}
>>> d['!']
102
常用方法:
更新值:
直接对元素赋值,会覆盖掉value.
d['!']=111
,则该d['!']
的值更新为111
获取值:
- 直接操作打印对应的元素
dict[key]
>>>d['Hello'] 100
get()
方法,如果不存在返回None或者空,也可以返回指定的value
,例:
>>>d.get('Hello') 100 >>>d.get('Hellos',-1) ##如果没有'Hellos'对应的值,则返回-1 -1
- 直接操作打印对应的元素
删除元素
要删除一个key,使用
d.pop(key)
方法,该方法会删除指定元素,并输出所删除元素>>>d.pop('World') 101
注意:
和
list
比较:查找和插入速度快,不会随着key的增加,而变化。
需要占用较大的空间,已空间换取时间。
比
list
不足查找和插入的时间随着元素的增加而增加
占用空间少,内存浪费少
必须要记住,
dict
的key
一定是不可变的对象。如果使用可变的对象作为key
,会报以下错误:>>> d={'a':'A','b':'B'} >>> d {'a': 'A', 'b': 'B'} >>> L=['aa','bb'] >>> d[L] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: 'list'
1.6.2 set
>>> s=set(['a','a','a','b','c'])
>>> s
{'c', 'a', 'b'}
注:传入的参数作为一个list
,而显示的{'c', 'a', 'b'}
只是告诉你这个set
中有三个元素,显示的顺序也不一定是'c', 'a', 'b'
,并且重复元素被自动过滤。
常用方法:
add(key)
:添加元素到set
remove(key)
:删除元素
set
可以看成数学意义上的无序和无重复元素的集合,因此,两个set
可以做数学意义上的交集、并集等操作:
>>> s1=set(['a','b','c'])
>>> s1
{'c', 'a', 'b'}
>>>
>>>
>>> s2=set(['b','c','d'])
>>> s2
{'c', 'b', 'd'}
>>> s1&s2 ##交集
{'c', 'b'}
>>> s1|s2 ##并集
{'b', 'c', 'a', 'd'}
set
和dict
的唯一区别就是:没有存储对应的value
,只有key