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


    本节点标题
    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'













  • 相关阅读:
    day38_css
    day39_css_浮动_display
    day36_html
    线段树模板2 洛谷p3373
    hdu1257 最少拦截系统
    树的重心(DFS)
    树的直径(BFS)
    面向对象复习
    面向对象练习题
    面向对象的交互
  • 原文地址:https://www.cnblogs.com/helloxwr/p/6512789.html
Copyright © 2020-2023  润新知