数据类型
整数,包括负整数,为方便用十六进制表示整数,前缀为0x,如0xff00。
浮点数,对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9
,或者12.3e8
,0.000012可以写成1.2e-5。
字符串,如果字符串内部既包含'
又包含"
怎么办?可以用转义字符\
来标识,转义字符\
可以转义很多字符,比如\n
表示换行,\t
表示制表符,字符\
本身也要转义,所以\\
表示的字符就是\,
如果字符串里面有很多字符都需要转义,就需要加很多\
,为了简化,Python还允许用r''
表示''
内部的字符串默认不转义。如果字符串内部有很多换行,用\n
写在一行里不好阅读,为了简化,Python允许用'''...'''
的格式表示多行内容。
/除法的两个整数计算结果是浮点数,//地板除的两个整数结果是整数,%取余。
编码
8 bit(比特)= 1 byte(字节)
对于单个字符的编码,Python提供了ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符:
以Unicode表示的str
通过encode()
方法可以编码为指定的bytes
反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes
。要把bytes
变为str
,就需要用decode()
方法
要计算str
包含多少个字符,可以用len()
函数
1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节
python读文件通常在开头加这两句
#!/usr/bin/env python3 第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释
# -*- coding: utf-8 -*- 第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码
另一种格式化字符串的方法是使用字符串的format()
方法,它会用传入的参数依次替换字符串内的占位符{0}
、{1}
……,不过这种方式写起来比%要麻烦得多
常见占位符:%d整数,%f浮点数,%s字符串,%x十六进制整数
列表
list是一种有序的集合,可以随时添加和删除其中的元素。
list是一个可变的有序表,所以,可以往list中追加元素到末尾:classmated.append('Adam')
把元素插入到指定的位置,比如索引号为1
的位置:classmates.insert(1,'Jack')
要删除指定位置的元素,用pop(i)
方法,其中i
是索引位置:classmates.pop(1)
要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:classmates[1]='Mike'
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改.
只有1个元素的tuple定义时必须加一个逗号,
,来消除歧义:t=(1,)
dict字典,key-value存储,判断key是否存在,'name' in d。d.get()函数。
通过key计算位置的算法称为哈希算法(Hash)
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。
pass
语句什么都不做,那有什么用?实际上pass
可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass
,让代码能运行起来。
如果你已经把my_abs()
的函数定义保存为abstest.py
文件了,那么,可以在该文件的当前目录下启动Python解释器,用from abstest import my_abs
来导入my_abs()
函数,注意abstest
是文件名。
自定义函数
定义默认参数要牢记一点:默认参数必须指向不变对象!
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*
号。在函数内部,参数numbers
接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数。
*nums
表示把nums
这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。
**extra
表示把extra
这个dict的所有key-value用关键字参数传入到函数的**kw
参数,kw
将获得一个dict,注意kw
获得的dict是extra
的一份拷贝,对kw
的改动不会影响到函数外的extra
。
命名关键字参数需要一个特殊分隔符*
,*
后面的参数被视为命名关键字参数。