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)

  • 相关阅读:
    利用Java脚本实现弹出窗口后,按确定实现跳转
    客服利用QQ实现即时聊天
    获取页面可见区域,屏幕区域的尺寸
    圆角模板百度知道
    利用javascript实现web页面刷新的方法
    论:命名空间,程序集和类
    我从少年时候就非常喜欢的诗歌:雨巷
    魔兽世界 圣骑士唯一的远程武器任务
    又想起我年少时候熟记的抒情诗致海伦
    System.Text.Encoding.UTF8 字符串和字节数组的互相转换
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/12103516.html
Copyright © 2011-2022 走看看