Python基础笔记
怎么运行写好的Python程序
- 直接双击
- cmd进入文件所在目录输入python helloworld.py命令按回车;再执行helloworld.py
变量
变量与对象
在Python中,一切都是对象,一切都是对象的引用。首先分析下面的赋值语句。
X=5
Python在执行该语句时,其执行过程包含三个步骤:
第一步:创建表示整数5的对象(分配一块内存)。
第二步:检测变量x是否存在,若不存在则创建它
第三步:将变量与对象,通过指针连接起来,从变量到对象的连接称之为引用(变量引用对象)
内存图如下所示:
使用Python变量时必须理解下面几点:
变量没有数据类型的概念,这一点和java C有区别。数据类型属于对象。
变量引用了对象。变量在使用前必须赋值。
例如:
1 | x=5 #创建变量x 引用对象5 |
对象的垃圾回收
Python为每一个对象创建一个计数器,计数器记录对象的引用次数。当计数器为0时(即没有任何变量引用时),对象被删除,其占用的内存空间会被自动回收。
例如:
1 | X=5 x=3.3 #使变量x引用浮点数对象3.3,对象5被回收 |
变量的共享引用
1 | x=5 |
数据类型
Python的主要数据类型有集合、字符串、列表、元组、字典、文件。其中字符串、列表和元组都属于序列,字典属于映射。
集合
集合用{}表示,例如{1,2,3},集合元素是无序、不能重复且不可改变的,相当于java的set数据类型,因此不能将可变对象放入集合中。集合、列表和字典对象均不能加入集合。元组可以作为一个元素加入集合。
集合的一些常用方法如下:
1 | len(集合) #求集合的元素个数 |
字符串
字符串是一种有序的字符集合,用于表示文本数据。单引号和双引号无区别,可以相互嵌套,三引号用于表示多行字符串(块字符)。
字符串的一些常用方法如下:
1 | len(字符串) #求字符串长度 |
列表
列表用[]表示,例如:[3,4,’ab’]。列表的主要特点如下:
- 列表可以包含任意类型的对象
- 列表是一个有序序列
- 列表是可变的。可以添加或者删除列表成员,列表对象可直接修改。
- 列表存储的是对象引用而不是对象本身
列表的常用方法如下:
1 | []/list(列表元素) #创建一个列表 |
元组
元组用()表示,例如:(3,4,’ab’)。元组的主要特点如下:
- 元组可以包含任意类型的对象
- 元组是一个有序序列
- 元组是不可变的。不可以添加或者删除元组成员,元组对象也不能改变。
- 元组存储的是对象引用而不是对象本身
元组的常用方法如下:
1 | ()/tuple() #创建一个元组对象 |
字典
字典是一种无序的可变的映射的集合,包含一系列的键值对。字典用{}表示,例如:{‘name’:’Jack’,’age’:18,’sex’:’男’}。字典的主要特点如下:
- 字典键一般用字符串,字典值可以是任意类型(包括字典)
- 字典是无序可变的映射
- 字典存储的是对象引用而不是对象本身
字典的的常用方法如下:
1 | {}/dict(字典) #创建字典 |
文件
Python用内置的open()函数来打开文件,并创建一个文件对象。open()函数基本格式如下:myfile = open(filename,mode) mode为读写模式
文件的读写模式有下面几种:
- w:写文件。创建新文件,若已存在覆盖原文件
- a:以追加方式写文件。若文件不存在会创建新文件
- r:读文件
- b:访问二进制文件。例:wb、ab、 rb
- +:可同时进行读写操作。如open(file,’w+’)表示以写方式打开文件同时可读
函数
定义函数
Python定义函数的基本格式如下:
1 | def 函数名(参数列表): |
参数列表和返回值都不是必须的
函数的参数
参数的多态性
Python中的变量无类型属性,变量可引用不同类型的对象。同一个函数,传递的实际参数类型不同时,可获得不同的结果,体现了多态性。例如:
1 | def add(a,b):return a+b #支持+运算的对象均可以作为参数 |
参数赋值传递
先看一个例子:
1 | add(b=‘abc’,a=’de’) #返回’deabc’ |
即参数赋值传递与参数的顺序无关
可变参数可在函数中被修改
例如:
1 | def f(a): a[0]=’abc’ #修改列表第一个值 |
有默认值的参数
例如:
1 | def(a,b=20):return a+b #参数b默认值为20 |
传递任意个数的参数
在参数前加*可以接受任意个数的参数(或不传),这些参数会保存在一个元组中。例如:
1 | def add(a,*b): |
必须通过赋值传递的参数
在定义函数时,带星号参数后的参数必须通过赋值传递
1 | def add(a,*b,c): |
lambda函数
lambda函数用于定义一个匿名函数,可将函数赋值给变量,通过变量调用。其基本格式如下:
lambda 参数表:表达式
例如:
1 | add= lambda a,b:a+b #定义函数并赋值给变量 |
lambda函数体中不能使用其他Python函数
函数列表
Python允许将函数作为列表对象,然后通过列表所以来调用函数。例如:
1 | d=[lambda a,b:a+b,lambda a,b:a*b] #使用lambda函数创建一个列表 |
模块
导入模块
在Python中,模块就是一个包含变量、函数或者类的程序文件(*.py)。模块需要先导入才能使用其中的变量或者函数。可使用import或者from语句来导入模块,基本格式如下:
1 | import 模块名称 |
import语句用于导入整个模块,通过“模块名称.对象名称”的方式来引用;from语句用于导入模块中的指定对象,导入对象可以直接使用,不需要使用模块名称来作为限定符。
例如:
1 | import math |
使用from导入模块时,应注意可修改对象、同名变量(函数)覆盖问题。为避免不必要冲突,尽量用import导入。
执行模块
下面的模块文件helloworld.py包含了一条赋值语句和一条输出语句,代码如下:
1 | x=100 |
用import导入helloworld模块
可以看出用import导入模块时,重新导入并不会改变模块中变量在之前已经赋的值
用from导入helloworld模块
可以看出用from导入模块时,重新导入会使模块变量初始化
重新载入模块
Python提供了reload函数来重新载入并执行模块代码,以初始化相关变量 。使用reload重载模块时,如果模块文件已经被修改,则会执行修改后的代码。如果模块未导入,执行reload重载则会报错。代码如下:
1 | from imp import reload #导入reload函数 |
模块搜索路径
在使用模块导入功能时,不能在import或者from语句中指定模块文件路径,只能依赖于Python模块搜索路径。可以使用标准模块sys的path属性来查看当前搜索路径设置。例如:
Python按照先后顺序依次在path列表中搜索模块。如果要导入的模块不在这些目录中,导入操作失败。通常,sys.path有四部分组成。
- 程序的当前目录
- Python标准库文件
- 任何.pth文件包含的目录(手动配置)
- 操作系统的环境变量PYTHONPATH中包含的目录(手动配置)
.pth文件通常放在Python安装目录中,例如D:\Python35,文件名可以随意取。.pth文件中,每个目录占一行,可包含多个目录,例如:
F:\myCodes\ECMAScript6
F:\Desktop
在操作系统中设置环境变量PYTHONPATH的值
sys.path列表在程序启动时,自动进行初始化。例如:
图片中标红的地方正是刚刚.pth文件和环境变量中设置的路径。操作模块路径的一些方法(临时操作)如下:
1 | del path[2] #删除第三个路径 |
隐藏模块数据
用from语句导入模块时,以单下划线开头的变量不会被导入。例如:
1 | #helloworld.py |
在交互模式下导入helloworld.py:
可以看到_y和_add没有导入。
可以在模块文件开头使用__all__变量设置使用from导入时的变量名。例如:
1 | #helloworld.py |
在交互模式下导入模式测试:
只要是__all__列表中的变量名,不管是否以下划线开头均会导入。不在__all__列表中的变量不会被导入。