Python基础(自学Python系列笔记--1)(不定期更新)
l Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言
n 交互性:可以在python提示符,直接互动执行写程序
n 解释性语言,类似PHP和Perl
l 特点
n 易于学习、易于阅读、易于维护
n 广泛的标准库
n 互动模式:可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片段
n 可移植:基于开放源代码的特性
n 可扩展:用C/C++完成,之后再调用
n 数据库、GUI编程
n 可嵌入:将Python切入到C/C++程序,获得脚本化的能力
l Windows环境搭建
n 官网/download/
n 配置环境变量 #path %path%;F:\Python27
n 其他环境变量?
u pythonpath: python搜索路径,默认的import模块从其中寻找
u pythonstartup: python启动后执行此文件中指定的执行代码
u pythoncaseok: 加入该变量,会使导入模块时不区分大小写
u pythonhome: 另一种模块搜索路径,通常内嵌于pythonstartup或pythonpath目录中,从而两个模块库更容易切换
n 命令行参数
u python -V 大写V,输出版本,小写v会有怪异事件
u python file 直接执行file
l Python保留字符
n and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while with yield
l 行和缩进
n python代码块不使用{}来控制类,函数以及其他逻辑判断
n 缩进的空白数量是可变的,但是所有代码块语句必须包含相同的缩进空白数量,这个必须严格执行,都用tab或固定空格数目
l 多行语句
n 可以以斜杠\将一行语句分为多行显示
n 语句中包含[](){}可以不用多行连接符
l 引号
n 可以用单引号 双引号 三引号表示,其中三引号可以写段落,多用作注释
l 注释
n 单行的用 # 开头即可
n 多行的用 ‘’’ 段落 ‘’’
l 空行
n 函数或类的方法用空行分隔,表示一段新的代码的开始
n 类和函数入口之间也用一行空行分隔
n 空行与代码缩进不同,不插入也不会出错,但是为了日后代码维护和重构
l 同一行显示多条语句
n 在同一行中使用多条语句,语句之间使用;分隔
l 多个语句构成代码组
n 缩进相同的一组语句构成一个代码块
n if,while,def,class这样的复合语句,首行以关键字开始,以冒号:结束,该行之后一行或多行嗲吗构成代码组,将首行以及后面的代码组称为一个子句clause
l 变量类型
n 变量不需要声明,赋值操作即是声明与定义过程
n 变量赋值之后才会被创建
n 标准数据类型
u Numbers String List Tuple(元祖) Dictionary(字典)
n del a 表示删除这个引用,删除这个变量
n 数字类型
u int long float complex
n 字符串
u +字符串连接
u *字符串重复
n 列表
u 相当于Vector(java),内容可以不同
u 用[]
n 元组
u 用()
u 但是元组的内容不可变
u 即定义了之后,不能对里面的元素进行赋值了
n 元字典
u 列表是有序的对象集合,字典是无序的对象集合
u 字典中的元素是通过键来储存,而不是通过偏移
u 例:tinydict = {‘name’:’john’,’code’:6743,’dept’:’sales’}
n Python数据类型转换
u 用数据内置的类型进行转换
l 运算符
n 算术运算符
u +-*/
u a**b à a^b
u a//b -> 取整除,返回商的整数部分
n 比较运算符
u <> != 都是不等于
n 赋值运算符
u += -= 等与C无异
n 位运算符
u & |
u ^ 异或
u ~ 取反
u << >> 左移右移
n 逻辑运算符
u and or not 用括号来表示层级运算
n 成员运算符
u in 和 not in
u 在指定序列里找,序列可以是元组,列表
l 条件语句
n if elif else
n 注意else if 变成了 elif
n 不支持switch语句,多个条件判断,只能用elif实现
l 循环语句
n while (条件)
u while里,可以用break和continue
u while(): else:
l else中的语句会在循环正常执行完的情况下执行
l 正常执行完,即不是通过break跳出而中断的
n for
u 由于python希望每种做法都是唯一的,因此这里的for和C中的for不同
u 语句格式如下
l for iterating_var in sequence:
l statements(s)
u 例:
l for letter in ‘Python’:
l print letter
l 最后输出 字符串Python中的各个字母
u 例:
l fruits = [‘banana’, ‘apple’, ‘mango’]
l for fruit in fruits:
l print fruit
l 最后输出fruits里的每个元素了
u 例:
l for num in range(10,20): //range函数,返回一个序列,包括10没有20
l for i in range(2,num):
l if num%i == 0:
l j=num/i
l print ‘%d = %d * %d’ % (num,i,j) //注意格式化输出
l break
l else:
l print num, ‘is a prime’
n 循环嵌套
u 与C无异
n break语句
u 与C无异,终止最深层的循环
n continue语句
u 与C无异
n pass语句
u 空语句,为了保持程序的完整性
u 就是用作占位语句
l python数学函数
n abs(x) 绝对值
n cmp(x) 比较,小于返回-1,等于返回0,大于返回1
n exp(x) 指数
n fabs(x) float的绝对值
n log(a,b) log以b为底a的对数
n pow(x,y) x^y x**y
n sqrt(x) 返回平方根
l python随机函数
n choice(seq) 如random.choice(range(10)) 从0到9中随机挑选一个整数
n random() 随机生成一个实数,在[0,1)范围内
n seed可以设置种子,python会自动选择种子
n shuffle(lst) 将序列的所有元素随机排序
n uniform(x.y) 随机生成一个实数,在[x,y]范围内
l python字符串
n 注意转义字符\,与C差别不大
n 字符串运算符
u + 连接
u * 重复
u [] 通过索引获取字符
u [:] 截取其中一部分
u in not in 看字符串里是否有指定字符
n 格式化字符串
u %的和C区别不大
u 其他的辅助格式
l python列表
n 用[]
n 可以用del list1[2]来删除其中的一个元素
l python元组
n 用()
n 元组只包含一个元素时,在后面加逗号tup1 = (50,)
l python函数
n 规则
u 代码块以def开头,后接函数标识符名和圆括号()
u 函数内容以冒号起始,并且缩进
u return[表达式]
n 所有参数在python里都是按引用传递的,如果在函数里修改了参数,那么在调用这个函数的函数里,参数的值也被改变了//其实是符合面向对象的思想的
n python里关键字参数顺序并不重要,即使用关键字参数允许函数调用时参数的顺序与声明时不一致,python解释器会用参数名匹配参数值
l python包
n 包是一个分层次的文件目录结构,定义了一个由模块及子包,和子包下的子包组成的python应用环境
n 有包phone,phone下有pots.py isdn.py G3.py
n 在包里创建 __init__.py
n 在这个文件里
u from pots import ports
u from isdn import isdn
u from G3 import G3
n 之后在其他py文件里,import phone,那么包里的类就都可以用了
l I/O函数
n raw_input 读取一行,返回一个字符串,无换行符
l python中传值或者传引用
n 传递参数的时候,python不允许程序员选择采用传值还是传引用,python参数传递采用的肯定是“传对象引用”的方式,实际上,这种方式相当于传值和传引用的一种综合。
n 如果函数收到的是一个可变对象的引用,就可以修改其原始值,那么就相当于传引用来传递对象
n 如果收到不可变对象(数字、字符或者元组)的引用,那么不能直接修改原始对象,相当于通过传值来传递对象
n a=b的话,a和b的地址是相同的,如果只是想拷贝,那么就用a=b[:]