python语法
python是⼀种解释性的语⾔,执⾏过程会先进⾏编译在解释,但是python的编译不像java⼀样是必须执⾏的。
python中import的包,默认会被编译为pyc⽂件,如果py⽂件没有被修改,该import的pkg就不会在进⾏编译。
(这样实现了编译型语⾔的共享模块的加载速度快,解释性语⾔的跨平台移植性强)
书法行书作品欣赏python的运⾏有三种⽅式:
1) 交互式解释器,解释性语⾔的特性;直接在linux中,输⼊python;
2) 执⾏python脚本,python script.py;
3) 在IDE继承开发环境中开发,可以下载PyCharm;
Python默认的编码格式是ASCII编码,在没有修改编码格式时,是不能读写中⽂的,
python3.0之后,默认encoding是utf-8。
/usr/bin/python 与 /usr/bin/env python的区别:在python .py调⽤的时候没区别,
但是通过chmod a+x *.py,之后./py执⾏的时候,会有不同,env python会寻找path中的第⼀个python安装⽬录。
Python中的标识符,不能以数字开头,由字母,数字,下划线组成。所有的标识符都是⼤⼩写敏感的。
以下划线,开头的标识符,表⽰不能直接被class外部访问到的属性,不能⽤import导⼊,_foo;
以双下划线开头的标识符,表⽰class内部的私有变量,__foo;可以通过对象名._类名__私有属性名,来访问
前后都是双下划线的标识符,表⽰python中的特殊⽅法,构造函数__init__;
python中的保留字符,都是⼩写:
python中的所有代码块的缩进数量必须相同,可以是单个制表符,2个空格或4个空格等。
以缩进表⽰代码块,⽽不是{}
python中的package和module机制,
python中的模块,module,⼀般指⼀个py⽂件,其中包含了变量,常量,函数,class等数据。
python中的包,package,⼀般指⼀个⽬录结构,⽬录下边包括很多模块⽂件或者⼦包。都包含⼀个__init__.py的⽂件
__init__.py⼀般为空,引⽤package的时候,也是引⽤该模块,也可以在此⽂件中,引⽤其他的package,控制包的导⼊⾏为。
如果想⽤from package import *这种写法,需要在__init__.py中初始化__all__,__all__=['file1', 'file2'] #package下有file1和file2两个⽂件。
import X,表⽰将⼀个module或者package,引⽤到当前的namespace,但是访问attri和method,必须提供完整的路径。
from X import *,表⽰引⼊⼀个module或者package,将所有的public object引⽤到当前的namespace,访问时,提供相对的路径。 import subpackage1.a 将模块subpackage.a引⼊该namespace,访问时,仍然需要全路径,subpackage1.a.attr
from subpackage1 import a 将模块a导⼊该namespace,访问a中属性的时候,⽤a.attr
from subpackage1.a import attr 可以直接使⽤attr的表⽰。
python中的空⾏⼀般来表⽰模块的边界,
python中,可以使⽤斜杠"\",来将⼀长⾏代码转变为多⾏代码;[],(),{}中可以任意分为多⾏代码;
python中的字符串,可以在单引号''中,或者双引号""中,或者三引号''' ''''中,三引号中⽅便放很多包括'“”的特殊字符的字符串。 python中同⼀⾏写多⾏代码时,必须加分号;
python中的注释,#注释单⾏,“””注释多⾏“””;
python中的print默认输出换⾏符的,可以在后加逗号","来,避免print输出换⾏符。
像if,while,def,class这样的复合语句中,⾸⾏以关键字开始,冒号":"结束,之后是⾃⼰的⼦句。
if expression :
suite
elif expression :
suit
el :
suit
Python中的变量类型:
python中的变量不需要声明,直接在赋值的时候,将指针赋值给标识符,
1) Number(数值),存储数值,当指定⼀个值时,Number对象会被创建;
var1 = 1;
del语句,删除⼀些对象的引⽤,del var_a,var_b
数值类型的⼏种实例:int----10,long(⽤L表⽰)----10L,float------0.0,complex----(a+bj表⽰)或者complex(a,b)手机超频
2) String(字符串),可以由数字,字母,下划线组成。
索引:从左到右,默认从0开始;
从右到左,默认从-1开始;
截取:变量[头下标:尾下标]
+表⽰字符串的连接运算符,*表⽰字符串的重复操作。int类型的数据不能直接级联,需要str()转换⼀下
打印字符串,print str
3) List(列表),可以由数字,字符,字符串,列表(嵌套)组成。⽤[]来表⽰,有序的对象集合。
list = ['runoob', 786, 2.33]
索引:
截取:
+号和*号类似。
打印列表,print list
ver(l),直接修改list,并没有返回值。
4) Tuple(元组),⽤()来表⽰。内部元素由逗号隔开,相当于只读列表。每个元素的地址不变,但是值是可以变的,⽐如其中有⼀个list,list是可以改变的。
tuple = ('runoob', 786, 2.33)
元组可以进⾏连接组合:tup3 = tup1+tup2, 返回tup1和tup2的连接组成⼀个新的元组。打草鞋
只有⼀个元素的元组,a = tuple(1,) 必须加, 表⽰是⼀个元组,否则该运算符中的优先级处理。
⽆关闭分隔符,-------任何⽆符号的对象,以逗号隔开,默认为元组。
x, y = 1, 2; xy默认为⼀个元组赋值。
元组的内置函数:cmp(tuple1, tuple2),⽐较两个元组;
len(tuple),返回元组中的元素个数;
max/min(tuple),返回元组中的最⼤的值和最⼩的值。
5) Dictionary(字典),⽆序的对象集合,⽤{}来标识,由索引和value组成。
dist = {'name':'join', 'code':6734}
打印字典,print dist;print dist.keys();print dist.values()
python中的类型转换,返回的是⼀个新的对象:
数值类型:1) int(x);2) long(x); 3) float(x); 4) complex(real)
5) chr(x)整数转换为字符, 6) unichr(x) 整数转换为unicode,
7) ord(x)字符转换为整数值; 8) hex(x) 整数转换为16进制字符串;9) oct(x) 整数转换为8进制字符串;
字符串类型:1) str(x);转换为字符串,2) repr(x);转换为表达式字符串,3)eval(str),计算字符串中的有效表达式,返回⼀个对象;
元组类型:1) tuple(s),将s转换为⼀个元组;
列表类型:1) list(x),将序列s转换为⼀个列表;
字典类型:1) list(s),s必须是⼀个序列元组;
python所有的数据类型都是class,变量都是实例对象,可以通过type()查看该变量的数据类型,
n = 1; type(n); 返回’int‘
a = 111; isinstance(a, int); 返回true
isinstance(),可以包含⼦⽗类关系进⾏判断,type(),只负责该class的对象判断。
python中所有的空对象都是None,但是空字符,⽤null或者‘’来表⽰;
判断⼀个字符是否为空。
if str.strip() == '':
python中⾃定义class 函数,可以直接重载python builtin的默认的function,这些function以__开始,结束。
这⼀类的function有:如dir(int) __add__,__sub__,等。
dir(str) __lt__,__gt__,等。
通⽤的function有:__str__,__repr__,等,这两个function都是⽅便打印的。
__delattr__,__tattr__,__getattribute__等function,关于attr管理。
__hash__,存放对象的hash值,主要⽤在哈希值的查找中。
object的打印,默认都是打印的内存地址,__str__,⾯向⽤户,⼀般⽤在print中。
__repr__,⾯向开发者,应⽤在所有其他的场景打印中。
在python2.0中,print还是⼀个系统调⽤函数,在python3.0中,print已经是⼀个内置函数,打印的object需要在括号中;蒸橙子
谎言家 python2.0:print "Hello. world"
python3.0:print("Hello, world")
python3.0中的print函数,可以指定,分隔符,以及⾏尾符,以及句柄,
print ("i","am","hym",p=";",d='\n',file=sys.stdout,flush=Fal)
默认的分隔符是空格,默认的⾏尾符是换⾏,默认的输出是stdout,不⽴即进⾏flush;
python3中,没有了xrange,只有range,功能上与xrange是相同的。
range和xrange的区别:
range(start, end, step),在某个范围之内,按某个步值,产⽣⼀个list,需要将list完全存放下来;
xrange,在功能上与range完全相同,但是返回的是⼀个⽣成器,在需要产⽣⼀个很⼤的list时,xrange的性能⽐range⾼很多。
⼏种list的遍历⽅式:
a = ['a', 'b', 'c', 'd']
1) for i in a: print i
2) for i in xrange(len(a)): print a[i]
3) for i, var in enumerate(a): print a[i],var
python内部提供的函数,enumerate(iterable, start),可以指定开始的节点
⼏种dict的遍历⽅式:
a = {'a':1, 'c':2,‘d’:3}
1) for k in d: print k,d[k]
2) for k,v in d.iteritems(): print k,v
漂亮的生日蛋糕
iteritems(),dict内部的⽅法,实现对key和value的遍历;
类似的还有iterkeys()和itervalues()来分别实现对key和value的遍历
类似的还有view系列,与range⼀样,返回的是完整的dict,不是iterable的对象。
直接调⽤keys()和values()也可以
3) for k, v in d.viewitems():print k,v
构造dict的⽅法:
1) 两个list合并为⼀个dict, d = dict(zip('a', 'b', 'c'), (1, 2, 3)) 产⽣⼀个dict对象,{‘a’:1,‘b’:2,‘c’:3}
美味果汁python中的map函数,对指定的序列做函数映射:
map(function, iterable);
def square(x):
return x**2;
map(square, [1,2,3,4,5]) 返回1,4,9,16,25
map(lambda x: x**2, [1,2,3,4,5]) 返回1,4,9,16,25
lambda,定义⼀个匿名的函数映射,
map(lambda x,y:x+y, [1,3,5,7,9], [2,4,6,8,10]) 返回两个list中元素的和,[3,7,11,15,19]
学生早餐食谱
其他的全局函数还有,filter(过滤掉不符合条件的list中的元素),reduce(对列表等中的元素做累加),
def is_odd(n):
return n%2 == 1
newlist = filter(is_odd, [1,2,3,4,5,6,7,8,910])
python的debug模式:
运⾏:Python -m python.script
设置断点:break/b
单⾏执⾏:next/n
打印变量的值:pp
查看当前⾏的代码段:list/l
进⼊函数:step/s