巨推学院

世界上最最最最最简单的Python教程!

Python语言的特性Python是一门具有强类型(即变量类型是强制要求的)、动态性、隐式类型(不需要做变量声明)、大小写敏感(var和VAR代表了不同的变量)以及面向对象(一切皆为对象)等特点的编程语言。版本Python2与Python3 ...

世界上最最最最最简单的Python教程!


Python语言的特性

Python是一门具有强类型(即变量类型是强制要求的)、动态性、隐式类型(不需要做变量声明)、大小写敏感(var和VAR代表了不同的变量)以及面向对象(一切皆为对象)等特点的编程语言。


版本

Python2与Python3是目前主要的两个版本。如下两种情况下,建议使用Python2:

  1. 你无法完全控制你即将部署的环境时;
  2. 你需要使用一些特定的第三方包或扩展时; python3 是官方推荐的且是未来全力支持的版本,目前很多功能提升仅在python3版本上进行。从入门阶段来说使用哪个版本影响不大,可以后续继续深入。

搭建开发环境

  • 对于Linux平台,目前Linux很多发行版本都 默认安装了Python(版本稍旧)。如果不满意,也可以到www.python.org下载安装包,然后通过configure、make、make install进行安装。
  • 对于Windows平台,从官网可以下载二进制的安装包,直接安装即可。
目前有很多成熟的IDE,例如PyCharm、Eclipse+PyDev插件和Komodo等。如果初步学习可以使用VIM或者EditPlus等文本编辑器即可。

Hello World

我们按照惯例先写一个hello world程序,使用任何纯文本编辑工具(例如vim)创建一个名为hello_world.py的文件,然后拷贝如下内容到文件中。

if __name__ =="__main__":  print "hello word"

完成后保存,然后在该文件的目录下执行如下命令:

python hello_world.py

注释

行注释以#加一个空格来注释,段注释通过三引号("""或者''')

如果需要在代码中使用中文注释,必须在python文件的最前面加上如下注释说明:

# -* - coding: UTF-8 -* - 

如下注释用于指定解释器

 #! /usr/bin/python 

下面是一个适合有中文的,可以自运行的简单实例:

#! /usr/bin/python# -*- coding: UTF-8 -*-if __name__ == "__main__": print "你好 世界"

语法

  • Python中没有强制的语句终止字符,且代码块是通过缩进来指示的。缩进表示一个代码块的开始,逆缩进则表示一个代码块的结束。
  • 声明以冒号(:)字符结束,并且开启一个缩进级别。
  • 赋值(事实上是将对象绑定到名字)通过等号(=)实现,双等号(==)用于相等判断,”+=”和”-=”用于增加/减少运算(由符号右边的值确定增加/减少的值)。这适用于许多数据类型,包括字符串。

变量

  • 变量可以理解成房间号,或者去快递的编码,通过这个(变量)可以找到需要的东西
  • python中数据有类型,而变量没有类型。变量不需要声明,变量的赋值操作即使变量声明和定义的过程。
  • python中一次新的赋值,将创建一个新的变量。即使变量的名称相同,变量的标识并不相同。用id()函数可以获取变量标识:
#! /usr/bin/python# -*- coding: UTF-8 -*-if __name__ == "__main__": x = 1  print id(x) x = 2  print id(x)
如果变量没有赋值,则python认为该变量不存在在函数之外定义的变量都可以称为全局变量。全局变量可以被文件内部的任何函数和外部文件访问。全局变量建议在文件的开头定义。

函数

如果把一堆代码堆到一起会很难使用,也很难理解。Python也提供了函数的功能。函数是一段可以重复多次调用的代码,函数定义示例如下:

#! /usr/bin/python# -*- coding: UTF-8 -*-# 这里定义的是一个函数,实现加法的功能# 函数名是itworld123_add,x和y是入参# 不需要特意指定返回值,直接返回期望的结果就行def itworld123_add(x,y):  return x+y

常量

python中 没有提供定义常量的保留字。可以自己定义一个常量类来实现常量的功能。

#! /usr/bin/python# -*- coding: UTF-8 -*-class _const: class ConstError(TypeError) : passdef __setattr__(self, key, value): # self.__dict__ if self.__dict__.has_key(key): raise self.ConstError,"constant reassignment error!" self.__dict__[key] = valueimport syssys.modules[__name__] = _const()

