一、数据类型和变量

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

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义。

如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容。

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

Python是动态语言,变量本身类型不固定。

常量通常使用大写字母表示。

Python中有两种除法,一种是/,其计算结果是浮点数,即使两个整数恰好整除,结果也是浮点数;还有一种//,称为地板除,结果取整数,如果有一方是浮点数,那么结果就是浮点数。%是取余操作,结果是整数还是浮点数,取决于最后的除数和被除数的类型。以上和C语言有区别。

在Python中,可以把任何数据看成是一个对象,然后变量就是在过程中用来指向这些数据对象的。把变量赋值,就是把数据和变量关联起来。

Python中整数的大小是没有限制的;浮点数的大小也没有限制,超出范围就是inf(无限大)。

二、字符串和编码

ASCII编码是一个字节,Unicode编码通常是两个字节。

本着节约的精神,出现了UTF-8,把Unicode字符根据不同的数字大小编码成1-6个字节。,通常英文是一个字节,汉字是3个字节。

Python3中字符串是使用Unicode编码,提供ord() 函数获取字符的整数表示,chr() 函数把编码转换为对应的字符。

Python中字符串

Python中字符串类型是str,如果要网络传输,或保存到磁盘上就需要变为以字节为单位的bytes;Python对于bytes类型数据用带b前缀的单引号或双引号表示。

以Unicode表示的str通过encode()方法可以编码为指定的bytes;如果我们从网络或磁盘上读取了字节流,那么读取到的数据就是bytes。要把bytes变为str,就要使用decode()方法。如果bytes中存在一部分的无效字节,可以传入errors='ignore'忽略错误字节。

同时str包含多少字节可以使用len()函数。

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

申明了UTF-8编码并不意味着你的.py文件就是UTF-8编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM编码:

格式化

同C语言一样,使用%来进行格式化,字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%。

>>> 'Hello, %s' % 'world'

'Hello, world'

>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)

'Hi, Michael, you have $1000000.'

占位符替换内容

%d整数

%f浮点数

%s字符串

%x十六进制整数

>>> print('%2d-%02d' % (3, 1))

3-01

>>> print('%.2f' % 3.1343)

3.13

>>>

另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}……,不过这种方式写起来比%要麻烦得多:

>>> print('Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.124))

Hello, 小明, 成绩提升了 17.1%

三、列表list和元组tuple

list

list是一个有序集合-[],可以随时添加和删除其中的元素,可以使用len()函数用来获取其中的个数。

索引是从0 开始的。也可以进行-1倒数开始。

append()用于向list尾部追加元素。

insert(index, 元素)插入到指定位置。

pop()用于删除尾部元素。pop(i)为指定索引位置元素被删除。

其中list内部元素的数据类型可以不同。也可以包含list

tuple

另一种有序列表叫元组tuple-(),和list非常相似,但是一旦初始化就不能够修改。

当定义一个tuple时其中的元素就必须被确认下来。

也可以定义一个空tuple,t = ()

如果定义一个只含一个元素的tuple时,必须在元素后加一个,t = (1, )。

四、条件判断和循环

只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False

input()读取用户的输入,但是注意input读取的是str的数据类型,不能直接和整数进行比较。

Python中只有两种循环:

1. 第一种依次将list或tuple中的每个元素迭代出来。

names = ['a', 'sd', 'sda']

for name in names:

print(name)

提供一个range()函数(前闭后开,从0开始),可以生成一个整数序列,再通过list()函数可以转换为list。

>>> t = range(6)
>>> t
range(0, 6)
>>> t = list(range(6))
>>> t
[0, 1, 2, 3, 4, 5]
>>>

2. 第二种循环是while

sum = 0
n = 99
while n > 0:
sum += n
n = n - 2
print(sum)
break 和 continue

五、使用dict和set

dict

dict是Python中内置的字典,其他语言中称为map。

避免key不存在的错误,有两种办法,一种是in 判断key是否存在。还有就是通过get()方法,如果不存在返回None,或则自己指定value.

'ruixi' in d

d.get('ruixi')

d.get('ruixi', -1)

删除一个key使用pop(key)方法,对应的值也会从dict中删除。

有几个特点:查找速度和插入速度极快,不会随着key的增加而变慢;但是需要大量内存,list与之相反。

key不能使用可变量,list就是。

set

和dict类似,也是一组key的集合,但是不存储value。同时key不能重复。key也不能使用可变量。list是可变量。

要创建一个set,需要提供一个list作为输入集合。 s = set([1, 2, 3]),不能再tuple中嵌套list

使用add(key),添加元素,remove(key),用于移除元素。

>>> a = {'a':(1, 2, 3), 'b':(1, [2, 3])}
>>> a
{'a': (1, 2, 3), 'b': (1, [2, 3])}
>>> a['a']
(1, 2, 3)
>>> a['b']
(1, [2, 3])
>>>
KeyboardInterrupt
>>> a = {(1, 2, 3)}
>>> a
{(1, 2, 3)}
>>> a = {(1, [2, 3])}
Traceback (most recent call last):
File "", line 1, in 
TypeError: unhashable type: 'list'
>>> a = set((1, [2, 3]))
Traceback (most recent call last):
File "", line 1, in 
TypeError: unhashable type: 'list'
>>> a = set((1, 2, 3))
>>> a
{1, 2, 3}
>>> a = set([2, 3])
>>> a
{2, 3}

不变对象

所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。