python基础(二)
目录
一.语句和语法
二.变量赋值
三.标识符和关键字
四.基本风格
五.内存管理
一、语句和语法
Python语句中有一些基本规则和特殊字符:
1.井号(#)表示之后的字符为Python注释
2.换行 (\n) 是标准的行分隔符(通常一个语句一行)
3.反斜线 ( \ ) 继续上一行
有两种例外情况一个语句不使用反斜线也可以跨行。在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号、中括号、花括号时可以多行书写。另外就是三引号包括下的字符串也可以跨行书写。
>>> print """hi there,this is a long message for you that goes over multiple lines...you will find out soon that triple quotes in Python allows this kind of fun!it is like a day on the beach!""" hi there,this is a long message for you that goes over multiple lines...you will find out soon that triple quotes in Python allows this kind of fun!it is like a day on the beach! >>> print (3 + 2) 5 >>> #推荐使用括号,这样可读性更好
4.分号 ( ; )将两个语句连接在一行中(虽然python允许这么做,但是不推荐)
5.冒号 ( : ) 将代码块的头和体分开
6.语句(代码块)用缩进块的方式体现
缩进相同的一组语句构成一个代码块,我们称之代码组。像 if、while、def 和 class 这样 的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。 我们将首行及后面的代码组称为一个子句(clause)。
7.不同的缩进深度分隔不同的代码块(推荐:使用四个空格宽度,避免使用制表符)
Python使用缩进来分隔代码组。代码的层次关系是通过同样 深度的空格或制表符缩进体现的。同一代码组的代码行必须严格左对齐(左边有同样多的空格 或同样多的制表符),如果不严格遵守这个规则,同一组的代码就可能被当成另一个组,甚至 会导致语法错误。
8.Python文件以模块的形式组织
每一个Python脚本文件都可以被当成是一个模块。模块以磁盘文件的形式存在。当一个模块变得过大,并且驱动了太多功能的话,就应该考虑拆一些代码出来另外建一个模块。模块里的代码可以是一段直接执行的脚本,也可以是一堆类似库函数的代码,从而可以被别的模块导 入(import)调用。
二、变量赋值
1.赋值运算符(=)
注意,赋值并不是直接将一个值赋给一个变量。在Python语言中,对象是通过引用传递的。在赋值时,不管这个对象是新创建的,还是一个已经存在的,都是将该对象的引用(并不是值)赋值给变量。
>>> x = 2 >>> y = (x = x + 2) #不支持 SyntaxError: invalid syntax >>> y = x = x + 2 #支持链式赋值 >>> x,y (4, 4) >>>
2.增量赋值:+= -= *= /= %= **= <<= >>= &= ^= |=
3.多重赋值
>>> x = y = z = 6 >>> x 6 >>> y 6 >>> z 6
4.多元赋值,Python的多元赋值方式可以实现无需中间变量交换两个变量的值。是不是很方便喽
>>> x,y = 1,2 >>> x,y (1, 2) >>> x 1 >>> y 2 >>> x,y = y,x >>> x,y (2, 1) >>> x 2 >>> y 1 >>>
三、标识符
(1)python标识符
1.第一个字符必须是字母或下划线(_)
2.剩下的字符可以是字母、数字和下划线
3.大小写敏感
(2)python关键字
>>> import keyword >>> keyword.kwlist ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print',
'raise', 'return', 'try', 'while', 'with', 'yield'] >>>
(3)python内建
除了关键字之外,Python还有可以在任何一级代码使用的“内建”的名字集合,这些名字可以由解释器设置或使用。然而,有些情况要求覆盖(也就是:重定义,替换)它们。Python不支持重载标识符 所以任何时刻都只有一个名字绑定。
(4)专用下划线标识符
Python用下划线作为变量前缀和后缀指定特殊变量
_xxx不用'from module import *'导入
__xxx__系统定义名字
__xxx 类中的私有变量名
注意:避免用下划线作为变量名的开始。因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,建议避免用下划线作为变量名的开始。一般来讲,变量名_xxx 被看作是“私有的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对Python来说有特殊含义,对于普通的变量应当避免这种命名风格
四、风格指南
(1).注释 (2).文档 (3).缩进 (4).选择合适的标识符
python编程风格
# (1) 起始行(通常只有在类Unix环境下才使用起始行,有起始行就能够仅输入脚本名字来执行脚本,无需直接调用解释器)
# (2) 模块文档
# (3) 模块导入
# (4) 变量定义(这里的变量是全局变量,除非必须,否则就要尽量使用局部变量代替全局变量)
# (5) 类定义
# (6) 函数定义
# (7) 主程序
五、内存管理
1.变量无需事先声明(变量在第一次被赋值时自动声明,而且只有被创建和赋值后才能使用)
2.变量无须指定类型(动态类型,对象的类型和内存都是运行时确定的。在创建时,解释器会根据语法和右侧的操作数来决定新对象的类型)
3.不必关心内存管理
4.变量名会被“回收”
5.引用计数 要保持追踪内存中的对象,python使用了引用计数。一个内部跟踪变量称为引用计数器。每个对象各有多少引用称为引用计数
增加引用计数
(1)对象被创建 x = 3
(2)或另外的别名被创建 y = x
(3)或被作为参数传递给函数(新的本地引用) foo(x)
(4)或成为容器对象的一个元素 mylist = [123,x,'xyz']
减少引用计数
foo = 'xyz' 引用计数变成1
bar = foo 增加了别名bar 引用计数变成2
foo = 123 foo被重新赋值,xyz的引用计数自动减1,变为1
(1)一个本地引用离开了其作用范围
(2)对象的别名被显式的销毁 del y
(3)对象的一个别名被赋值给其他对象 x = 123
(4)对象被从一个窗口对象中移除 mylist.remove(x)
6.del语句能够直接释放资源(执行del会删除该对象的最后一个引用,即引用计数会减为0)
注意:任何追踪或调用程序会给一个对象增加一个额外的引用,这会推迟该对象被回收的时间
7.垃圾收集
不再使用的内存会被一种称之为垃圾收集的机制释放。虽然解释器跟踪对象的引用计数,但垃圾收集器负责释放内存。它是一块独立的代码,用来寻找引用计数为0 的对象。同时也负责检查那些虽然引用计数大于0但也应该被销毁的对象。特定情形会导致循环引用。