10 分钟快速入门 Python3的教程
Python是由吉多·范罗苏姆(GuidoVanRossum)在90年代早期设计。它是如今最常用的编程语言之一。它的语法简洁且优美,几乎就是可执行的伪代码。
欢迎大家斧正。英文版原作LouieDinh@louiedinh邮箱louiedinh[at][谷歌的信箱服务]。中文翻译GeoffLiu。
注意:这篇教程是基于Python3写的。如果你想学旧版Python2,我们特别有另一篇教程。
#用井字符开头的是单行注释 """多行字符串用三个引号 包裹,也常被用来做多 行注释 """
1.原始数据类型和运算符
#整数 3#=>3 #算术没有什么出乎意料的 1+1#=>2 8-1#=>7 10*2#=>20 #但是除法例外,会自动转换成浮点数 35/5#=>7.0 5/3#=>1.6666666666666667 #整数除法的结果都是向下取整 5//3#=>1 5.0//3.0#=>1.0#浮点数也可以 -5//3#=>-2 -5.0//3.0#=>-2.0 #浮点数的运算结果也是浮点数 3*2.0#=>6.0 #模除 7%3#=>1 #x的y次方 2**4#=>16 #用括号决定优先级 (1+3)*2#=>8 #布尔值 True False #用not取非 notTrue#=>False notFalse#=>True #逻辑运算符,注意and和or都是小写 TrueandFalse#=>False FalseorTrue#=>True #整数也可以当作布尔值 0and2#=>0 -5or0#=>-5 0==False#=>True 2==True#=>False 1==True#=>True #用==判断相等 1==1#=>True 2==1#=>False #用!=判断不等 1!=1#=>False 2!=1#=>True #比较大小 1<10#=>True 1>10#=>False 2<=2#=>True 2>=2#=>True #大小比较可以连起来! 1<2<3#=>True 2<3<2#=>False #字符串用单引双引都可以 "这是个字符串" '这也是个字符串' #用加号连接字符串 "Hello"+"world!"#=>"Helloworld!" #字符串可以被当作字符列表 "Thisisastring"[0]#=>'T' #用.format来格式化字符串 "{}canbe{}".format("strings","interpolated") #可以重复参数以节省时间 "{0}benimble,{0}bequick,{0}jumpoverthe{1}".format("Jack","candlestick") #=>"Jackbenimble,Jackbequick,Jackjumpoverthecandlestick" #如果不想数参数,可以用关键字 "{name}wantstoeat{food}".format(name="Bob",food="lasagna") #=>"Bobwantstoeatlasagna" #如果你的Python3程序也要在Python2.5以下环境运行,也可以用老式的格式化语法 "%scanbe%sthe%sway"%("strings","interpolated","old") #None是一个对象 None#=>None #当与None进行比较时不要用==,要用is。is是用来比较两个变量是否指向同一个对象。 "etc"isNone#=>False NoneisNone#=>True #None,0,空字符串,空列表,空字典都算是False #所有其他值都是True bool(0)#=>False bool("")#=>False bool([])#=>False bool({})#=>False
2.变量和集合
#print是内置的打印函数 print("I'mPython.Nicetomeetyou!") #在给变量赋值前不用提前声明 #传统的变量命名是小写,用下划线分隔单词 some_var=5 some_var#=>5 #访问未赋值的变量会抛出异常 #参考流程控制一段来学习异常处理 some_unknown_var#抛出NameError #用列表(list)储存序列 li=[] #创建列表时也可以同时赋给元素 other_li=[4,5,6] #用append在列表最后追加元素 li.append(1)#li现在是[1] li.append(2)#li现在是[1,2] li.append(4)#li现在是[1,2,4] li.append(3)#li现在是[1,2,4,3] #用pop从列表尾部删除 li.pop()#=>3且li现在是[1,2,4] #把3再放回去 li.append(3)#li变回[1,2,4,3] #列表存取跟数组一样 li[0]#=>1 #取出最后一个元素 li[-1]#=>3 #越界存取会造成IndexError li[4]#抛出IndexError #列表有切割语法 li[1:3]#=>[2,4] #取尾 li[2:]#=>[4,3] #取头 li[:3]#=>[1,2,4] #隔一个取一个 li[::2]#=>[1,4] #倒排列表 li[::-1]#=>[3,4,2,1] #可以用三个参数的任何组合来构建切割 #li[始:终:步伐] #用del删除任何一个元素 delli[2]#liisnow[1,2,3] #列表可以相加 #注意:li和other_li的值都不变 li+other_li#=>[1,2,3,4,5,6] #用extend拼接列表 li.extend(other_li)#li现在是[1,2,3,4,5,6] #用in测试列表是否包含值 1inli#=>True #用len取列表长度 len(li)#=>6 #元组是不可改变的序列 tup=(1,2,3) tup[0]#=>1 tup[0]=3#抛出TypeError #列表允许的操作元组大都可以 len(tup)#=>3 tup+(4,5,6)#=>(1,2,3,4,5,6) tup[:2]#=>(1,2) 2intup#=>True #可以把元组合列表解包,赋值给变量 a,b,c=(1,2,3)#现在a是1,b是2,c是3 #元组周围的括号是可以省略的 d,e,f=4,5,6 #交换两个变量的值就这么简单 e,d=d,e#现在d是5,e是4 #用字典表达映射关系 empty_dict={} #初始化的字典 filled_dict={"one":1,"two":2,"three":3} #用[]取值 filled_dict["one"]#=>1 #用keys获得所有的键。 #因为keys返回一个可迭代对象,所以在这里把结果包在list里。我们下面会详细介绍可迭代。 #注意:字典键的顺序是不定的,你得到的结果可能和以下不同。 list(filled_dict.keys())#=>["three","two","one"] #用values获得所有的值。跟keys一样,要用list包起来,顺序也可能不同。 list(filled_dict.values())#=>[3,2,1] #用in测试一个字典是否包含一个键 "one"infilled_dict#=>True 1infilled_dict#=>False #访问不存在的键会导致KeyError filled_dict["four"]#KeyError #用get来避免KeyError filled_dict.get("one")#=>1 filled_dict.get("four")#=>None #当键不存在的时候get方法可以返回默认值 filled_dict.get("one",4)#=>1 filled_dict.get("four",4)#=>4 #setdefault方法只有当键不存在的时候插入新值 filled_dict.setdefault("five",5)#filled_dict["five"]设为5 filled_dict.setdefault("five",6)#filled_dict["five"]还是5 #字典赋值 filled_dict.update({"four":4})#=>{"one":1,"two":2,"three":3,"four":4} filled_dict["four"]=4#另一种赋值方法 #用del删除 delfilled_dict["one"]#从filled_dict中把one删除 #用set表达集合 empty_set=set() #初始化一个集合,语法跟字典相似。 some_set={1,1,2,2,3,4}#some_set现在是{1,2,3,4} #可以把集合赋值于变量 filled_set=some_set #为集合添加元素 filled_set.add(5)#filled_set现在是{1,2,3,4,5} #&取交集 other_set={3,4,5,6} filled_set&other_set#=>{3,4,5} #|取并集 filled_set|other_set#=>{1,2,3,4,5,6} #-取补集 {1,2,3,4}-{2,3,5}#=>{1,4} #in测试集合是否包含元素 2infilled_set#=>True 10infilled_set#=>False
3.流程控制和迭代器
#先随便定义一个变量 some_var=5 #这是个if语句。注意缩进在Python里是有意义的 #印出"some_var比10小" ifsome_var>10: print("some_var比10大") elifsome_var<10:#elif句是可选的 print("some_var比10小") else:#else也是可选的 print("some_var就是10") """ 用for循环语句遍历列表 打印: dogisamammal catisamammal mouseisamammal """ foranimalin["dog","cat","mouse"]: print("{}isamammal".format(animal)) """ "range(number)"返回数字列表从0到给的数字 打印: 0 1 2 3 """ foriinrange(4): print(i) """ while循环直到条件不满足 打印: 0 1 2 3 """ x=0 whilex<4: print(x) x+=1#x=x+1的简写 #用try/except块处理异常状况 try: #用raise抛出异常 raiseIndexError("Thisisanindexerror") exceptIndexErrorase: pass#pass是无操作,但是应该在这里处理错误 except(TypeError,NameError): pass#可以同时处理不同类的错误 else:#else语句是可选的,必须在所有的except之后 print("Allgood!")#只有当try运行完没有错误的时候这句才会运行 #Python提供一个叫做可迭代(iterable)的基本抽象。一个可迭代对象是可以被当作序列 #的对象。比如说上面range返回的对象就是可迭代的。 filled_dict={"one":1,"two":2,"three":3} our_iterable=filled_dict.keys() print(our_iterable)#=>dict_keys(['one','two','three']),是一个实现可迭代接口的对象 #可迭代对象可以遍历 foriinour_iterable: print(i)#打印one,two,three #但是不可以随机访问 our_iterable[1]#抛出TypeError #可迭代对象知道怎么生成迭代器 our_iterator=iter(our_iterable) #迭代器是一个可以记住遍历的位置的对象 #用__next__可以取得下一个元素 our_iterator.__next__()#=>"one" #再一次调取__next__时会记得位置 our_iterator.__next__()#=>"two" our_iterator.__next__()#=>"three" #当迭代器所有元素都取出后,会抛出StopIteration our_iterator.__next__()#抛出StopIteration #可以用list一次取出迭代器所有的元素 list(filled_dict.keys())#=>Returns["one","two","three"]
4.函数
#用def定义新函数 defadd(x,y): print("xis{}andyis{}".format(x,y)) returnx+y#用return语句返回 #调用函数 add(5,6)#=>印出"xis5andyis6"并且返回11 #也可以用关键字参数来调用函数 add(y=6,x=5)#关键字参数可以用任何顺序 #我们可以定义一个可变参数函数 defvarargs(*args): returnargs varargs(1,2,3)#=>(1,2,3) #我们也可以定义一个关键字可变参数函数 defkeyword_args(**kwargs): returnkwargs #我们来看看结果是什么: keyword_args(big="foot",loch="ness")#=>{"big":"foot","loch":"ness"} #这两种可变参数可以混着用 defall_the_args(*args,**kwargs): print(args) print(kwargs) """ all_the_args(1,2,a=3,b=4)prints: (1,2) {"a":3,"b":4} """ #调用可变参数函数时可以做跟上面相反的,用*展开序列,用**展开字典。 args=(1,2,3,4) kwargs={"a":3,"b":4} all_the_args(*args)#相当于foo(1,2,3,4) all_the_args(**kwargs)#相当于foo(a=3,b=4) all_the_args(*args,**kwargs)#相当于foo(1,2,3,4,a=3,b=4) #函数作用域 x=5 defsetX(num): #局部作用域的x和全局域的x是不同的 x=num#=>43 print(x)#=>43 defsetGlobalX(num): globalx print(x)#=>5 x=num#现在全局域的x被赋值 print(x)#=>6 setX(43) setGlobalX(6) #函数在Python是一等公民 defcreate_adder(x): defadder(y): returnx+y returnadder add_10=create_adder(10) add_10(3)#=>13 #也有匿名函数 (lambdax:x>2)(3)#=>True #内置的高阶函数 map(add_10,[1,2,3])#=>[11,12,13] filter(lambdax:x>5,[3,4,5,6,7])#=>[6,7] #用列表推导式可以简化映射和过滤。列表推导式的返回值是另一个列表。 [add_10(i)foriin[1,2,3]]#=>[11,12,13] [xforxin[3,4,5,6,7]ifx>5]#=>[6,7]
5.类
#定义一个继承object的类 classHuman(object): #类属性,被所有此类的实例共用。 species="H.sapiens" #构造方法,当实例被初始化时被调用。注意名字前后的双下划线,这是表明这个属 #性或方法对Python有特殊意义,但是允许用户自行定义。你自己取名时不应该用这 #种格式。 def__init__(self,name): #Assigntheargumenttotheinstance'snameattribute self.name=name #实例方法,第一个参数总是self,就是这个实例对象 defsay(self,msg): return"{name}:{message}".format(name=self.name,message=msg) #类方法,被所有此类的实例共用。第一个参数是这个类对象。 @classmethod defget_species(cls): returncls.species #静态方法。调用时没有实例或类的绑定。 @staticmethod defgrunt(): return"*grunt*" #构造一个实例 i=Human(name="Ian") print(i.say("hi"))#印出"Ian:hi" j=Human("Joel") print(j.say("hello"))#印出"Joel:hello" #调用一个类方法 i.get_species()#=>"H.sapiens" #改一个共用的类属性 Human.species="H.neanderthalensis" i.get_species()#=>"H.neanderthalensis" j.get_species()#=>"H.neanderthalensis" #调用静态方法 Human.grunt()#=>"*grunt*"
6.模块
#用import导入模块 importmath print(math.sqrt(16))#=>4.0 #也可以从模块中导入个别值 frommathimportceil,floor print(ceil(3.7))#=>4.0 print(floor(3.7))#=>3.0 #可以导入一个模块中所有值 #警告:不建议这么做 frommathimport* #如此缩写模块名字 importmathasm math.sqrt(16)==m.sqrt(16)#=>True #Python模块其实就是普通的Python文件。你可以自己写,然后导入, #模块的名字就是文件的名字。 #你可以这样列出一个模块里所有的值 importmath dir(math)
7.高级用法
#用生成器(generators)方便地写惰性运算 defdouble_numbers(iterable): foriiniterable: yieldi+i #生成器只有在需要时才计算下一个值。它们每一次循环只生成一个值,而不是把所有的 #值全部算好。 # #range的返回值也是一个生成器,不然一个1到900000000的列表会花很多时间和内存。 # #如果你想用一个Python的关键字当作变量名,可以加一个下划线来区分。 range_=range(1,900000000) #当找到一个>=30的结果就会停 #这意味着`double_numbers`不会生成大于30的数。 foriindouble_numbers(range_): print(i) ifi>=30: break #装饰器(decorators) #这个例子中,beg装饰say #beg会先调用say。如果返回的say_please为真,beg会改变返回的字符串。 fromfunctoolsimportwraps defbeg(target_function): @wraps(target_function) defwrapper(*args,**kwargs): msg,say_please=target_function(*args,**kwargs) ifsay_please: return"{}{}".format(msg,"Please!Iampoor:(") returnmsg returnwrapper @beg defsay(say_please=False): msg="Canyoubuymeabeer?" returnmsg,say_please print(say())#Canyoubuymeabeer? print(say(say_please=True))#Canyoubuymeabeer?Please!Iampoor:(
源代码下载:learnpython3-cn.py
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。