简单数据类型

Python的数字类型分为整型、长整型、浮点型、布尔型、复数类型。

#! /usr/bin/python# -*- coding: UTF-8 -*-# 整数3 # => 3# 算术没有什么出乎意料的1 + 1 # => 28 - 1 # => 710 * 2 # => 20# 但是除法例外,会自动转换成浮点数35 / 5 # => 7.05 / 3 # => 1.6666666666666667# 整数除法的结果都是向下取整5 // 3 # => 15.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# 布尔值TrueFalse# 整数也可以当作布尔值0 and 2 #=> 0-5 or 0 #=> -50 == False #=> True2 == True #=> False1 == True #=> True# 字符串可以被当作字符列表"This is a string"[0] # => 'T'# None是一个对象None # => None

云算法和表达式

python不支持自增运算符和自减运算符。例如i++/i-是错误的,但i+=1是可以的。

#! /usr/bin/python# -*- coding: UTF-8 -*-# 用not取非not True # => Falsenot False # => True# 逻辑运算符,注意and和or都是小写True and False #=> FalseFalse or True #=> True# 用==判断相等1 == 1 # => True2 == 1 # => False# 用!=判断不等1 != 1 # => False2 != 1 # => True# 比较大小1 < 10 # => True1 > 10 # => False2 <= 2 # => True2 >= 2 # => True# 大小比较可以连起来!1 < 2 < 3 # => True2 < 3 < 2 # => False# 字符串用单引双引都可以"这是个字符串"'这也是个字符串'# 用加号连接字符串"Hello " + "world!" # => "Hello world!" # 用.format来格式化字符串"{} can be {}".format("strings", "interpolated")# 可以重复参数以节省时间"{0} be nimble, {0} be quick, {0} jump over the {1}".format("Jack", "candle stick")#=> "Jack be nimble, Jack be quick, Jack jump over the candle stick"# 如果不想数参数,可以用关键字"{name} wants to eat {food}".format(name="Bob", food="lasagna") #=> "Bob wants to eat lasagna"# 如果你的Python3程序也要在Python2.5以下环境运行,也可以用老式的格式化语法"%s can be %s the %s way" % ("strings", "interpolated", "old") # 当与None进行比较时不要用 ==,要用is。is是用来比较两个变量是否指向同一个对象。"etc" is None # => FalseNone is None # => True# None,0,空字符串,空列表,空字典都算是False# 所有其他值都是Truebool(0) # => Falsebool("") # => Falsebool([]) #=> Falsebool({}) #=> False

控制语句

Python中可以使用if、for和while来实现流程控制。Python中并没有select,取而代之使用if来实现。使用for来枚举列表中的元素。如果希望生成一个由数字组成的列表,则可以使用range()函数。

#! /usr/bin/python# -*- coding: UTF-8 -*-# 先随便定义一个变量some_var = 5# 这是个if语句。注意缩进在Python里是有意义的# 印出"some_var比10小"if some_var > 10: print("some_var比10大")elif some_var < 10: # elif句是可选的 print("some_var比10小")else: # else也是可选的 print("some_var就是10")"""用for循环语句遍历列表打印: dog is a mammal cat is a mammal mouse is a mammal"""for animal in ["dog", "cat", "mouse"]: print("{} is a mammal".format(animal))""""range(number)"返回数字列表从0到给的数字打印: 0 1 2 3"""for i in range(4): print(i)"""while循环直到条件不满足打印: 0 1 2 3"""x = 0while x < 4: print(x) x += 1 # x = x + 1 的简写# 用try/except块处理异常状况try: # 用raise抛出异常 raise IndexError("This is an index error")except IndexError as e: pass # pass是无操作,但是应该在这里处理错误except (TypeError, NameError): pass # 可以同时处理不同类的错误else: # else语句是可选的,必须在所有的except之后 print("All good!") # 只有当try运行完没有错误的时候这句才会运行# Python提供一个叫做可迭代(iterable)的基本抽象。一个可迭代对象是可以被当作序列# 的对象。比如说上面range返回的对象就是可迭代的。filled_dict = {"one": 1, "two": 2, "three": 3}our_iterable = filled_dict.keys()print(our_iterable) # => range(1,10) 是一个实现可迭代接口的对象# 可迭代对象可以遍历for i in our_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"# 当迭代器所有元素都取出后,会抛出StopIterationour_iterator.__next__() # 抛出StopIteration# 可以用list一次取出迭代器所有的元素list(filled_dict.keys()) #=> Returns ["one", "two", "three"]

