目录
缩进
流程控制语句
表达式
函数
对象的方法
类型
数学运算python
缩进
Python开发者有意让违反了缩进规则的程序不能经过编译,以此来强制程序员养成良好的编程习惯。而且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或
者某种关键字。增长缩进表示语句块的开始,而减小缩进则表示语句块的退出。缩进成为了语法的一部分。例如if语句:程序员
if age < 21: print("你不能买酒。") print("不过你能买口香糖。") print("这句话处于if语句块的外面。")
注:上述例子为python 3.0版本的代码正则表达式
根据PEP的规定,必须使用4个空格来表示每级缩进(不清楚4个空格的规定如何,在实际编写中能够自定义空格数,可是要知足每级缩进间空格数相等)。使用Tab字符和其它数目的空格虽然
均可以编译经过,但不符合编码规范。支持Tab字符和其它数目的空格仅仅是为兼容很旧的的Python程序和某些有问题的编辑程序。算法
流程控制语句
if语句,当条件成立时运行语句块。常常与else, elif(至关于else if) 配合使用。
for语句,遍历列表、字符串、字典、集合等迭代器,依次处理迭代器中的每一个元素。
while语句,当条件为真时,循环运行语句块。
try语句。与except,finally配合使用处理在程序运行中出现的异常状况。
class语句。用于定义类型。
def语句。用于定义函数和类型的方法。
pass语句。表示此行为空,不运行任何操做。
assert语句。用于程序调适阶段时测试运行条件是否知足。
with语句。Python2.6之后定义的语法,在一个场景中运行语句块。好比,运行语句块前加密,而后在语句块运行退出后解密。
yield语句。在迭代器函数内使用,用于返回一个元素。自从Python 2.5版本之后。这个语句变成一个运算符。
raise语句。制造一个错误。
import语句。导入一个模块或包。
from import语句。从包导入模块或从模块导入某个对象。
import as语句。将导入的对象赋值给一个变量。
in语句。判断一个对象是否在一个字符串/列表/元组里。编程
表达式
Python的表达式写法与C/C++相似。只是在某些写法有所差异。less
主要的算术运算符与C/C++相似。
+, -, *, /, //, **, ~, %分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取模。
>>, <<表示右移和左移。
&, |, ^表示二进制的AND, OR, XOR运算。
>, <, ==, !=, <=, >=用于比较两个表达式的值,分别表示大于、小于、等于、不等于、小于等于、大于等于。
在这些运算符里面,~, |, ^, &, <<, >>必须应用于整数。dom
Python使用and, or, not表示逻辑运算。编程语言
is, is not用于比较两个变量是不是同一个对象。in, not in用于判断一个对象是否属于另一个对象。ide
Python列表推导式
列表推导式(list comprehension)是利用其余列表建立新列表(相似于数学术语中的集合推导式)的一种方法。它的工做方式相似于for循环,也很简单:函数
In [39]: [x*x for x in range(10)] Out[39]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
若是只想打印出那些能被3整除的平方数,只须要经过添加一个if部分在推导式中就能够完成:
In [41]: [x*x for x in xrange(10) if x % 3 == 0] Out[41]: [0, 9, 36, 81]
也能够增长更多的for语句的部分:
In [42]: [(x,y) for x in range(3) for y in range(3)] Out[42]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)] In [43]: [[x,y] for x in range(2) for y in range(2)] Out[43]: [[0, 0], [0, 1], [1, 0], [1, 1]]
Python使用lambda表示匿名函数。匿名函数体只能是表达式。好比:
>>> add=lambda x, y : x + y >>> add(3,2) 5
Python使用y if cond else x表示条件表达式。意思是当cond为真时,表达式的值为y,不然表达式的值为x。至关于C++和Java里的cond?y:x。
Python区分列表(list)和元组(tuple)两种类型。list的写法是[1,2,3],而tuple的写法是(1,2,3)。能够改变list中的元素,而不能改变tuple。在某些状况下,tuple的括号能够省略。tuple
对于赋值语句有特殊的处理。所以,能够同时赋值给多个变量,好比:
>>> x, y=1,2#同时给x,y赋值,最终结果:x=1, y=2
特别地,可使用如下这种形式来交换两个变量的值:
>>> x, y=y, x #最终结果:y=1, x=2
Python使用'(单引号)和"(双引号)来表示字符串。与Perl、Unix Shell语言或者Ruby、Groovy等语言不同,两种符号做用相同。通常地,若是字符串中出现了双引号,就使用单引号来表示
字符串;反之则使用双引号。若是都没有出现,就依我的喜爱选择。出如今字符串中的\(反斜杠)被解释为特殊字符,好比\n表示换行符。表达式前加r指示Python不解释字符串中出现的\。这
种写法一般用于编写正则表达式或者Windows文件路径。
Python支持列表切割(list slices),能够取得完整列表的一部分。支持切割操做的类型有str, bytes, list, tuple等。它的语法是...[left:right]或者...[left:right:stride]。假定nums
变量的值是[1, 3, 5, 7, 8, 13, 20],那么下面几个语句为真:
nums[2:5] == [5, 7, 8] 从下标为2的元素切割到下标为5的元素,但不包含下标为5的元素。
nums[1:] == [3, 5, 7, 8, 13, 20] 切割到最后一个元素。
nums[:-3] == [1, 3, 5, 7] 从最开始的元素一直切割到倒数第3个元素。
nums[:] == [1, 3, 5, 7, 8, 13, 20] 返回全部元素。改变新的列表不会影响到nums。
nums[1:5:2] == [3, 7] 从下标为1的元素切割到下标为5的元素但不包含下标为5的元素,且步长为2。
函数
Python的函数支持递归、默认参数值、可变参数,但不支持函数重载。为了加强代码的可读性,能够在函数后书写“文档字符串”(Documentation Strings,或者简称docstrings),用于解释
函数的做用、参数的类型与意义、返回值类型与取值范围等。可使用内置函数help()打印出函数的使用帮助。好比:
>>> def randint(a, b): ... "Return random integer in range [a, b], including both end points."... >>> help(randint) Help on function randint in module __main__: randint(a, b) Return random integer inrange[a, b], including both end points.
对象的方法
对象的方法是指绑定到对象的函数。调用对象方法的语法是instance.method(arguments)。它等价于调用Class.method(instance, arguments)。当定义对象方法时,必须显式地定义第一个参
数,通常该参数名都使用self,用于访问对象的内部数据。这里的self至关于C++, Java里面的this变量,可是咱们还可使用任何其它合法的参数名,好比this 和 mine 等,self与C+
+,Java里面的this不彻底同样,它能够被看做是一个习惯性的用法,咱们传入任何其它的合法名称都行,好比:
class Fish: def eat(self, food): if food is not None: self.hungry=False class User: def__init__(myself, name): myself. name= name #构造Fish的实例: f=Fish() #如下两种调用形式是等价的: Fish.eat(f,"earthworm") f.eat("earthworm") u = User('username') print(u .name)
Python认识一些以“__”开始并以“__”结束的特殊方法名,它们用于实现运算符重载和实现多种特殊功能。
类型
Python采用动态类型系统。在编译的时候,Python不会检查对象是否拥有被调用的方法或者属性,而是直至运行时,才作出检查。因此操做对象时可能会抛出异常。不过,虽然Python采用动
态类型系统,它同时也是强类型的。Python禁止没有明肯定义的操做,好比数字加字符串。
与其它面向对象语言同样,Python容许程序员定义类型。构造一个对象只须要像函数同样调用类型便可,好比,对于前面定义的Fish类型,使用Fish()。类型自己也是特殊类型type的对象
(type类型自己也是type对象),这种特殊的设计容许对类型进行反射编程。
Python内置丰富的数据类型。与Java、C++相比,这些数据类型有效地减小代码的长度。下面这个列表简要地描述了Python内置数据类型(适用于Python 3.x):
除了各类数据类型,Python语言还用类型来表示函数、模块、类型自己、对象的方法、编译后的Python代码、运行时信息等等。所以,Python具有很强的动态性。
数学运算
Python使用与C、Java相似的运算符,支持整数与浮点数的数学运算。同时还支持复数运算与无穷位数(实际受限于计算机的能力)的整数运算。除了求绝对值函数abs()外,大多数数学函数
处于math和cmath模块内。前者用于实数运算,然后者用于复数运算。使用时须要先导入它们,好比:
>>> import math >>> print(math.sin(math.pi/2)) 1.0
fractions模块用于支持分数运算;decimal模块用于支持高精度的浮点数运算。
Python定义求余运行a % b的值处于开区间[0, b)内,若是b是负数,开区间变为(b, 0]。这是一个很常见的定义方式。不过其实它依赖于整除的定义。为了让方程式:b * (a // b) + a % b
= a恒真,整除运行须要向负无穷小方向取值。好比7 // 3的结果是2,而(-7) // 3的结果倒是-3。这个算法与其它不少编程语言不同,须要注意,它们的整除运算会向0的方向取值。Python容许像数学的经常使用写法那样连着写两个比较运行符。好比a < b < c与a < b and b < c等价。C++的结果与Python不同,首先它会先计算a < b,根据二者的大小得到0或者1两个值之一,而后再与c进行比较。
若是,您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】。
若是,您但愿更容易地发现个人新博客,不妨点击一下左下角的【关注我】。
若是,您对个人博客所讲述的内容有兴趣,请继续关注个人后续博客,我是【Ruthless】。
本文版权归做者和博客园共有,欢迎转载,但未经做者赞成必须保留此段声明,且在文章页面明显位置给出原文链接,不然保留追究法律责任的权利。