Python学习笔记
- [x] 2016/2/4 0.10:Python基础 数据字符串和变量
- [x] 2016/2/4 13.21:Python基础 使用dict和set
- [x] 2016/2/5 20.44:Python基础 递归函数
Python是一种计算机程序设计语言=高级语言≠简单
1、Python简介
作者:**Guido van Rossum** 时间:**1989年圣诞期间**- Python提供了非常完善的基础代码库
- 含有大量的第三方库
优雅
明确
简单
写尽量少容易看明白的代码
2、安装Python
- 官网下载
- 勾上Add Python 3.5 to PATH,点击Install Now
- 默认安装到c:\Python35目录下
安装成功后打开命令行输入Python,出现>>>,表示我们已经在python的开发环境中,输入python代码后回车执行,exit()回车/关闭命令行窗口退出Python来开发环境
安装失败则需要手动将python.exe添加到环境变量Path当中
Python解释器
解释器:执行.py为扩展名的Python代码
常见的解释器:
- CPython:C语言开发,官方解释器,也是命令行输入Python启动的解释器。
- IPython:基于Cpython之上的一个交互式解释器
- PyPy:提高执行速度,和CPthon有所不同
- Jython:运行在java平台
- IronPython:运行在.Net平台
3、第一个Python程序
在命令行的状态下直接输入代码,获得运行结果,但是无法保存代码
- 在交互环境下(>>>)输入代码,回车执行
- 实用print()函数打印字符串,可以使用单引号双引号,但是不能混用
- exit()退出Python
使用文本编辑器
使用文本编辑器可以保存代码,并且随时执行,在命令行使用Python 文件名.py的形式执行,会一次性的执行所有源码,不会像有在命令行状态下交互式输入代码的机会,不要使用word和记事本
输入和输出
输出:使用print()函数可以打印字符串,整数,多个字符串以逗号隔开,python会将逗号转换为空格
输入:使用input()函数实现输入,输入的数据赋值给变量,直接写变量名或者print(变量名)都可以输出我们刚刚输入的内容,input(‘xxx’)函数中可以写一些字符作为提示信息
4、Python基础
Python语法较为简单,采用缩进方式,每一行都是一句代码,末尾冒号:表示之后的缩进语句为一个代码块,#号开头为注释,解释器会忽略掉注释。
按照约定俗成的管理,应该始终坚持使用4个空格的缩进
缩进会强迫你写出格式化的代码
缩进会强迫你写出较少缩进的代码,多采用函数
缩进会导致复制粘贴失效非常坑爹
Python程序大小写敏感
数据类型和变量
- 整数
- 浮点数
- 字符串,转移字符\,r’‘中的字符串默认不转义,”’…”’表示多行内容
- 布尔值False,True
- 空值 None不同于0
- 变量,字符数字下划线,不能以数字开头,动态语言
- 常量 不能变的变量,以大写字母表示,实际上可以变
字符串和编码
编码 | 占位 | 说明 |
---|---|---|
ASCII | 1个字节 | 英文 |
GB2312 | 2个字节 | 中国 |
Unicode | 2个字节 | Python内部 |
UTF-8 | 1-6个字节 | 推荐使用withoutBOM |
格式化与c语言类似,采用%
使用list和tuple
- list列表:可以随时添加和删除内部的元素
- append(),insert(),pop(),pop(i)
- list可以包含不容的数据类型,可以包含list
- tuple:元组,初始化后不可改变
- tuple:声明一个元素的元组,需要用逗号标识
- tuple:可以在元组内部包含list,通过改变list的元素,来实现元组元素的改变
条件判断
计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。
if,else语句,elif=else if;
注意不要忘记冒号:用法与java类似
input默认输入的是str类型,需要自行转化
a=input('请输入你的身高')
height=float(a)
b=input('请输入你的体重')
weight=float(b)
bmi=weight/(height*height)
print('你的BMI是%f'%bmi)
if bmi<18.5:
print('过轻')
elif bmi<25:
print('正常')
elif bmi<28:
print('过重')
elif bmi<32:
print('肥胖')
else:
print('严重肥胖')
循环
- for循环 for x in xxx
L=['Bart','Lisa','Adam']
for x in L:
print('Hello,%s!'%x)
- while循环
L=['Bart','Lisa','Adam']
m=len(L)
n=0
while n<m:
print('Hello,%s!'%L[n])
n=n+1
使用dict和set
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
dict的key必须是不可变对象
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。要创建一个set,需要提供一个list作为输入集合:
对于不可变对象来说,调用自身的方法只是创建了一个新的对象并返回,本身没有被改变
5、函数
调用函数
函数名是一个引用,指向函数对象,万物皆对象?
函数名可以复制给变量,相当于给函数起了一个别名
定义函数
使用
def
来定义函数,依次输入def, 函数名,括号,参数,冒号,缩进代码块,return返回结果,没有return则代码结束后返回None
可以使用
from xxx import my(params)
来导入自定义的函数,xxx为py文件的名字
空函数,函数体使用
pass
语句,可以表示一个占位符,也可以用在if
语句中,缺少pass
会出现语法错误,个人认为直接写return
?有什么区别呢
对函数参数进行检查类型异常处理
函数可以返回多个值,其实返回的是一个元组,按照位置赋值给各个变量
import math
def a(a,b,c):
for x in(a,b,c):
if not isinstance(x,(int,float)):
raise TypeError('类型错误!')
if a==0:
return 0-c/b
d=math.sqrt(b*b*1.0-4*a*c)
return (0-b+d)/(2*a),(0-b-d)/(a*2)
函数的参数
位置参数 | 默认参数 | 可变参数 | 关键字参数 | 命名关键字参数 | 组合 |
---|---|---|---|---|---|
power(x,y) | power(x,y=2) | power(*x) | power(**kw) | power(*,x,y) | |
必选参数在前,默认参数在后,默认参数为不可变对象 | list,tuple | dict | 限制关键字参数的名字 |
递归函数
递归函数逻辑清晰但是容易导入栈溢出,如果有对尾递归优化过的语言,可以使用尾递归来解决栈溢出的问题
def move (n,a,b,c):
if n==1:
print(a,'->',c)
else:
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)