首页 > 代码库 > python学习笔记(11)-语法要求(缩进、标识符、变量)

python学习笔记(11)-语法要求(缩进、标识符、变量)

本节点标题
1、语法要求
1.1、缩进规范
1.2、变量标识符规范
2、变量
2.1、变量的赋值是存放在内存空间中,再从内存空间获取
2.2、变量赋值的时候,若变量名在内存中没有的话就等于赋一个新的变量,若变量名已在内存中,则是重新改写这个变量
2.3、变量的赋值是指向内存地址,变量1赋值变量2,变量1重新赋值后不改变变量2的值,因为变量1重新赋值后内存地址改变,而没有重新赋值的变量2内存地址不变。
2.4、查看变量的内存地址,id()
2.5、python虚拟机跟操作系统打交道,它对python做了优化,如果变量赋值为0-255(python2.7实际是-5~256)其中一个数字,则相同数值的变量全都指向同一内存空间,避免浪费内存
2.6、多单词拼接变量名风格规范
2.7、多个变量赋值
2.8、变量的引用
2.9、多变量的引用


========================================================================================================================

1、语法要求

1.1、缩进规范

缩进统一,空格、tab等,尽量使用一种。(官方建议四个空格)
流程控制语句体要缩进,不缩进则被解析为非流程控制的语句体。

例子1:
无缩进则报错:
#coding:utf-8
a=1
b=2
if (b>=a):
print "7、b大于等于a"
else:
print "7、b小于a"

运行结果:(语句体没缩进会报错)
[root@zookeeper-server-01 script]# python BiJiaoYunSuanFu.py
File "BiJiaoYunSuanFu.py", line 42
print "7、b大于等于a"
^
IndentationError: expected an indented block(将一块缩进)

正确如下:
if (b>=a):
print "7、b大于等于a" --至少有一个空格或tab缩进
else:
print "7、b小于a"

多个空格少个空格都会报错,要注意!
----------------------------------------------------------------------------------------------------------------------------------------------
例子2:
name = raw_input("Please input your name:")
if name == ‘Alex‘:
print "he is the python teacher. "
print "haha"
print "xixi"

运行结果1:(没缩进的语句不会被解析为流程结构的语句体,没缩进语句出现的时候已代表if流程结束了)
Please input your name:qq
qq
xixi

运行结果2:(有缩进的语句会被解析为流程结构的语句体,满足条件则执行,流程结构的语句体执行结束后继续往下运行程序其他语句)
Please input your name:Alex
he is the python teacher.
haha
xixi
----------------------------------------------------------------------------------------------------------------------------------------------
例子3:
name = raw_input("Please input your name:")
if name == ‘Alex‘:
print "he is the python teacher. "
print "haha"
print "xixi"

运行结果:(流程语句体的缩进不统一也会报错)
[root@zookeeper-server-01 ~]# python /root/XWR/my_python/script/Node1/user_interactive.py
File "/root/XWR/my_python/script/Node1/user_interactive.py", line 9
print "haha"
^
IndentationError: unindent does not match any outer indentation level
----------------------------------------------------------------------------------------------------------------------------------------------
例子4:
#coding:utf-8
a=1
b=2
if (b>=a):
print "7、b大于等于a"
else:
print "7、b小于a"

运行结果:(if下语句体与else下语句体不是同一层的,缩进可不一致,但建议尽量同一缩进)
7、b大于等于a

1.2、变量标识符规范

? 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)
? 标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。
? 标识符名称是对大小写敏感的。例如,myname和myName不是一个标识符。注意前者中的小写n和后者中的大写N。
? 标识符名称不能是关键字,如import、class、break、if、while等等,用了不报错,但当使用关键字的时候就报错了,被你的变量冲掉了原来的关键字
? 有效 标识符名称的例子有i、__my_name、name_23和a1b2_c3。
? 无效 标识符名称的例子有2things、this is spaced out和my-name。

2、变量

2.1、变量的赋值是存放在内存空间中,再从内存空间获取

变量存储在内存中的值。这就意味着在创建变量时会在内存中开辟一个空间。
基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。
因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。

>>> name = "Zha"
>>> name
‘Zha‘
>>>

2.2、变量赋值的时候,若变量名在内存中没有的话就等于赋一个新的变量,若变量名已在内存中,则是重新改写这个变量
>>> name = "Zha"
>>> name
‘Zha‘
>>> name = "Zhong Yi"
>>> name
‘Zhong Yi‘
>>>

2.3、变量的赋值是指向内存地址,变量1赋值变量2,变量1重新赋值后不改变变量2的值,因为变量1重新赋值后内存地址改变,而没有重新赋值的变量2内存地址不变。
>>> name = "Zhong Yi"
>>> name
‘Zhong Yi‘
>>> name2 = name
>>> name2
‘Zhong Yi‘
>>> name = "Jigongtou"
>>> name
‘Jigongtou‘
>>> name2
‘Zhong Yi‘
>>>

2.4、查看变量的内存地址,id()
例子1:
>>> id(name)
140514571357472
>>> id(name2)
140514571357520
>>> id(name),id(name2)
(140514571357472, 140514571357520)
>>>

例子2:
>>> a = 10
>>> b = a
>>> id(a),id(b)
(29024400, 29024400)
>>>
技术分享

技术分享

例子3:
有时候完全独立的变量赋相同值,存放内存地址一样,不会另外再开新的内存空间
>>> a = 10
>>> b = a
>>> id(a),id(b)
(29024400, 29024400)
>>> c = 10
>>> id(a),id(b),id(c)
(29024400, 29024400, 29024400)
>>>

