zoukankan      html  css  js  c++  java
  • python语法

    python是一种解释性的语言,执行过程会先进行编译在解释,但是python的编译不像java一样是必须执行的

      python中import的包,默认会被编译为pyc文件,如果py文件没有被修改,该import的pkg就不会在进行编译。

      (这样实现了编译型语言的共享模块的加载速度快,解释性语言的跨平台移植性强)

    python的运行有三种方式:

    1)  交互式解释器,解释性语言的特性;直接在linux中,输入python;

    2)  执行python脚本,python   script.py;

    3)  在IDE继承开发环境中开发,可以下载PyCharm;

    Python默认的编码格式是ASCII编码,在没有修改编码格式时,是不能读写中文的,

      python3.0之后,默认encoding是utf-8。

    /usr/bin/python 与 /usr/bin/env python的区别:在python  .py调用的时候没区别,

      但是通过chmod a+x *.py,之后./py执行的时候,会有不同,env python会寻找path中的第一个python安装目录。

    Python中的标识符,不能以数字开头,由字母,数字,下划线组成。所有的标识符都是大小写敏感的。

      以下划线,开头的标识符,表示不能直接被class外部访问到的属性,不能用import导入,_foo;

      以双下划线开头的标识符,表示class内部的私有变量,__foo;可以通过对象名._类名__私有属性名,来访问

      前后都是双下划线的标识符,表示python中的特殊方法,构造函数__init__;

    python中的保留字符,都是小写:

      

    python中的所有代码块的缩进数量必须相同,可以是单个制表符,2个空格或4个空格等。

      以缩进表示代码块,而不是{}

    python中的package和module机制, 

    python中的模块,module,一般指一个py文件,其中包含了变量,常量,函数,class等数据。

    python中的包,package,一般指一个目录结构,目录下边包括很多模块文件或者子包。都包含一个__init__.py的文件

      __init__.py一般为空,引用package的时候,也是引用该模块,也可以在此文件中,引用其他的package,控制包的导入行为

        如果想用from package import *这种写法,需要在__init__.py中初始化__all__,__all__=['file1', 'file2']  #package下有file1和file2两个文件。

     import X,表示将一个module或者package,引用到当前的namespace,但是访问attri和method,必须提供完整的路径

     from X import *,表示引入一个module或者package,将所有的public object引用到当前的namespace,访问时,提供相对的路径

      import  subpackage1.a    将模块subpackage.a引入该namespace,访问时,仍然需要全路径,subpackage1.a.attr

      from subpackage1 import a     将模块a导入该namespace,访问a中属性的时候,用a.attr

      from subpackage1.a import attr   可以直接使用attr的表示。  

    python中的空行一般来表示模块的边界,

    python中,可以使用斜杠"",来将一长行代码转变为多行代码;[],(),{}中可以任意分为多行代码;

    python中的字符串,可以在单引号''中,或者双引号""中,或者三引号''' ''''中,三引号中方便放很多包括'“”的特殊字符的字符串。  

    python中同一行写多行代码时,必须加分号;

    python中的注释,#注释单行,“””注释多行“””;

    python中的print默认输出换行符的,可以在后加逗号","来,避免print输出换行符。

    像if,while,def,class这样的复合语句中,首行以关键字开始,冒号":"结束,之后是自己的子句。

      if expression :

        suite

      elif expression :

        suit

      else :

        suit

    Python中的变量类型:

    python中的变量不需要声明,直接在赋值的时候,将指针赋值给标识符, 

    1) Number(数值),存储数值,当指定一个值时,Number对象会被创建

      var1 = 1; 

      del语句,删除一些对象的引用,del var_a,var_b

      数值类型的几种实例:int----10,long(用L表示)----10L,float------0.0,complex----(a+bj表示)或者complex(a,b)

    2) String(字符串),可以由数字,字母,下划线组成。

      索引:从左到右,默认从0开始;

         从右到左,默认从-1开始;

      截取:变量[头下标:尾下标]

      +表示字符串的连接运算符,*表示字符串的重复操作int类型的数据不能直接级联,需要str()转换一下

      打印字符串,print str

    3) List(列表),可以由数字,字符,字符串,列表(嵌套)组成。用[]来表示,有序的对象集合

      list = ['runoob',  786,  2.33]

      索引:

      截取:

      +号和*号类似。

      打印列表,print list

      list.reverse(l),直接修改list,并没有返回值。

    4) Tuple(元组),用()来表示。内部元素由逗号隔开,相当于只读列表。每个元素的地址不变,但是值是可以变的,比如其中有一个list,list是可以改变的。

      tuple = ('runoob', 786, 2.33)

      元组可以进行连接组合:tup3 = tup1+tup2,   返回tup1和tup2的连接组成一个新的元组。

      只有一个元素的元组,a = tuple(1,)    必须加,  表示是一个元组,否则该运算符中的优先级处理。

      无关闭分隔符,-------任何无符号的对象,以逗号隔开,默认为元组。

      x, y = 1, 2;              xy默认为一个元组赋值。

      元组的内置函数:cmp(tuple1, tuple2),比较两个元组;

              len(tuple),返回元组中的元素个数;

              max/min(tuple),返回元组中的最大的值和最小的值。

    5) Dictionary(字典),无序的对象集合,用{}来标识,由索引和value组成。

      dist = {'name':'join',  'code':6734}

      打印字典,print dist;print dist.keys();print dist.values() 

    python中的类型转换,返回的是一个新的对象

    数值类型:1)  int(x);2)  long(x); 3)  float(x);  4)  complex(real)

          5)  chr(x)整数转换为字符, 6) unichr(x) 整数转换为unicode,

          7)  ord(x)字符转换为整数值; 8) hex(x) 整数转换为16进制字符串;9) oct(x) 整数转换为8进制字符串

    字符串类型:1) str(x);转换为字符串,2) repr(x);转换为表达式字符串,3)eval(str),计算字符串中的有效表达式,返回一个对象;

    元组类型:1) tuple(s),将s转换为一个元组;

    列表类型:1) list(x),将序列s转换为一个列表;

    字典类型:1) list(s),s必须是一个序列元组

    python所有的数据类型都是class变量都是实例对象,可以通过type()查看该变量的数据类型,

      n = 1;   type(n);  返回’int‘

      a = 111;   isinstance(a, int);  返回true

    isinstance(),可以包含子父类关系进行判断,type(),只负责该class的对象判断。

    python中所有的空对象都是None,但是空字符,用null或者‘’来表示

      判断一个字符是否为空。

      if str.strip() == '': 

    python中自定义class 函数,可以直接重载python builtin的默认的function,这些function以__开始,结束。

      这一类的function有:如dir(int) __add__,__sub__,等。

                  dir(str) __lt__,__gt__,等。

      通用的function有:__str__,__repr__,等,这两个function都是方便打印的

                __delattr__,__setattr__,__getattribute__等function,关于attr管理

                __hash__,存放对象的hash值,主要用在哈希值的查找中。

    object的打印,默认都是打印的内存地址,__str__,面向用户,一般用在print中

                        __repr__,面向开发者,应用在所有其他的场景打印中

    在python2.0中,print还是一个系统调用函数,在python3.0中,print已经是一个内置函数,打印的object需要在括号中

      python2.0:print "Hello. world"

      python3.0:print("Hello, world")

    python3.0中的print函数,可以指定,分隔符,以及行尾符,以及句柄

      print ("i","am","hym",sep=";",sed=' ',file=sys.stdout,flush=False)

        默认的分隔符是空格,默认的行尾符是换行,默认的输出是stdout,不立即进行flush

    python3中,没有了xrange,只有range,功能上与xrange是相同的

    range和xrange的区别:

    range(start, end, step),在某个范围之内,按某个步值,产生一个list,需要将list完全存放下来;

    xrange,在功能上与range完全相同,但是返回的是一个生成器,在需要产生一个很大的list时,xrange的性能比range高很多。

    几种list的遍历方式:

    a = ['a', 'b', 'c', 'd']

    1)  for i  in a:   print i

    2)  for i  in  xrange(len(a)): print a[i]

    3)  for i, var in enumerate(a): print a[i],var

      python内部提供的函数,enumerate(iterable, start),可以指定开始的节点

    几种dict的遍历方式:

    a = {'a':1, 'c':2,‘d’:3}

    1) for k  in  d: print k,d[k]

    2) for k,v  in  d.iteritems(): print k,v

      iteritems(),dict内部的方法,实现对key和value的遍历;

      类似的还有iterkeys()和itervalues()来分别实现对key和value的遍历

      类似的还有view系列,与range一样,返回的是完整的dict,不是iterable的对象。

      直接调用keys()和values()也可以

    3) for k, v  in  d.viewitems():print k,v

    构造dict的方法:

    1) 两个list合并为一个dict, d = dict(zip('a', 'b', 'c'), (1, 2, 3))  产生一个dict对象,{‘a’:1,‘b’:2,‘c’:3}

    python中的map函数,对指定的序列做函数映射

    map(function, iterable);

      def square(x):

        return x**2;

      map(square, [1,2,3,4,5])   返回1,4,9,16,25

      map(lambda x: x**2,  [1,2,3,4,5])   返回1,4,9,16,25

    lambda,定义一个匿名的函数映射

      map(lambda  x,y:x+y,  [1,3,5,7,9], [2,4,6,8,10])    返回两个list中元素的和,[3,7,11,15,19]

    其他的全局函数还有,filter(过滤掉不符合条件的list中的元素),reduce(对列表等中的元素做累加)

      def is_odd(n):

        return n%2 == 1

      newlist = filter(is_odd, [1,2,3,4,5,6,7,8,910])

    python的debug模式

      运行:Python -m  python.script

      设置断点:break/b

      单行执行:next/n

      打印变量的值:pp

      查看当前行的代码段:list/l

      进入函数:step/s

      执行到函数返回:return/r

    python中的attr管理,obejct内中自建的function

    1) hasattr(object, name),判断一个对象中是否有某个属性或者方法,返回bool值

      t = test()

      hasattr(t,"name")   name是t中的属性

      hasattr(t,“run”)  run是t中方法

    2) getattr(object, name, default),拿到某个实例中的方法,返回内存地址,如果需要执行,在之后加(),属性,拿到属性值

      t = test()

      getattr(t, "name")    返回"xiaohua"

      getattr(t, "age", "18")   不存在age时,可以自己指定一个返回的默认值

    3) setattr(object, name, default),给属性赋值,如果不存在就先创建,在赋值

      t = test()

      setattr(t,“age”,“18”)    先在t中创建一个age的属性,之后赋值18

      getattr(t, "run")()    如果t中有run方法,就执行。

    python中的@property,属性装饰器。在给属性赋值的过程中,可以增加set get的判断操作。

      

    为了方便操作,使用property装饰器,age = property(getAge, setAge,  None,  ‘age property’)    (该none表示没有del的function)

      这样对age的操作,就可以直接赋值,但是也会调用set的判断。

      

    也可以使用@property来实现上边的功能:

      

    python2在使用property的时候,class必须继承object,是新式类,python3无影响。

      装饰器,将对属性的操作,转变为了function的调用,更方便代码的重构。

    pyc文件,python编译之后的文件,是一种byte code,py文件变为pyc之后,加载的速度会有所提高。不同版本之间的pyc文件是不通用的。

      python -m python.script   产生pyc文件。

    pyo文件,python优化编译之后的文件, python -O python.script  产生pyo文件。

    pyc文件也可以防止商业软件的盗用。

    python中的全局变量,是指在该模块,一个py文件中的全局变量。如果在一个def中需要使用某个全局变量x,

      global x,显示指向def外的global变量。

      如果在def中,使用了与global相同名字的变量又没有声明global,之后又对变量做赋值,python会直接报错。

      在def中,声明global变量,最好放在第一行,避免产生warning。

    python中的每个模块都有自己的__name__属性,而且这个属性是随时变化的,

      如果该模块被import,该模块的__name__为该模块的名字;

      如果该模块直接运行,该模块的__name__是__main__;

     python的异常,通过raise Exception来触发

      def functionName(level):

        if level < 1:

          raise Exception(Invalid level!, level)

     对于可能出现异常的代码,代码结构:

      try:

        fh = open()

      except:

      finally:

  • 相关阅读:
    iptables 增删查改
    在Ubuntu14.04上安装WordPress4搭建技术博客
    Revit 二次开发之 零件
    Revit 二次开发之 结构层次
    revit二次开发之 过滤器二FilteredElementCollector收集器
    Revit二次开发之 动态模型更新(DMU: Dynamic Model Update)功能
    revit二次开发之 过滤器一
    Revit 二次开发之标高参数
    Revit二次开发之 错误
    Visual Studio删除所有的注释和空行
  • 原文地址:https://www.cnblogs.com/-9-8/p/8135924.html
Copyright © 2011-2022 走看看