Python学习笔记--Python基础

来源:互联网 发布:mac子弹头试色twig 编辑:程序博客网 时间:2024/04/19 09:43

本文为廖雪峰Python教程的学习笔记
具体内容,可参考如下链接:
http://www.liaoxuefeng.com/


1. 字符串  

 字符串是以单引号’或双引号”括起来的任意文本。”或”“本身只是一种表示方式,不是字符串的一部分。
 如果’本身也是一个字符,可以用”“括起来,比如”I’m OK”。
 如果字符串内部既包含’又包含”,可以用转义字符\来标识。  
 Python还允许用r”表示,”内部的字符串默认不转义。但如果字符串以\结尾,会报错。
 如果字符串内部有很多换行,用\n写在一行里不好阅读,为了简化,Python允许用”’…”’的格式表示多行内容。多行字符串”’…”’还可以在前面加上r使用。
 字符串为不可变对象,可以通过下标访问字符串特定位置的字符,但不能改变。

2. 空值  

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

3. 除法  

 在Python中,有两种除法。
 一种除法是/,/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数;
 还有一种除法是//,称为地板除,两个整数的除法仍然是整数。

4. 字符串和编码  

 ASCII编码是1个字节。
 Unicode编码把所有语言都统一到一套编码里,通常是2个字节,如果要用到非常偏僻的字符,就需要4个字节。
 UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
 例如,用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文;浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器。
 在Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言。
 对于单个字符的编码,Python提供了:
 ord()函数获取字符的整数表示。
 chr()函数把编码转换为对应的字符。
 由于Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes。
 Python对bytes类型的数据用带b前缀的单引号或双引号表示。’ABC’和b’ABC’,前者是str,后者虽然内容显示得和前者一样,但bytes的每个字符都只占用一个字节。
 encode()函数可以将Unicode表示的字符串编码为指定的bytes,bytes中无法显示为ASCII字符的字节用\x##显示。

#str转换为ASCII码'ABC'.encode('ascii')#中文转化为UTF-8,只能用UTF-8编码为bytes'哈哈'.encode('utf-8')

 decode()函数将bytes变为str。(从网络或磁盘上读取的字节流是bytes)
 由于Python源代码也是一个文本文件,所以,当源代码中包含中文的时候,在保存源代码时,就需要指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3# -*- coding: utf-8 -*-

 第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
 第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,源代码中的中文输出可能会有乱码。

5. 格式化字符串

 Python的格式化方式与C语言一致。用%实现。

'Hi, %s, I\'m %d years old.' % ('Mike', 23)"Hi, Mike, I'm 23 years old."

 在字符串内部,%s表示用字符串替换,%d表示用整数替换,%f表示用浮点数替换,%x表示十六进制整数,%%来表示一个%。有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
 格式化整数和浮点数还可以指定是否补0和整数与小数的位数:

'%2d-%02d' % (3, 1)  ' 3-01'  '%.2f' % 3.1415926  '3.14''  

 格式化字符串的时候,可以用Python的交互式命令行测试,方便快捷。

6. list & tuple

 list为有序列表,可以包含不同的数据类型。初始化后可以修改。

L = ['a', 'b']

 append(ele)函数追加元素ele到list末尾。
 insert(index, ele)函数将元素ele插入到index处。
 pop()函数删除list末尾元素。包含参数index,删除index处元素。
 
 tuple也为有序列表,一旦初始化就不能修改,指向永远不变。元素在定义的时候就要确定。因为不可变,所以代码更安全。

#定义包含一个元素的tuple,如果没有,表示数字1t = (1, )

7. dict & set

 dict使用键-值存储,查找速度快,一个key只能对应一个value。
 key必须为不可变对象。

#dict的初始化d = {'name1': 1, 'name2': 2, 'name3': 3}d['name4'] = 4d['name4']

 如果key不存在,dict会报错。通过in语句判断key是否存在,也可以通过get()方法判断,如果key不存在,返回None,或者自己指定的值。

#判断'name1'是否存在'name1' in dd.get('name1')#不存在返回-1d.get('name1', -1)

 set是一组不重复的key的集合。创建set需要提供一个list作为输入集合。
 add(key)方法添加元素到set中。
 remove(key)删除元素。
 两个set可以做交(&), 并(|)运算。

s = set([1,2,3])s.add(4)

8. 不变对象 & 可变对象

 str是不变对象,而list是可变对象。对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。
 例如,当我们对str类型a调用a.replace(‘a’, ‘A’)时,实际上调用方法replace是作用在字符串对象’abc’上的,而这个方法虽然名字叫replace,但却没有改变字符串’abc’的内容。相反,replace方法创建了一个新字符串’Abc’并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串’abc’,但变量b却指向新字符串’Abc’了。

0 0
原创粉丝点击