设置环境变量python
Linux: $ PATH=$PATH:/usr/local/python3/bin/python3 # 设置环境变量 $ python3 --version Python 3.4.0 Windows: set path=%path%;C:\python34
一、在Linux下使用下面的代码能够直接./xxx.py执行脚本,在Windows下不能够:#!/usr/bin/python3express
二、执行脚本:$ python3 hello.pyjson
三、字符编码,须要写在文件的开头,好比支持中文编码:
# -*- coding: UTF-8 -*- 或者 #coding=utf-8,函数
#coding=utf-8 import json student = {} student['Name'] = '张三' student['Age'] = 18 student[12] = True print json.dumps(student, ensure_ascii=False, encoding='utf-8')
注意:#coding=utf-8 的 = 号两边不要空格,且utf-8必须为小写。工具
四、关键字:>>> import keyword,>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']测试
五、代码注释:#!/usr/bin/python3,也可使用''' XXX'''和"""XXX""",即连续的3个单引号或双引号ui
#单引号注释 #!/usr/bin/python3 ''' 这是多行注释,用三个单引号 这是多行注释,用三个单引号 这是多行注释,用三个单引号 ''' print("Hello, World!") #双引号注释 #!/usr/bin/python3 """ 这是多行注释,用三个单引号 这是多行注释,用三个单引号 这是多行注释,用三个单引号 """ print("Hello, World!")
六、代码块:python最具特点的就是使用缩进来表示代码块,不须要使用大括号({})。缩进的空格数是可变的,可是同一个代码块的语句必须包含相同的缩进空格数,缩进不一致,会致使运行错误。this
七、多行语句:使用反斜杠(\)来实现多行语句,在 [], {}, 或 () 中的多行语句,不须要使用反斜杠(\):编码
total = item_one + \ item_two + \ item_three 在 [], {}, 或 () 中的多行语句,不须要使用反斜杠(\),例如: total = ['item_one', 'item_two', 'item_three', 'item_four', 'item_five']
注意!多行的内容都属于同一块,所以缩进必定要一致。.net
八、数据类型:python中数有四种类型:整数、长整数、浮点数和复数。
整数, 如 1
长整数 是比较大的整数
浮点数 如 1.2三、3E-2
复数 如 1 + 2j、 1.1 + 2.2j
九、字符串:python中单引号和双引号使用彻底相同。使用三引号('''或""")能够指定一个多行字符串。
转义符 '\'天然字符串, 经过在字符串前加r或R。 如 r"this is a line with \n" 则\n会显示,并非换行。
python容许处理unicode字符串,加前缀u或U, 如 u"this is an unicode string"。
字符串是不可变的。按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
word = '字符串'
sentence = "这是一个句子。"
paragraph = """这是一个段落,
能够由多行组成"""
十、代码组:
if expression : suite elif expression : suite else : suite
十一、换行输出:print("xxx"),
不换行输出:print( x, end=" " )或
print( y, end="END" )
print(a, b, c, d, e, sep='+'),输出abcde并使用+号链接。
十二、导入模块:
将整个模块(somemodule)导入,格式为: import somemodule 从某个模块中导入某个函数,格式为: from somemodule import somefunction 从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc 将某个模块中的所有函数导入,格式为: from somemodule import *
1三、help() 函数:调用 python 的 help() 函数能够打印输出一个函数的文档字符串,按下 : q 两个按键即退出说明文档
1四、多个变量同时赋值:a, b, c = 1, 2, "runoob"
1五、Python3 中有六个标准的数据类型:
Number(数字)
String(字符串)
List(列表)
Tuple(元组)
Sets(集合)
Dictionary(字典)
1六、Python3 支持 int、float、bool、complex。内置的 type() 函数能够用来查询变量所指的对象类型:
type()来判断数据的类型: >>> a, b, c, d = 20, 5.5, True, 4+3j >>> print(type(a), type(b), type(c), type(d)) <class 'int'> <class 'float'> <class 'bool'> <class 'complex'> 能够用 isinstance 来判断: >>>a = 111 >>> isinstance(a, int) True >>> isinstance 和 type 的区别在于: class A: pass class B(A): pass isinstance(A(), A) # returns True type(A()) == A # returns True isinstance(B(), A) # returns True type(B()) == A # returns False 区别就是: type()不会认为子类是一种父类类型。 isinstance()会认为子类是一种父类类型。
1七、字符串:Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠(\)转义特殊字符:
str = 'Runoob' print (str) # 输出字符串 print (str[0:-1]) # 输出第一个到倒数第二个的全部字符 print (str[0]) # 输出字符串第一个字符 print (str[2:5]) # 输出从第三个开始到第五个的字符 print (str[2:]) # 输出从第三个开始的后的全部字符 print (str * 2) # 输出字符串两次 print (str + "TEST") # 链接字符串
字符串的这种输出方式一样适用于列表等其余集合数据类型。与 C 字符串不一样的是,Python 字符串不能被改变。向一个索引位置赋值,好比word[0] = 'm'会致使错误。
1八、列表:列表支持使用不一样的数据类型组成同一个列表:
#!/usr/bin/python3 list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ] tinylist = [123, 'runoob'] print (list) # 输出完整列表 print (list[0]) # 输出列表第一个元素 print (list[1:3]) # 从第二个开始输出到第三个元素 print (list[2:]) # 输出从第三个元素开始的全部元素 print (tinylist * 2) # 输出两次列表 print (list + tinylist) # 链接列表
与Python字符串不同的是,列表中的元素是能够改变的:
1九、元组:元组与列表相似,不一样之处在于元组的元素不能修改:
#!/usr/bin/python3 tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2 ) tinytuple = (123, 'runoob') print (tuple) # 输出完整元组 print (tuple[0]) # 输出元组的第一个元素 print (tuple[1:3]) # 输出从第二个元素开始到第三个元素 print (tuple[2:]) # 输出从第三个元素开始的全部元素 print (tinytuple * 2) # 输出两次元组 print (tuple + tinytuple) # 链接元组
20、集合:是一个无序不重复元素的序列:
#!/usr/bin/python3 student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'} print(student) # 输出集合,重复的元素被自动去掉 # 成员测试 if('Rose' in student) : print('Rose 在集合中') else : print('Rose 不在集合中') # set能够进行集合运算 a = set('abracadabra') b = set('alacazam') print(a) print(a - b) # a和b的差集 print(a | b) # a和b的并集 print(a & b) # a和b的交集 print(a ^ b) # a和b中不一样时存在的元素
注意:建立一个空集合必须用 set() 而不是 { },由于 { } 是用来建立一个空字典。
2一、字典:是经过key-value来存取数据:
#!/usr/bin/python3 dict = {} dict['one'] = "1 - 菜鸟教程" dict[2] = "2 - 菜鸟工具" tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'} print (dict['one']) # 输出键为 'one' 的值 print (dict[2]) # 输出键为 2 的值 print (tinydict) # 输出完整的字典 print (tinydict.keys()) # 输出全部键 print (tinydict.values()) # 输出全部值
输出结果:
1 - 菜鸟教程 2 - 菜鸟工具 {'name': 'runoob', 'site': 'www.runoob.com', 'code': 1} dict_keys(['name', 'site', 'code']) dict_values(['runoob', 'www.runoob.com', 1])
注意:
一、字典是一种映射类型,它的元素是键值对。
二、字典的关键字必须为不可变类型,且不能重复。
三、建立空字典使用 { }。
四、不容许同一个键出现两次。建立时若是同一个键被赋值两次,后一个值会被记住
五、键必须不可变,因此能够用数字,字符串或元组充当,而用列表就不行
字典是支持无限极嵌套的,以下面代码:
citys={ '北京':{ '朝阳':['国贸','CBD','天阶','我爱我家','连接地产'], '海淀':['圆明园','苏州街','中关村','北京大学'], '昌平':['沙河','南口','小汤山',], '怀柔':['桃花','梅花','大山'], '密云':['密云A','密云B','密云C'] }, '河北':{ '石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'], '张家口':['张家口A','张家口B','张家口C'], '承德':['承德A','承德B','承德C','承德D'] } }
可使用以下方法进行列出:
for i in citys['北京']: print(i)
将列出以下结果:
朝阳 海淀 昌平 怀柔 密云
for i in citys['北京']['海淀']: print(i)
输出以下结果:
圆明园 苏州街 中关村 北京大学
2二、数据类型转换:
int(x [,base])将x转换为一个整数 float(x)将x转换到一个浮点数 complex(real [,imag])建立一个复数 str(x)将对象 x 转换为字符串 repr(x)将对象 x 转换为表达式字符串 eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象 tuple(s)将序列 s 转换为一个元组 list(s)将序列 s 转换为一个列表 set(s)转换为可变集合 dict(d)建立一个字典。d 必须是一个序列 (key,value)元组。 frozenset(s)转换为不可变集合 chr(x)将一个整数转换为一个字符 ord(x)将一个字符转换为它的整数值 hex(x)将一个整数转换为一个十六进制字符串 oct(x)将一个整数转换为一个八进制字符串
2三、python 使用 lambda 来建立匿名函数。
所谓匿名,意即再也不使用 def 语句这样标准的形式定义一个函数。
#!/usr/bin/python3 # 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2; # 调用sum函数 print ("相加后的值为 : ", sum( 10, 20 )) print ("相加后的值为 : ", sum( 20, 20 ))
2四、Python做用域:
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的做用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的做用域的,也就是说这这些语句内定义的变量,外部也能够访问,以下代码:
>>> def test(): ... msg_inner = 'I am from Runoob' >>> if True: ... msg = 'I am from Runoob' ... >>> msg 'I am from Runoob' >>>
在if中定义的变量msg能够在外部继续访问,而定义在函数test()内的msg_inner变量只能在函数内访问。
2五、遍历字典和列表
#字典遍历 knights = {'gallahad': 'the pure', 'robin': 'the brave'} #遍历keys for a in knights.keys(): print(a) #遍历values for a in knights.values(): print(a) #同时遍历keys和values for k, v in knights.items(): print(k, v, sep=':') #列表遍历 mylst = ['tic', 'tac', 'toe'] for a in mylst : print(a) #遍历列表和索引 for i, v in enumerate(mylst): print(i, v, sep=':') #反向遍历列表 for v in reversed(mylst): print(v) #遍历排序后的列表 for v in sorted(mylst): print(v)
2六、文件读写
cities = { '北京':{ '海淀区', '朝阳区' }, '广州':{ '番禺区', '海珠区' } } # 打开一个文件 f = open("temp.txt", "w") s = str(cities) #写入数据到文件 f.write(s) # 关闭打开的文件 f.close() #打开读取文件 f2 = open("temp.txt", "r") #读取所有行 print(f2.readlines()) #关闭读取文件 f2.close()
2七、对象序列化和反序列化
#对象序列化 import pickle # 使用pickle模块将数据对象保存到文件 data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close() #对象反序列化,使用pprint和print好像同样? import pprint, pickle #使用pickle模块从文件中重构python对象 pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) pprint.pprint(data1) print(data1) data2 = pickle.load(pkl_file) pprint.pprint(data2) print(data2) pkl_file.close()
2八、异常处理try..exception..finally
import sys #自定义异常处理类 class MyError(Exception): def __init__(self, value): self.value = value def __str__(self): return repr(self.value) #产生异常的除法函数 def DivNum(x, y): if y == 0: raise NameError('除数不能为零') #除数为零抛出异常 elif y < 0: raise MyError("除数不能小于零") else: return x / y; try: f = DivNum(10, -1) print(f) except NameError as err: print("OS error: {0}".format(err)) except ValueError: print("Could not convert data to an integer.") except: #或者使用else: print("Unexpected error:", sys.exc_info()[0], sys.exc_info()[1]) finally: #最后都会执行的代码 print("到此一游!") #除了可使用finally进行异常清理 #还可使用with语句进行预处理清理 with open("myfile.txt") as f: for line in f: print(line, end="")
2九、类的定义和使用
#类定义 class people: #定义基本属性 name = '' age = 0 #定义私有属性,私有属性在类外部没法直接进行访问,使用两根下划线 __weight = 0 #定义构造方法 def __init__(self,n,a,w): self.name = n self.age = a self.__weight = w def speak(self): print("%s 说: 我 %d 岁。" %(self.name,self.age)) #单继承示例 class student(people): grade = '' def __init__(self,n,a,w,g): #调用父类的构函 people.__init__(self,n,a,w) self.grade = g #覆写父类的方法 def speak(self): print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade)) #另外一个类,多重继承以前的准备 class speaker(): topic = '' name = '' def __init__(self,n,t): self.name = n self.topic = t def speak(self): print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic)) #多重继承 class sample(speaker,student): a ='' def __init__(self,n,a,w,g,t): student.__init__(self,n,a,w,g) speaker.__init__(self,n,t) def __add(self): #类的私有方法和私有变量同样使用两根下划线命名 print("add") test = sample("Tim",25,80,4,"Python") test.speak() #方法名同,默认调用的是在括号中排前地父类的方法 #test.__add() #类的私有方法不能在类的外部调用
30、类的专有方法和运算符重载,参考:http://www.jb51.net/article/59691.htm
__init__ : 构造函数,在生成对象时调用 __del__ : 析构函数,释放对象时使用 __repr__ : 打印,转换 __str__:打印类自身 __setitem__ : 按照索引赋值 __getitem__: 按照索引获取值 __len__: 得到长度 __cmp__: 比较运算 __call__: 函数调用 __add__: 加运算 __sub__: 减运算 __mul__: 乘运算 __div__: 除运算 __mod__: 求余运算 __pow__: 乘方 #重载操做符至关于重写上面的专有方法 class Vector: def __init__(self, a, b): self.a = a self.b = b def __str__(self): return 'Vector (%d, %d)' % (self.a, self.b) def __add__(self,other): return Vector(self.a + other.a, self.b + other.b) v1 = Vector(2,10) v2 = Vector(5,-2) print (v1 + v2)