入门)"/>
Learn Python in IMOOC(入门)
Python:优雅、明确、简单适合的领域:web网站和各种网络服务、系统工具和脚本、作为“胶水”语言把其他语言开发的模块包装起来方便使用
不适合的领域:贴近硬件的代码(首先C)、移动开发:IOS/Android有各自的开发语言(ObjC,Swift/Java)、游戏开发:C/C++
实际应用:
国外:YouTube、 OpenStack
国内:豆瓣、搜狐闪电邮箱等等。。
广泛应用于:Google Yahoo NASA(美国航空航天局)
和其他语言对比
类型 运行速度 代码量
C 编译为机器码 非常快 非常多
Java 编译为字节码 快 多
Python 解释执行 慢 少
Python源码不能加密
跨平台的语言
2.7版――不兼容――3.3版本
有些第三方库不能再3.3版本运行――2.7版本使用
CMD 命令行窗口
python 进入Python交互式窗口
exit()退出交互式窗口
NotePad++ 设置首选项 utf-8(无bomd)格式
行首不能有空格 python对缩进要求严格
到python文件的目录,执行dir查看所有文件,python 文件名执行python文件
数据类型
整型 十六进制 0x前缀 0-9,a-f表示
浮点型 10用e替代
字符串 单引号 '' 双引号 " " 括起来的任何文本
布尔值 True False(注意大小写) 用 and or not 运算
空值 none 特殊的空值 不是0 0 是有意义的
print语句
print语句可以向屏幕上输出指定的文字,
注意:当我们python交互式环境下编写代码时,>>>是python解释器的提示符,不是代码的一部分
文本编辑器编写代码不要自己添加>>>
print 语句也可以跟上多个字符串,用逗号“,"隔开,就可以连成一串输出
print回一次打印出每个字符串,遇到”,”会输出一个空格,
print 也可以打印整数或者计算结果
注释 #
变量
用一个变量名表示,变量名必须是大小写英文、数字和_的组合,且不能用数字开头
等号 = 是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量
这种变量本身类型不固定的语言称之为动态语言与之对应的是静态语言。
静态语言在定义变量是必须指定变量类型,若赋值时类型不匹配会报错,Java是静态语言(动态语言比静态语言更灵活)
等差公式
an= a1+(n-1)*d
sn = a1*n + (n*(n-1)*d)/2
sn = (a1+an)*n/2
定义字符串
字符串可以用'' ""括起来表示的
若包含' 就用"" 括起来
若包含" 就用''括起来
如果包含' 也包含 " 就用转义字符 \
\n 换行
\t 制表符
\\ \字符本身
raw 字符串与多行字符串
一个字符串包含很多需要转义的字符,可以在字符串前面加个前缀r,表示这是一个raw字符串
r'....'
但是r'...'表示法不能表示多行字符串,也不能表示包含'和"的字符串
如果要表示多行字符串,可以用'''...'''表示
Unicode字符串
ASCII编码
GB2312编码
print u'中文'
中文
转义: u'中文\n日文\n韩文'
多行'''第一行
第二行'''
raw '''python的Unicode字符串支持"中文",
"日文",
"韩文"等多种语言'''
如果遇上UnicodeDecodeError
首行加上 #-*- coding:utf-8 -*-
因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True
List有序列表
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。list中的元素是按照顺序排列的。直接用 [ ] 把list的所有元素都括起来,就是一个list对象
list中包含的元素并不要求都必须是同一种数据类型,我们完全可以在list中包含各种数据:
使用索引时,千万注意不要越界
使用倒序索引时,也要注意不要越界
添加新元素
第一个办法是用 list 的 append() 方法,把新同学追加到 list 的末尾:
append()总是把新的元素添加到 list 的尾部。
插入中间的方法是用list的 insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素:
删除元素
用list的pop()方法删除最后一个元素
用list的pop(序号)方法删除指定位置的元素
替换 L[1]=‘元素’
tuple有序列表
tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。
list和tuple的区别
创建tuple和创建list唯一不同之处是用( )替代了[ ]。
tuple没有 append()方法,也没有insert()和pop()方法。所以,新同学没法直接往 tuple 中添加,老同学想退出 tuple 也不行。
获取 tuple 元素的方式和 list 是一模一样的,我们可以正常使用 t[0],t[-1]等索引方式访问元素,但是不能赋值成别的元素
tuple和list一样,可以包含 0 个、1个和任意多个元素。
正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义:
tuple 元素嵌入[]可改变tuple的内容
if语句:
注意: Python代码的缩进规则。具有相同缩进的代码被视为代码块,上面的3,4行 print 语句就构成一个代码块(但不包括第5行的print)。如果 if 语句判断为 True,就会执行这个代码块。
缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
注意: if 语句后接表达式,然后用:表示代码块开始。
如果你在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车:
if...else...语句:
利用 if ... else ... 语句,我们可以根据条件表达式的值为 True 或者 False ,分别执行 if 代码块或者 else 代码块。
注意: else 后面有个“:”。
if-elif-else语句:
要避免嵌套结构的 if ... else ...,我们可以用 if ... 多个elif ... else ... 的结构,一次写完所有的规则:
for循环:
依次取出list中的每一个元素,并把元素赋值给 name,然后执行for循环体(就是缩进的代码块)
While循环
和 for 循环不同的另一种循环是 while 循环,while 循环不会迭代 list 或 tuple 的元素,而是根据表达式判断循环是否结束。
while循环每次先判断 x < N,如果为True,则执行循环体的代码块,否则,退出循环。
在循环体内,x = x + 1 会让 x 不断增加,最终因为 x < N 不成立而退出循环。
如果没有这一个语句,while循环在判断 x < N 时总是为True,就会无限循环下去,变成死循环,所以要特别留意while循环的退出条件。
break语句:
用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句。
在循环过程中,可以用break退出当前循环,还可以用continue跳过后续循环代码,继续下一次循环。
嵌套循环:
在循环内部,还可以嵌套循环
for x in ['A', 'B', 'C']:
for y in ['1', '2', '3']:
print x + y
dict键值对 :
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
名字称为key,对应的成绩称为value,dict就是通过 key 来查找 value。
花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
由于dict也是集合,len() 函数可以计算任意集合的大小:
注意: 一个 key-value 算一个,因此,dict大小为3。
访问dict
可以简单地使用 d[key] 的形式来查找对应的 value,这和 list 很像,不同之处是,list 必须使用索引返回对应的元素,而dict使用key:
注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d:
print d['Paul']
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
print d.get('Bart')
dict的特点
查找速度快(而list的查找速度随着元素增加而逐渐下降。)
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
由于dict是按 key 查找,所以,在一个dict中,key不能重复。
dict的第二个特点就是存储的key-value序对是没有顺序的!这和list不一样:
不能用dict存储有序的集合。
dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。
{
'123': [1, 2, 3], # key 是 str,value是list
123: '123', # key 是 int,value 是 str
('a', 'b'): True # key 是 tuple,并且tuple的每个元素都是不可变对象,value是 boolean
}
最常用的key还是字符串,因为用起来最方便。
dict是可变的,也就是说,我们可以随时往dict中添加新的 key-value
d['Paul'] = 72
如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value:
直接使用for循环可以遍历 dict 的 key:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
>>> for key in d:
... print key
...
Lisa
Adam
Bart
由于通过 key 可以获取对应的 value,因此,在循环体内,可以获取到value的值
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
set无序:
创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:
s = set(['A', 'B', 'C'])
set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
set不能包含重复的元素
set会自动去掉重复的元素
由于set存储的是无序集合,所以我们没法通过索引来访问。
访问 set中的某个元素实际上就是判断一个元素是否在set中。
可以用 in 操作符判断:
看来大小写很重要,'Bart' 和 'bart'被认为是两个不同的元素。
set的特点
set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
最后,set存储的元素也是没有顺序的。
直接使用 for 循环可以遍历 set 的元素:
注意: 观察 for 循环在遍历set时,元素的顺序和list的顺序很可能是不同的,而且不同的机器上运行的结果也可能不同。
注意到set的元素是tuple,因此 for 循环的变量被依次赋值为tuple。
由于set存储的是一组不重复的无序元素,因此,更新set主要做两件事:
一是把新的元素添加到set中,二是把已有元素从set中删除
添加元素时,用set的add()方法:
如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:
删除set中的元素时,用set的remove()方法:
如果删除的元素不存在set中,remove()会报错:
所以用add()可以直接添加,而remove()前需要判断。
判断元素是否在set中,使用in操作符。
abs()有且仅有1个参数
比较函数 cmp(x, y) 就需要两个参数
int()函数可以把其他数据类型转换为整数:
str()函数把其他类型转换成 str:
函数
在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑
如果没有return语句,函数执行完毕后也会返回结果,只是结果为 None。
return None可以简写为return。
# math包提供了sin()和 cos()函数,我们先用import引用它:
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
注意:Python的math包提供了sqrt()函数用于计算平方根。
使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。
函数 move(n, a, b, c) 的定义是将 n 个圆盘从 a 借助 b 移动到 c。
def move(n, a, b, c):
if n ==1:
print a, '-->', c
return
move(n-1, a, c, b)
print a, '-->', c
move(n-1, b, a, c)
move(4, 'A', 'B', 'C')
.
Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数:
int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数。
可见,函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值。
更多推荐
Learn Python in IMOOC(入门)
发布评论