复合数据类型

Python具有列表(list)、元组(tuple)和字典(dictionaries)三种基本的数据结构,而集合(sets)则包含在集合库中(但从Python2.5版本开始正式成为Python内建类型)。列表的特点跟一维数组类似(当然你也可以创建类似多维数组的“列表的列表”),字典则是具有关联关系的数组(通常也叫做哈希表),而元组则是不可变的一维数组。

#! /usr/bin/python# -*- coding: UTF-8 -*-# 用列表(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# 越界存取会造成IndexErrorli[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删除任何一个元素del li[2] # li is now [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测试列表是否包含值1 in li # => True# 用len取列表长度len(li) # => 6# 元组是不可改变的序列tup = (1, 2, 3)tup[0] # => 1tup[0] = 3 # 抛出TypeError# 列表允许的操作元组大都可以len(tup) # => 3tup + (4, 5, 6) # => (1, 2, 3, 4, 5, 6)tup[:2] # => (1, 2)2 in tup # => 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" in filled_dict # => True1 in filled_dict # => False# 访问不存在的键会导致KeyErrorfilled_dict["four"] # KeyError# 用get来避免KeyErrorfilled_dict.get("one") # => 1filled_dict.get("four") # => None# 当键不存在的时候get方法可以返回默认值filled_dict.get("one", 4) # => 1filled_dict.get("four", 4) # => 4# setdefault方法只有当键不存在的时候插入新值filled_dict.setdefault("five", 5) # filled_dict["five"]设为5filled_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删除del filled_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 测试集合是否包含元素2 in filled_set # => True10 in filled_set # => False

类和对象

Python支持有限的多继承形式。私有变量和方法可以通过添加至少两个前导下划线和最多尾随一个下划线的形式进行声明(如“__spam”,这只是惯例,而不是Python的强制要求)。

#! /usr/bin/python# -*- coding: UTF-8 -*-# 定义一个继承object的类class Human(object): # 类属性,被所有此类的实例共用。 species = "H. sapiens" # 构造方法,当实例被初始化时被调用。注意名字前后的双下划线,这是表明这个属 # 性或方法对Python有特殊意义,但是允许用户自行定义。你自己取名时不应该用这 # 种格式。 def __init__(self, name): # Assign the argument to the instance's name attribute self.name = name # 实例方法,第一个参数总是self,就是这个实例对象 def say(self, msg): return "{name}: {message}".format(name=self.name, message=msg) # 类方法,被所有此类的实例共用。第一个参数是这个类对象。 @classmethod def get_species(cls): return cls.species # 静态方法。调用时没有实例或类的绑定。 @staticmethod def grunt(): 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*"

模块

#! /usr/bin/python# -*- coding: UTF-8 -*-# 用import导入模块import mathprint(math.sqrt(16)) # => 4.0# 也可以从模块中导入个别值from math import ceil, floorprint(ceil(3.7)) # => 4.0print(floor(3.7)) # => 3.0# 可以导入一个模块中所有值# 警告:不建议这么做from math import *# 如此缩写模块名字import math as mmath.sqrt(16) == m.sqrt(16) # => True# Python模块其实就是普通的Python文件。你可以自己写,然后导入,# 模块的名字就是文件的名字。# 你可以这样列出一个模块里所有的值import mathdir(math)

头条代码排版有问题,可以到微信公众号阅读 itworld123

分享到:
版权声明:本网页内容(包含但不限于文字、图片、视频)由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至zhanzhangtoutiao@163.com举报,一经查实,本站将立刻删除。
投诉

登录后发表评论

已有 1 人参与

评论

相关推荐

挨踢农夫

519篇文章

TA的文章
广告
广告
广告
  • 今日热文
  • 本周热文
  • 本月热文
小编推荐    
返回顶部