首页 > 编程 > Python > 正文

python语句及语法

2019-11-08 00:53:47
字体:
来源:转载
供稿:网友

一、python语句简介(python是面向过程、基于语句的语言)

1、python程序结构:

   程序由模块构成

   模块由语句构成

   语句由表达式构成

   表达式建立并处理对象

2、常用python语句集

语句

角色

例子

赋值

创建引用值

a,b,c=’good’,’bad’,’ugly’

调用

执行函数

log.write(“spam,ham/n”)

PRint

打印对象

print ‘the killer’,joke

if/elif/else

选择动作

if ‘python’ in text:

    print text

for/else

序列迭代

for x in mylist:

    print x

while/else

一般循环

while x>y:

    print x

pass

空占位符

while True:

    pass

break/continue

循环跳跃

while True:

    if not line:break

try/except/finally

捕捉异常

try:

    action()

except:

    print ‘action error’

raise

触发异常

raise endSearch,location

import,from

模块读取

import sys

from sys import stdin

def,return,yield

创建函数

def f(a,b,c=1,*d):

    return a+b+c+d[0]

def gen(n)

    for I in n,yield i*2

class

创建对象

class subclass(Superclass):

    staticdata=[]

global

命名空间空间

def function():

    global x,y

    x=’new’

del

删除引用

del data[k]

exec

执行代码字符串

exec “import” +modname

exec code in gdict,ldict

assert

调试检查

assert x>y

with/as

环境管理器

with open(‘data’) as myfile:

    process(myfile)

 

3、try语句:

   eg:

  while True:

      reply=raw_input(‘Enter text:’)

      if reply==’stop’:

          break

      try:

          num=int(reply)

      except:

          print ‘Bad!’*8

      else:

          print int(reply)**2

   print ‘Bye!’

    解释:try关键字后面跟上我们尝试运行的代码块,再跟except部分,给异常处理

                器代码,再接else部分,如果try部分没有异常,就执行这一部分代码,如

                有异常发生就执行except部分代码

二、赋值、表达式、打印语句

1、赋值语句

(1)赋值语句专门特性:

           a、赋值对象建立专门引用值,赋值语句总是建立对象的引用值而不是拷

               贝;

           b、变量名会在首次赋值时被创建;

           c、变量名在引用前必须先赋值;

           d、隐式赋值语句:import、from、def、class、for、函数参数

(2)赋值语句的形式:

    a、基本形式:spam=’spam’

    b、元组及列表分解赋值:当“=”左边编写成元组或列表时,python会按照

           位置把右边的对象和左边的目标从左到有想配对。

    c、序列赋值语句:任何变量名的序列都可以赋值给任何值的序列,python会按照位置一次赋值一个元素

    d、多重目标赋值:python赋值相同对象的引用值(最右边的对象)给左边所有的目标

    e、增强赋值语句:例如:s+=2相当于s=s+2

