免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1731 | 回复: 0
打印 上一主题 下一主题

python(13): 语句和赋值(8/8.1) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-27 11:19 |只看该作者 |倒序浏览

               
               
               
                在python中,有各种不同类型的语句。一个python程序是由模块构成的;一个模块由一条或多条语句组成;每个语句由不同的表达式组成;表达式可以创建和操作对象。下面来看看python中的语句。
赋值语句:
  • 标识符 = object
判断语句:
  • if/elif/else
循环相关语句:
  • while/else
  • for/else
  • break
  • continue
类及函数相关语句:
  • class
  • def
  • return
  • yield
  • global
  • lambda
  • object.method()
异常相关语句:
  • try/except/finally
  • raise
其他语句:
  • print
  • del
  • exec
  • assert
  • pass
首先来看赋值语句。一个赋值语句由三部分组成,变量标识符、=和赋予标识符的对象。在python中,任何变量都是引用变量,因此,变量标识符代表的内存空间中其实只是保存了对象的一个引用。在给一个变量赋值的过程中,也同时创建了这个变量,而并不需要像c中的一样,要先定义一个变量,然后给它赋值。
赋值语句可以分为两大类,一种是显式赋值语句,一种是隐式赋值语句。先来看显式赋值语句:
  • L= range(3)
  • [x,y]=[1,2]
  • x,y=[3,4]
  • x,y=5,6
  • x = y = dict()这五个语句,可以分为三类,第1行是最为普通的赋值语句。第2 3 4行可以看成是一类,通用模式为 seq1 = seq2,也就是等号两边都是一个序列,可以是list tuple还可以是string。需要注意的是,len(seq1)必须等于len(seq2),否则会出现ValueError。这样赋值的结果是seq1[0]=seq2[0],seq1[1]=seq2[1]...。第5行表示把x y 赋为dict(),也就是一个空的dictionary。在这种形式的赋值语句中,赋值过程是从右到左进行的,即先y= dict(),然后再x=y。
    隐式赋值会出现在以下六种语句中:
  • import types
  • from types import *
  • for x,y in D.itertimes()
  • def Test(one, two): pass
  • class Car: pass
  • Test(1,3)隐式赋值的特点是没有出现赋值操作符=。第1行,会引入types.py中所有对象和变量,比如types.ListType=list、types.DictType=dict。第2行与第1行类似,会直接引入ListType=list、types.StringType=str等。第3行,会把x和y,分别赋为x=D.keys()[0] x=D.keys()[1]...,同时y会变赋为y=D.values()[0] y=D.values()[1]...。第4行,会把Test指向为一个函数对象。第5行,会把Car指向一个“类”对象。第6行,通过调用一个函数,会把Test(one, two)函数中的形式参数one赋为1,two赋为3,即one =1 two=3。
    上面用到的one two Test Car types等等都是标识符,标识符可以用来代表变量、函数名、类名、模块名等。标识符的选择也有一定的规则,三条“军规”:
    第一条:标识符不能与保留字(关键字)相同
    第二条:标识符是大小写敏感的
    第三条:标识符必须用_或字母开头,只能由_、字母、数字组成,长度没有限制。
    先来看第一条,这一条可以说是所有计算机语言都会有的一条规则。在python中保留字有31个。基本上在是组成语句的单词,比如print del return等。由于模块名在引入程序的时候,会自动转换为变量名,因此模块的名称也不能是关键字,否则没有办法引入。保留字要与在__builtins__模块中的一些标识符相互区别,比如list()是在这个模块中的,其中的list就不是保留字。
    第二条,只要记住就行了。
    第三条,单个_也是一个合法的标识符,在python交互模式中,它用来表示最后一个表达式的值。其实在python中,几乎所有以_开头的标识符都有特殊的意思,虽然这不是强制性的规定。
    • 以一个_开头的标识符,比如_D _x 等,在import语句中不被引入,也就是说这种标识符标识的变量和定义是专属于这个模块的,在模块外面是看不到的。有点类似于c中的private变量和函数。
    • 以两个_开头,同时以两个_结尾的标识符,比如__name__ __main__ __builtins__等,这些变量或函数是由python解释器调用的。比如:__builtins__这个模块就会在python启动时自动载入。再比如:在一个类型中的__gt__方法由python解释器调用,当把这个类型用于>的表达式时。
    • 以两个_开头,但最后没有两个_,比如说:__x,这种标识符是一个类中的内部变量或函数。有点类似于c中的private变量和函数。
    在python中也有类似于c中的+= -= *=等复合运算符。算术运算符、位运算符都可以用这种方式进行书写。看下面这条语句:
  • >>> L = range(3)
  • >>> L += [3,4]第二条语句的效果等价于L = L + [3,4],但实际上与它更相同的是L.extend([3,4])。后一种方式比前一种方式的运行效率要高,也就说采用类似于+=这种复合运算符的时候,python会选择更有效率的方式进行运算。

                   
                   
                   
                   
                   
                   
                   
                   
                   
                   
                   

    本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/2809/showart_78893.html
  • 您需要登录后才可以回帖 登录 | 注册

    本版积分规则 发表回复

      

    北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
    未成年举报专区
    中国互联网协会会员  联系我们:huangweiwei@itpub.net
    感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

    清除 Cookies - ChinaUnix - Archiver - WAP - TOP