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

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

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:")

ifname == '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:")

ifname == '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)

>>>

1118182-20170307011921953-1397209371.png

1118182-20170307011932969-320124797.png

例子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变量的引用

变量把对象和自己连接起来(指针连接对象空间),这就是引用。引用完成,就实现了赋值。

1118182-20170307011947406-856827137.png

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

>>> 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'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值