Python基础(数据类型、编码、list、tuple、dict、set)-0

一、数据类型和变量

  1. 如果字符串内部既包含'又包含"怎么办?可以用转义字符来标识。
  2. 如果字符串里面有很多字符都需要转义,就需要加很多,为了简化,Python还允许用r''表示''内部的字符串默认不转义。
  3. 如果字符串内部有很多换行,用 写在一行里不好阅读,为了简化,Python允许用'''...'''的格式表示多行内容。
  4. 空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
  5. Python是动态语言,变量本身类型不固定。
  6. 常量通常使用大写字母表示。
  7. Python中有两种除法,一种是/,其计算结果是浮点数,即使两个整数恰好整除,结果也是浮点数;还有一种//,称为地板除,结果取整数,如果有一方是浮点数,那么结果就是浮点数。%是取余操作,结果是整数还是浮点数,取决于最后的除数和被除数的类型。以上和C语言有区别。
  8. 在Python中,可以把任何数据看成是一个对象,然后变量就是在过程中用来指向这些数据对象的。把变量赋值,就是把数据和变量关联起来。
  9. Python中整数的大小是没有限制的;浮点数的大小也没有限制,超出范围就是inf(无限大)。

二、字符串和编码

  1. ASCII编码是一个字节,Unicode编码通常是两个字节。
  2. 本着节约的精神,出现了UTF-8,把Unicode字符根据不同的数字大小编码成1-6个字节。,通常英文是一个字节,汉字是3个字节。
  3. Python3中字符串是使用Unicode编码,提供ord() 函数获取字符的整数表示,chr() 函数把编码转换为对应的字符。
Python中字符串
  1. Python中字符串类型是str,如果要网络传输,或保存到磁盘上就需要变为以字节为单位的bytes;Python对于bytes类型数据用带b前缀的单引号或双引号表示。
  2. 以Unicode表示的str通过encode()方法可以编码为指定的bytes;如果我们从网络或磁盘上读取了字节流,那么读取到的数据就是bytes。要把bytes变为str,就要使用decode()方法。如果bytes中存在一部分的无效字节,可以传入errors='ignore'忽略错误字节。
  3. 同时str包含多少字节可以使用len()函数。
  4. 由于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编码:
格式化
  1. 同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
>>>
  1. 另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}、{1}……,不过这种方式写起来比%要麻烦得多:
>>> print('Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.124)) 
Hello, 小明, 成绩提升了 17.1%

三、列表list和元组tuple

list

  1. list是一个有序集合-[],可以随时添加和删除其中的元素,可以使用len()函数用来获取其中的个数。
  2. 索引是从0 开始的。也可以进行-1倒数开始。
  3. append()用于向list尾部追加元素。
  4. insert(index, 元素)插入到指定位置。
  5. pop()用于删除尾部元素。pop(i)为指定索引位置元素被删除。
  6. 其中list内部元素的数据类型可以不同。也可以包含list

tuple

  1. 另一种有序列表叫元组tuple-(),和list非常相似,但是一旦初始化就不能够修改。
  2. 当定义一个tuple时其中的元素就必须被确认下来。
  3. 也可以定义一个空tuple,t = ()
  4. 如果定义一个只含一个元素的tuple时,必须在元素后加一个,t = (1, )。

四、条件判断和循环

  1. 只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False
  2. input()读取用户的输入,但是注意input读取的是str的数据类型,不能直接和整数进行比较。
  3. 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)
  1. break 和 continue

五、使用dict和set

dict

  1. dict是Python中内置的字典,其他语言中称为map。
  2. 避免key不存在的错误,有两种办法,一种是in 判断key是否存在。还有就是通过get()方法,如果不存在返回None,或则自己指定value.
'ruixi' in d
d.get('ruixi')
d.get('ruixi', -1)
  1. 删除一个key使用pop(key)方法,对应的值也会从dict中删除。
  2. 有几个特点:查找速度和插入速度极快,不会随着key的增加而变慢;但是需要大量内存,list与之相反。
  3. key不能使用可变量,list就是。

set

  1. 和dict类似,也是一组key的集合,但是不存储value。同时key不能重复。key也不能使用可变量。list是可变量。
  2. 要创建一个set,需要提供一个list作为输入集合。 s = set([1, 2, 3]),不能再tuple中嵌套list
  3. 使用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 "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> a = set((1, [2, 3]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> a = set((1, 2, 3))   
>>> a
{1, 2, 3}
>>> a = set([2, 3])
>>> a
{2, 3}

不变对象

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