zoukankan      html  css  js  c++  java
  • Python-快速入门

    【注】本文是学习《Python核心编程《第二版》》时的笔记。

    1 Python快速入门

    1.1 格式化输出print

    1 >>> print "%s is number %d" % ('python', 1)
    2 python is number 1

    print语句默认会给每一行添加一个换行符,只要在print语句的最后加上一个逗号(,),带逗号的print语句输出的元素之间会自动添加一个空格,就可以改变这种行为。

    1 >>> who = 'zheng'
    2 >>> what = 'Ni'
    3 >>> print 'we are the %s who say %s' % (who, (what + ' ')*4)
    4 we are the zheng who say Ni Ni Ni Ni

    1.2 标准输入raw_input

    1 >>> num = raw_input('input a number: ')
    2 input a number: 123
    3 >>> print 'Your input number is ', int(num)
    4 Your input number is  123

    1.3 输出重定向

    1 >>> import sys
    2 >>> print >> sys.stderr, 'Fatal error: invalid input'
    3 Fatal error: invalid input
    4 >>> logfile = open('/tmp/mylog.txt', 'a')
    5 >>> print >> logfile, 'Fatal error: invalid input'
    6 >>> logfile.close()

    1.4 运算符

    <  >  ==  !=  and  or  not  +  -  *  /  //  %

    1.5 数字

    有符号整型、长整型、布尔值、浮点值、复数

    1.6 字符串

    字符串的索引规则:第一个字符的索引是0,最后一个字符的索引是-1。

    1 >>> pystr = 'python'
    2 >>> pystr[0]
    3 'p'
    4 >>> pystr[2:5]
    5 'tho'
    6 >>> pystr[-1]
    7 'n'

    1.7 列表

    列表和数组相似,只是列表可以保存任意数量和类型的python对象,索引方式从0开始的数字索引。

     1 >>> alist = [1, 2, 3, 4]
     2 >>> alist[0]
     3 1
     4 >>> alist[-1]
     5 4
     6 >>> alist[0:3]
     7 [1, 2, 3]
     8 >>> alist[2] = 5
     9 >>> alist
    10 [1, 2, 5, 4]
    11 >>>

    1.8 元组

    元组用小括号()包裹,不可以修改(尽管他们的内容可以),元组可看成是只读的列表,通过切片可以得到子集。

    1 >>> atuple = ('roboots', 77, 90, 'try')
    2 >>> atuple
    3 ('roboots', 77, 90, 'try')
    4 >>> atuple[:3]
    5 ('roboots', 77, 90)
    6 >>> atuple[1] = 53
    7 Traceback (most recent call last):
    8   File "<stdin>", line 1, in <module>
    9 TypeError: 'tuple' object does not support item assignment

    1.9 字典

    字典是python中的映射数据类型,由键-值(key-value)对组成,一般使用数字或者字符串作为键,值可以是任意类型的python对象,字典使用大括号{}包裹。

     1 >>> adict = {'host':'search'}
     2 >>> adict['port'] = 90
     3 >>> adict
     4 {'host': 'search', 'port': 90}
     5 >>> adict.keys()
     6 ['host', 'port']
     7 >>> adict['host']
     8 'search'
     9 >>> adict['port']
    10 90
    11 >>> for key in adict:    
    12 ...     print key, adict[key]
    13 ... 
    14 host search
    15 port 90

    1.10 if

    1 if expression1:
    2 if_suite
    3 elif expression2:
    4     elif_suite
    5 else:
    6     else_suite

    1.11 while

    1 while expression:
    2     while_suite

    1.12 for

    python中的for接收可迭代对象(例如序列或迭代器)作为参数,每次迭代其中的一个元素

    1 >>> for item in ['email', 'net', 'home']:
    2 ...     print item,                      
    3 ... 
    4 email net home

    1.13 range

    range()函数通常和len()函数一起用于字符串的索引

    1 >>> foo = 'abc'
    2 >>> for i in (range(len(foo))):
    3 ...     print foo[i], '(%d)' % i
    4 ... 
    5 a (0)
    6 b (1)
    7 c (2)

    1.14 enumerate

    enumerate()函数可同时循环索引和循环元素

    1 >>> foo = 'abc'
    2 >>> for i, ch in enumerate(foo):
    3 ...     print ch, '(%d)' % i
    4 ... 
    5 a (0)
    6 b (1)
    7 c (2)

    1.15 列表解析

    可以在一行中使用一个for循环将所有值放到一个列表中

     1 >>> squared = [x**2 for x in range(4)]
     2 >>> for i in squared:
     3 ...     print i,
     4 ... 
     5 0 1 4 9
     6 >>> sqdevens = [x**2 for x in range(6) if not x%2]
     7 >>> for i in sqdevens:
     8 ...     print i
     9 ... 
    10 0
    11 4
    12 16

    1.16 open

    handle = open(file_name, access_mode = ‘r’)

    access_mode取值:’r’读取,‘w’写入,‘a’添加,‘+’读写,‘b’二进制访问

    返回值:文件句柄

    1 >>> fobj = open(filename, 'r')
    2 >>> for eachline in fobj:
    3 ...     print eachline    ,
    4 ... 
    5 >>> fobj.close

    1.17 错误和异常

    给代码添加错误检测和异常处理,将代码封装在try-except语句中,try之后放代码组,except之后放处理错误的代码。

    1 >>> try:
    2 ...     filename = raw_input('filename: ')
    3 ...     for eachline in fobj:
    4 ...         print eachline,
    5 ...     fobj.close()
    6 ... except IOError, e:
    7 ...     print 'file open error:', e

    1.18 函数

    1 def function_name ([arguments]):
    2     ‘optional documentation string’
    3     function_suite

    函数参数是可选的

    1 >>> def addme2me(x):
    2 ...     return (x+x)
    3 >>> addme2me([-1, 'abc']) 
    4 [-1, 'abc', -1, 'abc']

    注:加号操作几乎与所有的数据类型工作,不管是数值还是序列合并。

    函数的参数可以有一个默认值,如果提供默认值,在函数定义中,参数以赋值语句的形式提供,表示函数调用时如果没有提供这个参数,就取这个值作为默认值

    1 >>> def foo(debug = True):
    2 ...     if debug:                
    3 ...         print 'in debug mode'
    4 ...     print 'done'             
    5 ... 
    6 >>> foo()
    7 in debug mode
    8 done

    1.19 类

    定义类:

    1 class classname (base_class[es]):
    2     ‘option documentation string’
    3     static_member_declarations
    4     method_declarations

    class关键字定义类,可提供一个可选的父类或者基类,如果没有,就使用object作为基类。class之后是可选的文档描述符、静态成员和方法定义。

    1 >>> class fooclass(object):
    2 ...     version = 0.1
    3 ...     def __init__(self, name='John'):
    4 ...         self.name = name
    5 ...         print 'create a class instance for', name
    6 ...     def showname(self):
    7 ...         print 'your name is ', self.name
    8 ...     def addme2me(self, x):
    9 ...         return x+x

    __init__()方法是一个特殊方法,当一个类实例被创建时,__init__()方法会被自动执行,在类实例创建完毕后执行,类似构造器。主要完成初始化的工作。__init__()需要一个默认的参数。

    1 >>> fool = fooclass()
    2 create a class instance for John

    1.20 模块

    模块是一种组织形式,将彼此有关系的代码组织到一个个独立的文件中,模块可以包括执行代码,函数和类,或者这些东西的组合。

    导入模块:import module_name

    访问模块函数或模块变量:module.function()、module.variable

    1 >>> import sys
    2 >>> sys.stdout.write('hello, world!
    ')
    3 hello, world!
    4 >>> sys.platform
    5 'linux2'

    1.21 赋值

    增量赋值:+=、-=、*=、/=、%=、**=、<<=、>>=、&=、^=、|=

    1 >>> n = 12
    2 >>> n ^= 3
    3 >>> n
    4 15

    多重赋值:x = y = z = 1

    1 >>> x = y = z = 1
    2 >>> x
    3 1
    4 >>> y
    5 1
    6 >>> z
    7 1

    “多元赋值”:采用这种方法赋值时,等号两边的对象都是元组

     1 >>> (x, y, z) = (1, 2.2, 'string')
     2 >>> x
     3 1
     4 >>> y
     5 2.2000000000000002
     6 >>> z
     7 'string'
     8 >>> (x, y) = (y, x)
     9 >>> x
    10 2.2000000000000002
    11 >>> y
    12 1

    1.22 python对象

    所有的python对象都有三个特性:身份(可使用id()得到)、类型(可使用type()得到)和值

    身份:可看作对象的内存地址

    类型:(1)标准类型:数字、整型、布尔型、长整型、浮点型、复数型、字符串、列表、元组、字典;(2)其它内建类型:类型、Null对象(None)、文件、集合/固定集合、函数/方法、模块、类。

    类就是类型,实例就是类型的对象

    1.23 数字

    python支持多种数字类型:整型、长整型、布尔型、双精度浮点型、十进制浮点型和复数

    布尔型:布尔型只有两个值,True和Fasle

    标准整型:32位机器上标准整型的取值范围为-232到232-1,标准整型等价于C语言的有符号长整型,如果是八进制以数字“0”开始,十六进制整型以“0x”或“0X”开始;

    长整型:python的长整型能表达的数值仅仅与机器支持的虚拟内存大小有关,长整型是标准整型类型的超集,在一个整型值后面加个L(大小写都可以),表示这个整型是长整型。

    双精度浮点型:类似于C语言中的double类型,可以直接用十进制或者科学计数法表示,每个浮点型占8个字节,其中52位用于表示底,11位用于表示指数,剩下的1位表示符号,浮点型值通常都有一个小数点和一个可选的后缀e(大写或小写,表示科学计数法),在e和指数之间可以用正负号表示指数的正负。

    复数:一个复数就是一对有序浮点型(x, y),表示x+yi,其中x是实数部分,y是虚数部分

    复数的内建属性:分别为该复数的实部和虚部,复数还有conjugate方法,返回的该复数的共轭复数对象。

     1 >>> acomplex = -8.333-1.47j
     2 >>> acomplex
     3 (-8.3330000000000002-1.47j)
     4 >>> acomplex.real
     5 -8.3330000000000002
     6 >>> acomplex.imag
     7 -1.47
     8 >>> acomplex.conjugate()
     9 (-8.3330000000000002+1.47j)
    10 >>>

    1.24 数字操作符

    如果有一个操作数是复数,另一个操作数被转换为复数;

    否则,如果有一个操作数是浮点型,这另一个操作数被转换为浮点型;

    否则,如果有一个操作数是长整型,这另一个操作数被转换为长整型;

    否则,两者必然为普通整型,无需要转换

     

    1.25 算术操作符

    除法:对整型操作数,执行“地板除”(floor,取比商小的最大整型),例如5除以2等于2.5,“地板除”的结果是2

    传统除法

    真正的除法

    地板除

    如果是整型除法,传统除法会舍去小数部分,返回一个整型

    1/2=0  1.0/2.0=0.5

    除法运算总是返回真实的商

    可通过执行 from __future__ import division执行做到

    操作符//执行的是地板除://除法不管操作数是何种数值类型,总是舍去小数部分,返回数字序列中比真正的商小的最接近的数字

    取余:浮点数取余商取小于等于精确值的最大整型的乘积之差,即:x-(math.floor(x/y)*y)或者 

    。 

    幂运算:幂运算操作符比其左侧操作符的一元操作符优先级低,比其右侧操作符的一元操作符的优先级高。

    1 >>> 3 ** 2
    2 9
    3 >>> -3 ** 2
    4 -9
    5 >>> 4.0 ** -1.0
    6 0.25

    1.26 位操作符

    标准位运算:~、&、|、^、<<、>>

    负数会当作正数的二进制补码处理

    左移和右移N位等价于无溢出检查的2的N次幂,2**N

    1.27 标准类型函数

    cmp()、str()、type():可以用于所有的标准类型,对数字对象来说,这些函数分别比较两个数的大小,将数字转换为字符串,以及返回数字对象的类型。

    1.28 数字类型函数

    1 >>> int(4.12)
    2 4
    3 >>> long(321)
    4 321L
    5 >>> complex(4)
    6 (4+0j)
    7 >>> complex(4, -8)
    8 (4-8j) 

    1.29 功能函数

    进行数值运算:abs()、coerce()、divmod()、pow()、round()

    abs():返回给定参数的绝对值,如果是复数返回模的值

    coerce():为程序员提供了不依赖python解释器,而是自定义两种数值类型转换的方法,返回一个包含类型转换完毕的两个数值元素的元组。

     1 >>> coerce(1, 2)
     2 (1, 2)
     3 >>> coerce(1.3, 2L)
     4 (1.3, 2.0)
     5 >>> coerce(1, 2L)  
     6 (1L, 2L)
     7 >>> coerce(1j, 2L)
     8 (1j, (2+0j))
     9 >>> coerce(1.23+4j, 2L) 
    10 ((1.23+4j), (2+0j))

    divmod():把除法和取余运算结合起来,返回一个包含商和余数的数组,对整型来说,它的返回值就是地板除和取余操作的结果,对浮点数来说,返回的商部分是math.floor(num1/num2),对复数来说,商部分是ath.floor((num1/num2).real)

    1 >>> divmod(10, 3) 
    2 (3, 1)
    3 >>> divmod(3, 10) 
    4 (0, 3)
    5 >>> divmod(10, 2.5)
    6 (4.0, 0.0)
    7 >>> divmod(2+1j, 0.5-1j)
    8 __main__:1: DeprecationWarning: complex divmod(), // and % are deprecated
    9 (0j, (2+1j))

    pow():pow()函数和(**)操作符都可以进行指数运算。

    1 >>> pow(2, 5)
    2 32
    3 >>> pow(5, 2) 
    4 25

    round():用于对浮点型进行四舍五入运算,它可以有一个可选的小数位数参数,如果不提供小数参数,它返回与第一个参数最接近的整型(但仍然是浮点类型),第二个参数告诉round函数将结果精确到小数点后指定位数。round()函数按四舍五入的规则进行取整。

     1 >>> round(3)
     2 3.0
     3 >>> round(3.45)
     4 3.0
     5 >>> round(3.49999, 1)
     6 3.5
     7 >>> import math
     8 >>> for eachnum in range(10):
     9 ...     print round(math.pi, eachnum)
    10 ... 
    11 3.0
    12 3.1
    13 3.14
    14 3.142
    15 3.1416
    16 3.14159
    17 3.141593
    18 3.1415927
    19 3.14159265
    20 3.141592654
    21 >>> round(-3.5)
    22 -4.0
    23 >>> round(-3.4)
    24 -3.0
    25 >>> round(-3.49)
    26 -3.0
    27 >>> round(-3.49, )
    28 -3.0
    29 >>> round(-3.49, 1)
    30 -3.5

    int()、round()、math.floor()之间的区别:

    函数int()直接截去小数部分,返回值为整型;

    函数floor()得到最接近原数但小于原数的整型,返回值为浮点型;

    函数round得到最接近原数的整型,返回值为浮点型。

    1.30 仅用于整型的函数

    进制转换函数:oct()返回八进制整型,hex()返回十六进制整型

    1 >>> hex(255)
    2 '0xff'
    3 >>> oct(255)
    4 '0377'

    ASCLL转换函数:用于ASCLL码和其序列值之间的转换,函数chr()接受一个单字节整型值,返回一个字符串;函数ord()接受一个字符,返回其对应的整型值。

    1 >>> ord('A')
    2 65
    3 >>> chr(97)
    4 'a'

    1.31 布尔数

    有两个永不改变的值True和False

    布尔型是整型的子类,但是不能再被继承而生成它的子类

    没有__nonzero__()方法的对象的默认值是True

    对于值为0的任意数字或空集(空列表、空元祖和空字典等),布尔值为False

    1.32 拷贝python对象、浅拷贝和深拷贝

    浅拷贝:对象赋值是简单的对象引用,当创建一个对象,然后把它赋值给另一个变量的时候,python并没有拷贝这个对象,而是拷贝了这个对象的引用。

     1 >>> person = ['name', ['saving', 100.0]]
     2 >>> hubby = person[:]
     3 >>> wifey = list(person)
     4 >>> [id(x) for x in person, hubby, wifey]
     5 [140275404798072, 140275404797928, 140275404798936]
     6 >>> hubby[0] = 'joe'
     7 >>> wifey[0] = 'jane'
     8 >>> hubby, wifey
     9 (['joe', ['saving', 100.0]], ['jane', ['saving', 100.0]])
    10 >>> hubby[1][1] = 50.0
    11 >>> hubby, wifey      
    12 (['joe', ['saving', 50.0]], ['jane', ['saving', 50.0]])

    这里仅仅是做了一个浅拷贝,拷贝的对象本身是新的,但是内容不是,序列类型对象的浅拷贝是默认类型拷贝,可以通过(1)完全切片操作[:];(2)利用工厂函数,比如list()、dict()等;(3)使用copy模块的copy函数。

    1 >>> [id(x) for x in hubby]
    2 [140275404800288, 140275404797784]
    3 >>> [id(x) for x in wifey]
    4 [140275404800096, 140275404797784]

    深拷贝:要得到一个完全拷贝或者深拷贝-创建一个新的容器对象,包含原有对象元素(引用)全新拷贝的引用-需要copy.deepcopy()函数。

     1 >>> person = ['name', ['saving', 100.0]] 
     2 >>> hubby = person
     3 >>> import copy
     4 >>> wifey = copy.deepcopy(person) 
     5 >>> [id(x) for x in person, hubby, wifey]
     6 [140275404798792, 140275404798792, 140275404798072]
     7 >>> hubby[0] = 'joe'
     8 >>> wifey[0] = 'jane'
     9 >>> hubby, wifey
    10 (['joe', ['saving', 100.0]], ['jane', ['saving', 100.0]])
    11 >>> hubby[1][1] = 50.5
    12 >>> hubby, wifey      
    13 (['joe', ['saving', 50.5]], ['jane', ['saving', 100.0]])
    14 >>> [id(x) for x in hubby]
    15 [140275404801968, 140275404797136]
    16 >>> [id(x) for x in wifey]
    17 [140275404800624, 140275404799080]

    注意:1、非容器类型(比如数字、字符串和其它“原子”类型的对象,像代码、类型和xrange对象等)没有拷贝一说,浅拷贝是用完全切片操作来完成的;2、如果元组变量只包含原子类型对象,对它的深拷贝将不会进行。

    1 >>> person = ('name', ('saving', 100.0))  
    2 >>> newperson = copy.deepcopy(person)   
    3 >>> [id(x) for x in person, newperson]
    4 [140275404813160, 140275404813160]
    5 >>> [id(x) for x in person] 
    6 [140275405043824, 140275404797424]
    7 >>> [id(x) for x in newperson]
    8 [140275405043824, 140275404797424]

    附录:

    1 常用的内建函数

    函数

    描述

    dir([obj])

    显示对象的属性,如果没有提供参数,则显示全局变量的名字

    help([obj])

    显示对象的文档字符串,如果没有提供任何参数,则会进入交互式帮助

    int(obj)

    将一个对象转换为整型

    len(obj)

    返回对象的长度

    open(fn, mode)

    以mode(‘r’=读,’w’=写)方式打开一个文件名为fn的文件

    range([start,] stop [,step])

    返回一个整型列表,起始值为start,结束值为stop-1,start默认为0,step默认为1

    raw_input(str)

    等待用户输入一个字符串,可以提供一个可选的参数str用作提示信息

    str(obj)

    将一个对象转换为字符串

    type(obj)

    返回对象的类型,返回值本事是一个type对象

    2 python类型操作符和内建函数总结

    操作符/函数

    描述

    结果

    字符串表示

    ``

    对象的字符串表示

    str

    内建函数

    cmp(obj1, obj2)

    比较两个对象

    int

    repr(obj)

    对象的字符串表示

    str

    str(obj)

    对象的字符串表示

    str

    type(obj)

    检测对象的类型

    type

    值比较

    小于

    bool

    大于

    bool

    <=

    小于等于

    bool

    >=

    大于等于

    bool

    ==

    等于

    bool

    !=

    不等于

    bool

    <> 

    不等于

    bool

    对象比较

    Is

    bool

    not is

    不是

    bool

    布尔操作符

    not

    逻辑反

    bool

    and

    逻辑与

    bool

    or

    逻辑或

    bool

    3 标准类型分类

    数据类型

    存储模型

    更新模型

    访问模型

    数字

    标量

    不可更改

    直接访问

    字符串

    标量

    不可更改

    顺序访问

    列表

    容器

    可更改

    顺序访问

    元组

    容器

    不可更改

    顺序访问

    字典

    容器

    可更改

    映射访问

    4 数值工厂函数

    类(工厂函数)

    操作

    bool(obj)

    返回obj对象的布尔值,也就是obj.__nonzero__()方法的返回值

    int(obj, base=10)

    返回一个字符串或数值对象的整型表示,类似于string.atoi()

    long(obj, base=10)

    返回一个字符或数据对象的长整型表示,类似于string.atol()

    float(obj)

    返回一个字符串或数据对象的浮点型表示,类似string.atof()

    complex(str) or complex(real, imag=0.0)

    返回一个字符串的复数表示,或者根据给定的实数(及一个可选的虚数部分)生成一个复数对象

    5  数值运算内建函数

    函数

    功能

    abs(num)

    返回num的绝对值

    coerce(num1, num2)

    将num1和num2转换为同一类型,然后以一个元组形式返回

    divmod(num1, num2)

    除法-取余运算的结合,返回一个元组(num1/num2, num1%num2),对浮点型和复数的商进行下舍入,复数仅取实数部分的商

    pow(num1, num2, mod=1)

    取num1得num2次方,如果提供mod参数,这计算结果再对mod进行取余运算

    round(fit, ndig=1)

    接受一个浮点型fit并对其四舍五入,保存ndig位小数,若不提供ndig参数,则默认小数点后0位

    6 仅适用于整型的内建函数

    函数

    功能

    hex(num)

    将数字转换为十六进制数并以字符串形式返回

    oct(num)

    将数字转换为八进制数并以字符串形式返回

    chr(num)

    将ASCLL值的数字转换为ASCLL字符,范围只能是0<=num<=255

    ord(chr)

    接受一个ASCLL或Unicode字符(长度为1的字符串),返回对应的ASCLL值或Unicode值

    unichr(num)

    接受Unicode码值,其对应的Unicode字符,所接受的码值范围依赖于你的python是内建于UCS-2还是USC-4

    7 数值类型相关模块

    模块

    介绍

    decimal

    十进制浮点运算类Decimal

    array

    高效数值数组(字符、整型、浮点型等)

    math/cmath

    标准C库运算函数,常规数学运算在math模块,复数运算在cmath模块

    operator

    数字操作符的函数实现,比如tor.sub(m, n)等价于m-n

    random

    多种伪随机数生成器

    8 random模块

    函数

    介绍

    使用

    randint(a, b)

    两个整型参数,返回二者之间的随机整型

    import random

    random.randint(a,b)

    randrange(start, stop[, step])

    接受和range()函数一样的参数,随机返回range([start, ]stop[,step])结果中的一项

    random.randrange(1,100,2)

    uniform()

    几乎和randint()一样,不过返回的是二者之间的一个浮点型(不包括范围上限)

    random.uniform(a, b)

    random()

    类似于uniform(),只不过下限恒等于0,上限恒等于1.0

    random.random()

    choice()

    随机返回给定序列的一个元素

    random.choice(seq)

  • 相关阅读:
    Python 存储引擎 数据类型 主键
    Python 数据库
    Python 线程池进程池 异步回调 协程 IO模型
    Python GIL锁 死锁 递归锁 event事件 信号量
    Python 进程间通信 线程
    Python 计算机发展史 多道技术 进程 守护进程 孤儿和僵尸进程 互斥锁
    Python 异常及处理 文件上传事例 UDP socketserver模块
    Python socket 粘包问题 报头
    Django基础,Day7
    Django基础,Day6
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/12103516.html
Copyright © 2011-2022 走看看