模块
1 | import sys |
这里的.指的是这个模块中的变量。
1 | from sys import argv |
使用from import可以直接使用名称,但尽量不要如此,以避免命名冲突。
__name__
1 | import math |
这里的__name__若就是"__main__"则是独立运行的程序。
编写模块
每个.py文件都是一个模块,这非常容易。
新建一个文件myModules.py:
1 | def say(): |
运行它:
1 | import myModules |
使用from myModules import *会导入所有不是双下划线开头的对象。
注:尽量不要使用这样的import语句。
使用dir()可以看到所有的属性,del语句可以删除一个变量。
包
包可以将模块组织起来。
每个包的文件夹下要有一个__init__.py文件,子包也需要。
数据类型
下列几种较为常见:
- Booleans
- Numbers(Integers,Floats,Fractions,Complex Number)
- Strings
- Bytes
- Lists
- Tuples
- Dictionaries
- Sets
Booleans
它的值为True或是False,它依然可以被当作数值看待。(非0为真,比如空列表、元组都是假)
Numbers
它有很多种,用type()可以查询它的类型(或者是isinstance(data, class))。
整数(int)可以无限大(在python2中被用作long)。
分数有fractions模块,math中有各式各样的数学函数,但是精度有限。
Lists
List以中括号包括,逗号间隔每个元素,它是可变的,元素可以是任何东西。
向其中加入元素有多种方法,比如使用+,append(x)(插入一个元素到最后),extend()(将一个列表中的所有元素插入到最后,而不是把这个列表作为一个元素),insert(i, x)(将某个元素插入到指定的位置)。
查找元素也有多个方法,比如count(x)(返回出现的次数),in()(只会返回是否在其中),index(x[, i[, j]])(返回第一次出现的位置,没有会引发异常, 返回的数k满足 $i \leq k < j$ )。
删除也有几个方式del和remove()(这也可能引发异常)、pop()(这可以指定位置,同样可能引发异常),被删除后,后面的元素会填补上来,因此在其中永远不会有间隙。
reverse()可以使列表中的元素反向.
切片
不仅可以用[]访问其中的元素,可以用in表达;其中下标可以为负,表示倒数。
而且可以用[]指定一个子序列(切片),它将第一个作为开始,第二个作为结束(不包含,哪怕是-1也可以):
1 | li = [1, 2, 3, 43, 432, 23, 41, 432, 43, 31, 3213, 43] |
输出:
1 | [1, 2, 3, 43, 432, 23, 41, 432, 43, 31, 3213, 43] |
第三个参数就是间隔数,其中,第二个数字指的是结束的数字,它不被包括。
Tuples
Tuple以小括号包括,逗号作为间隔,它是不可变的。
下标,切片(复制了另一份),查询等等不改变它本身的操作与Lists是相同的。
这两者可以通过list()和tuple()互相转化。
1 | nums = [1, 544, 7, 54, 42, 43] |
传递Tuple
使用形如a, b的方式可以以被解释为Tuple。
1 | a, b = b, a |
这样可以直接交换两个变量。
这种方式可以依次赋值多个变量(不仅限于两个)。
Dictionaries
Dictionary可以以形如{key: value1, key2: value2}的方式新建,它类似C++中的map。
键值必须唯一,可以直接用下标访问或者新建。
items()可以返回多个Tuple方便循环访问。
Sets
set()用于实例化一个集合。
添加元素:add()(一个元素),update()(多个元素,可以是集合,列表等等)。
删除元素:discard()(不引发异常),remove()(引发异常),pop()(几乎随机的删除)。
集合操作:union()(并集),intersection()(交集),difference()(在前者而不在后者的元素的集合),symmetric_difference()(只在一个中出现的),issubset()(前者为后者子集时为真),issuperset()(前者为后者超集时为真)。
1 | nums = set([1, 2, 3, 4, 5, 6]) |
引用
注:使用赋值符号只是在传递一个引用,制造副本应使用[:]。
Strings
它是str类下的对象,因此可以查阅str下的多种方法。
前面介绍了format()可以用来格式化字符串。
splitlines()(将多行字符串按行截成列表,不包括换行符),lower()和upper()(用于转换大小写),count()(计数字串),split()(参数指定分隔符,分离字符串为一个列表,第二个参数是分离次数(从左至右))。index()、find()、count()、replace()也都可以使用。
Bytes
by = b'abcd\x65'使用b定义对象,它不可变。(每个字节只能是0~255的16进制数或是ASCII编码)
bytearray()可以转为bytearray类型,它是可变的(下标访问可以改变值)。
encode()将Strings转为Bytes,相反的decode()将Bytes转为Strings。
# -*- coding: windows-1252 -*-可以在文件开头指明编码类型。
None
这是唯一的空值。