通过网络零零散散地学习Python基础语法,买了入门书中最厚的一本——《python学习手册》来查漏补缺。以下笔记只记我认为自己不熟悉的。而且都是流水账。
模块就是为了保存代码的python文件,因为交互式环境中程序无法保存。
‘模块’通常既有被另一个python文件所导入的文件之意,也有脚本之意(顶层程序文件)。
作为被导入的模块文件必须以.py作后缀
在shell中运行时,可以把脚本的输出结果重定向到另一个py文件中:
python test1.py>test2.py
在系统提示模式(shell)中使用文扩展名,但在导入时不使用
简单来说,每一个扩展名为py后缀的Python源代码文件都是模块。导入从本质上讲就是载入另一个文件并读取其内容
不重启窗口的情况下,在同一个会话中再次运行文件(默认情况下同一个模块在会话中只能导入一次,只在第一次导入时执行,即使随后更改了模块源码,再import导入也不会生效!)
此时就需要用到imp标准库中的reload函数;语法:
from imp import reload #python2中reload()是内置函数
reload(module_name) #不带扩展名
python中一切皆对象,对象无非是内存中的一部分,包含数据和相关指令的集合
Python程序可分解成 模块、语句、表达式及对象:
1、程序由模块构成
2、模块包含语句
3、语句包含表达式
4、表达式定义并处理对象
python变量不需要提前声明,定义和赋值在一个表达式中完成。
加号“+”对于不同对象有不同的意义,对于数字是加法,对于字符串是合并——这也是多态的一种体现。
方法:对象调用的函数,将会通过一个调用表达式触发
类型特定方法:除了序列的一般方法外(每种序列都适用的),字符串操作还有一些独特的方法。
find() 返回传入的子字符串的偏移量,未找到就返回-1
replace() 对全局进行搜索和替换,未搜索到则返回原字符串
注意字符串方法都是原地操作,返回一个新字符串而不会改变原值,因为字符串是不可变类型
split() 分割成列表
upper() 全体大写
lower() 全体小写
strip() rstrip() lstrip() 三个去空格方法
%和.format 两个格式化操作
如何区分通用的序列操作和特定的类型操作?一条简明的法则:
可作用于多种类型的通用操作都是以内置函数和表达式的形式出现的(如len(x),X[1]),而特定的类型操作是以句点法方法调用的形式出现的
如何查看一个对象可用句点法访问的所有属性和可调用的所有方法,以及所有隐藏属性和方法?
使用内置函数dir(),传递一个对象作为其参数,会返回一个包含该对象所有属性的列表;而由于方法也是属性,故也包括在列表中
dir()函数只能简单地列出所有属性,要查询其作用,就要用到help()函数(如help(string.replace)注:help是一个随python一起分发的面向系统代码的接口
列表解析源自集合的概念,它是一种通过对序列中每一项运行一个表达式来创建一个新列表的方法,每次一个从左至右。
映射是一个其他对象的集合,但他们与列表和字符串不同,是通过键而非相对位置来存储的。实际上映射并没有任何可靠的从左到右的顺序,他们是简单地将键映射到值
正因为字典不是通过相对位置存储值的,在集合中没有固定顺序,故打印字典时呈现的键值对顺序可能与创建时写入的不同
通过键对字典进行索引来读或改变键所关联的值。字典的索引操作和序列使用的相同语法,只不过方括号中的是键而非下标值
Python没有类型声明,不把代码限制在特定的类型上,使代码自动适用于多种类型——这是python重要的思维方法——多态。
多态——调用相同操作的对象不同,操作的意义就不同。 如加号‘+’处理字符串对象时合并,操作数值对象时就是相加