2.5、python虚拟机跟操作系统打交道,它对python做了优化,如果变量赋值为0-255(python2.7实际是-5~256)其中一个数字,则相同数值的变量全都指向同一内存空间,避免浪费内存
>>> a = -6
>>> b = a
>>> c = -6
>>> id(a),id(b),id(c)
(30048416, 30048416, 30048224) -------不同
>>> del a,b,c
>>>
>>> a = -5
>>> b = a
>>> c = -5
>>> id(a),id(b),id(c)
(29024760, 29024760, 29024760) --------相同
>>> del a,b,c
>>>
>>> a = 256
>>> b = a
>>> c = 256
>>> id(a),id(b),id(c)
(29030448, 29030448, 29030448) --------相同
>>> del a,b,c
>>>
>>> a = 257
>>> b = a
>>> c = 257
>>> id(a),id(b),id(c)
(30048224, 30048224, 30048392) -------不同

2.6、多单词拼接变量名风格规范
>>> eric_gf_name = "Erin" --建议
>>> EricFgName = "Eric" --不建议,因为类名也是首字母大写的,区别开来
>>> ericGfName = "Eric" --建议
风格要统一,不能代码一时用一种风格变量名,一时又换另一种变量名

2.7、多个变量赋值
Python允许你同时为多个变量赋值。例如:
a = b = c = 1
以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。
>>> a=b=c=1
>>> a,b,c
(1, 1, 1)
>>>

您也可以为多个对象指定多个变量。例如:
a, b, c = 1, 2, "john"
以上实例,两个整型对象1和2的分配给变量a和b,字符串对象"john"分配给变量c。
>>> a,b,c=1,2,"john"
>>> a,b,c
(1, 2, ‘john‘)
>>>


2.8、python2.x变量的引用
变量把对象和自己连接起来(指针连接对象空间),这就是引用。引用完成,就实现了赋值。
技术分享

%操作符 + %变量名 一起使用才能引用变量,更多类型变量的操作符参考“数据类型/字符串/字符串格式化(%操作符)”章节

>>> name = ‘Alex‘
>>> print """Welcome to Python,
...
... I am %s
... good bye.
... """ %name
Welcome to Python,

I am Alex
good bye.

>>>

>>> age = 1
>>> print ‘‘‘I am %d year old‘‘‘ %age
I am 1 year old



2.9、python2.x多变量的引用
>>> name = "Alex"
>>> age = 18
>>> print "%s is %d years old." %(name,age)
Alex is 18 years old.
>>>

2.10、python3.x变量的引用
(以后会说到字符串格式化(format()函数),本节点略过)
自python2.6开始,新增了一种格式化字符串的函数str.format(),可谓威力十足。那么,他跟之前的%型格式化字符串相比,有什么优越的存在呢?让我们来揭开它羞答答的面纱。
语法
它通过{}和:来代替%。
“映射”示例
通过位置
In [1]: ‘{0},{1}‘.format(‘kzc‘,18)
Out[1]: ‘kzc,18‘
In [2]: ‘{},{}‘.format(‘kzc‘,18)
Out[2]: ‘kzc,18‘
In [3]: ‘{1},{0},{1}‘.format(‘kzc‘,18)
Out[3]: ‘18,kzc,18‘
字符串的format函数可以接受不限个参数,位置可以不按顺序,可以不用或者用多次,不过2.6不能为空{},2.7才可以。
--------------------------------------
通过关键字参数
In [5]: ‘{name},{age}‘.format(age=18,name=‘kzc‘)
Out[5]: ‘kzc,18‘
--------------------------------------
通过对象属性
class Person:
  def __init__(self,name,age):
    self.name,self.age = name,age
   def __str__(self):       
return ‘This guy is {self.name},is {self.age} old‘.format(self=self)

In [2]: str(Person(‘kzc‘,18))
Out[2]: ‘This guy is kzc,is 18 old‘
--------------------------------------
通过下标
In [7]: p=[‘kzc‘,18]
In [8]: ‘{0[0]},{0[1]}‘.format(p)
Out[8]: ‘kzc,18‘
有了这些便捷的“映射”方式,我们就有了偷懒利器。基本的python知识告诉我们,list和tuple可以通过“打散”成普通参数给函数,而dict可以打散成关键字参数给函数(通过和*)。所以可以轻松的传个list/tuple/dict给format函数。非常灵活。
--------------------------------------
格式限定符
它有着丰富的的“格式限定符”(语法是{}中带:号),比如:
填充与对齐
填充常跟对齐一起使用
^、<、>分别是居中、左对齐、右对齐,后面带宽度
:号后面带填充的字符,只能是一个字符,不指定的话默认是用空格填充
比如
In [15]: ‘{:>8}‘.format(‘189‘)
Out[15]: ‘   189‘
In [16]: ‘{:0>8}‘.format(‘189‘)
Out[16]: ‘00000189‘
In [17]: ‘{:a>8}‘.format(‘189‘)
Out[17]: ‘aaaaa189‘
--------------------------------------
精度与类型f
精度常跟类型f一起使用
In [44]: ‘{:.2f}‘.format(321.33345)
Out[44]: ‘321.33‘
其中.2表示长度为2的精度,f表示float类型。
--------------------------------------
其他类型
主要就是进制了,b、d、o、x分别是二进制、十进制、八进制、十六进制。
In [54]: ‘{:b}‘.format(17)
Out[54]: ‘10001‘
In [55]: ‘{:d}‘.format(17)
Out[55]: ‘17‘
In [56]: ‘{:o}‘.format(17)
Out[56]: ‘21‘In [57]: ‘{:x}‘.format(17)Out[57]: ‘11‘
--------------------------------------
用,号还能用来做金额的千位分隔符。
In [47]: ‘{:,}‘.format(1234567890)
Out[47]: ‘1,234,567,890‘













python学习笔记(11)-语法要求(缩进、标识符、变量)