(3)序列赋值:

    a、高级序列赋值语句模式:可以在“=”两侧混合和匹配匹配序列类型,但左右两边元素的数目必须相等。若要通用,则需要使用分片的方法。

       >>>string=’spam’

      >>>a,b,c=string[0],string[1],string[2:]

      >>>a,b,c=list(string[:2)+[string[2:]]

       >>>(a,b),c=string[:2],string[2:]

    b、赋值一系列整数给一组变量:

       >>>red,green,blue=range(3)

       >>>range(3)

       [0,1,2]

(4)多目标赋值语句:

    a、多目标赋值以及共享引用:

       多目标赋值语句中,只有一个对象,由三个变量共享(全都指向内存内统一对象)在此需要注意对象的是否支持在原处的修改

(5)增强赋值语句:

    a、增强赋值语句从C借鉴而来:

x+=y

x&=y

x-=y

x|=y

x*=y

x^=y

x/=y

x>>=y

x%=y

x<<=y

x**=y

x//=y(floor除法)

     b、增强赋值语句的一些优点:

           左侧只需计算一次,执行更快;

           优化技术选择,对于支持原处修改的对象而言,增强形式会自动执行原处的修改运算,而不是复制。

    c、增强赋值与共享引用:

           对列表而言,“+=”隐含了对原处做修改的意思,“+”总是生成新的对象

(6)表达式语句:

     a、在python中,可以使用表达式作为语句,但表达式结果不会储存,只有当表达式工作并作为附加的效果时才有意义。通常有两种情况下表达式用作语句:调用函数和方                法、在交互模式下打印值

    b、表达式语句通常用于执行可于原处修改列表的列表方法:

      >>>L=[1,2]

      >>>L.append(3)  #这是一条表达式语句,返回值为None

      >>>L

      [1,2,3]

(7)打印语句:

     a、重定向输出流:

       print x

       等价于:

       import sys

       sys.stdout.write(str(x)+’/n’)

        因为有可能把sys.stdout重新复制给标准输出流意外的东西,这样就可以有一种方法让print语句将文字传送到其他地方:

      >>>import sys

      >>>sys.stdout=open(‘log.txt’,’w’)

      …

      print x,y,z

     b、print file 扩展:       重定向输出流有一个问题:没有直接的方式可以保存原始的输出流。在打印到文件后可以切换回来。因为sys.stdout只是一个普通文件对象,一个例子如下:

      >>>import sys

      >>>temp=sys.stdout

      >>>sys.stdout=open(‘log.txt’,’a’)

      >>>print ‘spam’

     >>>print 1,2,3

     >>>sys.stdout.close()

     >>>sys.stdout=temp

     >>>print open(‘log.txt’).read()

     spam

     1,2,3

      这样的操作显得复杂,于是增加了print的扩展功能,当print以>>开始,后面再跟输出的文件对象或其他对象时,该print语句可以将文字传给该对象的write方法。

      >>>log=open(‘log.txt’,’a’)

      >>>print >> log,’x’.’y’,’z’

     这种print扩展形式通常把错误讯息打印到标准错误流sys.stderr,例如:

     >>>import sys

     >>>sys.stderr.write(‘Bad!’+’/n’)

     Bad!

     

     >>>print >>sys.stderr,’Bad!’

     Bad!

三、if语句:

1、通用格式:

  if  <test1>:

      <statements1>

  elif <test2>:

      <statements2>

  else:

      <statements3>

2、if语句是执行多路分支的最直接的方式

3、一些python语法规则:

   (1)语句是逐个运行的;

   (2)块和语句的边界会自动被检查;

   (3)复合语句=首行+“:”+缩进语句;

   (4)空白行、空格以及注释通常会被忽略;

   (5)文档字符串(docstring)会被忽略,但会保存并由工具显示;

   (6)代码块分隔符:python以行缩进检测块的边界

   (7)语句的分隔符:

     a、如果使用语法括号对,语句可以横跨数行;

     b、如果语句以反斜线结尾,可以横跨数行;

     c、三重引号字符串常量可以横跨数行;

     d、分号可以分隔在同一行的多条语句

   (8)真值测试:

         a、任何非零数字或非空对象都为真;

         b、数字零、空白对象、None都被认作是假;

         c、比较和相等测试会递归地应用在数据结构中;

         d、比较和相等测试会返回真或假的操作对象;

         e、布尔and和or会返回真或假的操作对象

   (9)布尔运算:

          and运算:x and y; 若x、y均为真就返回真

          or运算:x or y; 若x或y为真就返回真

          not运算:not x; 若x为假就返回真

    (10)if/else三元表达式:(只有当组成成分及其简单才用,否则写完整的if/else表达式)

           A=Y if X else Z

       等价于:

     if X:

                A=Y

           else:

                A=Z

四、while和for循环语句:

1、while循环:

   (1)一般格式:

    while <test>:

        <statements1>

    else:

        <statements2>

2、break、continue、pass、循环else        

   (1)break

        跳出最近所在的循环(跳过整个循环语句)

     continue

        跳到最近所在循环的开头处(来到循环的首行)

     pass

        什么也不做,只是空占位语句

     循环else块

        只有当循环正常离开时才会执行(也就是没有碰到break语句)

   (2)一般的循环格式:

         a、加入break和continue语句后,while循环的一般格式为:

            while <test1>:

                 <statements1>

                 if <test2>:break

                 if <test3>:continue

            else:

                 <statements2>

            break,continue语句可以出现在while(或for)循环主体的任何地方,但通常会进一步嵌在if语句中,根据相应的条件采取相应的操作

         b、pass:

               pass语句是空占位语句,当语法需要没有任何实用的语句时,就可以实用这条语句;

         c、continue/break语句:

            eg:

              x=10

              while x:

                  x-=1

                  if x %2!=0:continue

                  print x

3、for循环:

      for循环是一个通用的序列迭代器:可以遍历任何有序的序列对象内的元素;可用于字符串、列表、元组、其他内置可迭代对象以及通过类所创建的新对象

     (1)一般格式:

       for <target> in <object>:

           <statements1>

       else:

           <statements2>

        for语句也支持一个选用的else块,如果循环离开时没有碰到break语句,就会执行(也就是所有元素被访问完后)

       for循环的完整格式:

       for <target> in <object>:

           <statements1>

           if <test1>:continue

           if <test2>:break

       else:

           <statements2>

   4、迭代器:

     迭代工具包括有:for循环,列表解析,in成员测试,map内置函数等

     (1)文件迭代器:

        a、readline()方法可以从一个文件中读取一行,每调就会前进到下一行,到达文件末尾时返回空字符串

       b、next()方法也有类似功能

       c、读取文本文件的最佳方式,利用for循环,例如:

          for line in open(‘文件’):

               print line.upper

     (2)其他内置类型迭代器:

        a、列表迭代器:当for循环开始时,会通过它传递给iter()内置函数,以便从迭代对象获取一个迭代器,返回的对象含有需要的next()方法

       >>>L=[1,2,3]

       >>>I=iter(L)

        >>>I.next()

        1

        b、字典迭代器:会自动返回一个键

        >>>D={‘a’:1,‘b’:2,’c’:3}

        >>>for key in D:

                print key,D[key]

        …

        a 1

        b 2

        c 3

       c、其他迭代环境:(文件‘script1.py’事先已经写好)

          in成员关系测试:

          >>>uppers=[line.upper() for line in open(‘script1.py’)]

          map()内置函数:

          >>>map(str.upper(),open(‘script1.py’))

          其他内置函数:

          >>>L=[1,2,3,4]

          >>>sorted(L)

          >>>sum(L)

          >>>any([‘spam’,’’,’ni’])

          True

          >>>all([‘spam’,’’,’ni’])

          False

      5、编写循环的技巧:          (1)range函数

           range函数传入一个参数时,产生从零算起的整数列表;

           range函数传入两个参数时,第一个参数视为下边界;

           range函数传入三个参数时,第三个参数提供步进值;

           range函数常用于for循环中;

           range函数加上步进参数常用来实现非完备遍历;

           range函数常用于在循环遍历列表时对其进行修改:

            eg:>>>L=[1,2,3,4,5]

                   >>>for i inrange(len(L)):

                          L[i]+=1

                   >>>L

                   [2,3,4,5,6]

         (2)并行遍历:zip()和map()函数:

            zip()函数会取得一个或多个序列作为参数,返回值为元组的列表,将这些序列中的并排元素配成对;

            map()函数也可以把序列的元素配对,只是参数长度不同时会为较短的序列用None补齐;

           a、利用zip()构造字典:

               >>>keys=[‘spam’,‘eggs’,’toast’]

               >>>vals=[1,2,3]

               >>>zip(keys,vals)

               >>>D={}

               >>>for (k,v) inzip(keys,vals):

                      D[k]=v

               >>>D

               {‘spam’:1,’eggs’:2,’toast’:3}

               当然我们也可以跳过for循环,利用dic()函数构造字典:

               >>>D1=dic(zip(keys,vals))

         (3)产生偏移和元素:enumerate()

            enumerate()函数返回一个生程器对象:这种对象支持迭代协议,这个对象有一个next()方法,每次遍历列表都会返回一个(index,value)的元组

            eg:>>>S=’spam’

                     >>>E=enumerate(S)

                     >>>E.next()

                      (0,’s’)

6、列表解析:

      (1)列表解析基础:从语法上讲,列表解析就是对集合中的每一个元素进行某种运算

        eg:>>>L=[1,2,3,4]

              >>>L=[x+10 for x in L]

              >>>L

              [11,12,13,14]

      (2)列表解析都可以用for循环来完成

五、文档:

形式

角色

#注释

文件中的文档

dir函数

对象中可用属性列表

文档字符串:_ _doc_ _

附加在对象上的文件中的文档

PyDoc:help函数

对象的交互帮助

PyDoc:HTML报表

浏览器中的模块文档

标准手册

正式的语言和库说明

网站资源

在线教程和例子

出版书籍

商业参考书籍

    1、文档字符串:_ _doc_ _

       python支持可自动附加在对象上的文档,而且在运行时可以保存查看。从语法上看,这类注释写成字符串,放在模块文件、函数以及类语句的顶端,就在任何可执行代码            前,python会自动封装这个字符串,成为文档字符串,使其成为相应对象的_ _doc_ _属性。

       eg:考虑下面文件docstrings.py

            ‘’’

            Module documentation

            Words Go Here

            ‘’‘

            spam=40

            def square(x):

                  ‘’’

                  function documentation

                  can we have your liver then?

                   ‘’’

                   return x**2

            class employee:

                   ‘class documentation’

                    pass

            print square(4)

            print square._ _doc_ _

            执行命令:

            >>>importdocstrings

            16

             function documentation

             can we have your liverthen?

             >>>printdocstrings._ _doc_ _

             Module documentation

             Words Go Here

             >>>print docstrings.employee._ _doc_ _

             class documentation

             要从模块中类的方法函数的文档字符串,可以路径访问:module.class. method._ _doc_ _

2、PyDoc:HTML报表

          PyDoc提供GUI接口将报表通过HTML网页格式来呈现:linux系统下打开GUI的方法如下:

         >>>import pydoc

          >>>pydoc.gui()

3、网站资源:www.python.org

         在网站上可以获得标准库手册等资源。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表