python(基本语法)

Python / 1139人浏览 / 0人评论
Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯。并且Python语言利用缩进表示语句块的开始和退出(Off-side规则),而非使用花括号或者某种关键字。增加缩进表示语句块的开始,而减少缩进则表示语句块的退出。缩进成为了语法的一部分。例如if语句:python3 1 2 3 4 5 age = int(input("请输入你的年龄: ")) if age < 21: print("你不能买酒。") print("不过你能买口香糖。") print("这句话在if语句块的外面。") 根据PEP的规定,必须使用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++类似。只是在某些写法有所差别。 主要的算术运算符与C/C++类似。+, -, *, /, //, **, ~, %分别表示加法或者取正、减法或者取负、乘法、除法、整除、乘方、取补、取余。 Python使用and, or, not表示逻辑运算。 is, is not用于比较两个变量是否是同一个对象。in, not in用于判断一个对象是否属于另外一个对象。 Python支持“列表推导式”(list comprehension),比如计算0-9的平方和: 1 2 >>> sum(x * x for x in range(10)) 285 Python使用lambda表示匿名函数。匿名函数体只能是表达式。比如: 1 2 3 >>> 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对于赋值语句有特殊的处理。因此,可以同时赋值给多个变量,比如: 1 >>> x, y=1,2 # 同时给x,y赋值,最终结果:x=1, y=2 特别地,可以使用以下这种形式来交换两个变量的值: 1 >>> 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的元素,且步长为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不完全一样,它可以被看作是一个习惯性的用法,我们传入任何其它的合法名称都行,比如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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对象),这种特殊的设计允许对类型进行反射编程。