• python入门小结


    以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用"from xxx import *"而导入;

    以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。





    多个语句构成代码组

    缩进相同的一组语句构成一个代码块,我们称之代码组。

    像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。

    我们将首行及后面的代码组称为一个子句(clause)。

    如下实例:

    if expression :
       suite
    elif expression :  
       suite  
    else :  
       suite




    多个变量赋值

    Python允许你同时为多个变量赋值。例如:
    a = b = c = 1

    以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上。

    您也可以为多个对象指定多个变量。例如:
    a, b, c = 1, 2, "john"

    以上实例,两个整型对象1和2的分配给变量a和b,字符串对象"john"分配给变量c。0




    Python有五个标准的数据类型:

        Numbers(数字)
        String(字符串)
        List(列表)
        Tuple(元组)
        Dictionary(字典)



    Python支持四种不同的数值类型:

        int(有符号整型)
        long(长整型[也可以代表八进制和十六进制])
        float(浮点型)
        complex(复数)



        长整型也可以使用小写"L",但是还是建议您使用大写"L",避免与数字"1"混淆。Python使用"L"来显示长整型。
        Python还支持复数,复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型












    Python字符串

    字符串或串(String)是由数字、字母、下划线组成的一串字符。

    一般记为 :
    s="a1a2···an"(n>=0)

    它是编程语言中表示文本的数据类型。

    python的字串列表有2种取值顺序:

        从左到右索引默认0开始的,最大范围是字符串长度少1
        从右到左索引默认-1开始的,最大范围是字符串开头

    如果你的实要取得一段子串的话,可以用到变量[头下标:尾下标],就可以截取相应的字符串,其中下标是从0开始算起,可以是正数或负数,下标可以为空表示取到头或尾。

    比如:
    s = 'ilovepython'

    s[1:5]的结果是love。

    当使用以冒号分隔的字符串,python返回一个新的对象,结果包含了以这对偏移标识的连续的内容,左边的开始是包含了下边界。

    上面的结果包含了s[1]的值l,而取到的最大范围不包括上边界,就是s[5]的值p。

    加号(+)是字符串连接运算符,星号(*)是重复操作。如下实例:
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-

    str = 'Hello World!'

    print str # 输出完整字符串
    print str[0] # 输出字符串中的第一个字符
    print str[2:5] # 输出字符串中第三个至第五个之间的字符串
    print str[2:] # 输出从第三个字符开始的字符串
    print str * 2 # 输出字符串两次
    print str + "TEST" # 输出连接的字符串

    以上实例输出结果:
    Hello World!
    H
    llo
    llo World!
    Hello World!Hello World!
    Hello World!TEST









    Python列表

    List(列表) 是 Python 中使用最频繁的数据类型。

    列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)。

    列表用[ ]标识。是python最通用的复合数据类型。看这段代码就明白。

    列表中的值得分割也可以用到变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认0开始的,从右到左索引默认-1开始,下标可以为空表示取到头或尾。

    加号(+)是列表连接运算符,星号(*)是重复操作。如下实例:
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-

    list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
    tinylist = [123, 'john']

    print list # 输出完整列表
    print list[0] # 输出列表的第一个元素
    print list[1:3] # 输出第二个至第三个的元素
    print list[2:] # 输出从第三个开始至列表末尾的所有元素
    print tinylist * 2 # 输出列表两次
    print list + tinylist # 打印组合的列表

    以上实例输出结果:

    ['abcd', 786, 2.23, 'john', 70.2]
    abcd
    [786, 2.23]
    [2.23, 'john', 70.2]
    [123, 'john', 123, 'john']
    ['abcd', 786, 2.23, 'john', 70.2, 123, 'john']

    Python元组

    元组是另一个数据类型,类似于List(列表)。

    元组用"()"标识。内部元素用逗号隔开。但是元素不能二次赋值,相当于只读列表。
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-

    tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 )
    tinytuple = (123, 'john')

    print tuple # 输出完整元组
    print tuple[0] # 输出元组的第一个元素
    print tuple[1:3] # 输出第二个至第三个的元素
    print tuple[2:] # 输出从第三个开始至列表末尾的所有元素
    print tinytuple * 2 # 输出元组两次
    print tuple + tinytuple # 打印组合的元组

    以上实例输出结果:
    ('abcd', 786, 2.23, 'john', 70.2)
    abcd
    (786, 2.23)
    (2.23, 'john', 70.2)
    (123, 'john', 123, 'john')
    ('abcd', 786, 2.23, 'john', 70.2, 123, 'john')

    以下是元组无效的,因为元组是不允许更新的。而列表是允许更新的:
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-

    tuple = ( 'abcd', 786 , 2.23, 'john', 70.2 )
    list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
    tuple[2] = 1000 # 元组中是非法应用
    list[2] = 1000 # 列表中是合法应用

    Python元字典

    字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。

    两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

    字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-

    dict = {}
    dict['one'] = "This is one"
    dict[2] = "This is two"

    tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


    print dict['one'] # 输出键为'one' 的值
    print dict[2] # 输出键为 2 的值
    print tinydict # 输出完整的字典
    print tinydict.keys() # 输出所有键
    print tinydict.values() # 输出所有值

    输出结果为:
    This is one This is two {'dept': 'sales', 'code': 6734, 'name': 'john'} ['dept', 'code', 'name'] ['sales', 6734, 'john']






    python运算符
    9/2             4
    9//2            4
    9.0/2.0         4.5
    9.0//2.0        4.0
    2**4            16


    print "Line 1 - Value of c is ", 2


    /    除 - x除以y    9 / 2 输出结果 2
    %    取模 - 返回除法的余数    b % a 输出结果 0
    **    幂 - 返回x的y次幂    a**b 为10的20次方, 输出结果 100000000000000000000
    //    取整除 - 返回商的整数部分    9//2 输出结果 4 , 9.0//2.0 输出结果 4.0





    a = 10
    b = 20
    list = [1, 2, 3, 4, 5 ];

    if ( a in list ):
       print "Line 1 - a is available in the given list"
    else:
       print "Line 1 - a is not available in the given list"






    Python身份运算符

    身份运算符用于比较两个对象的存储单元
    运算符    描述    实例
    is    is是判断两个标识符是不是引用自一个对象    x is y, 如果 id(x) 等于 id(y) , is 返回结果 1
    is not    is not是判断两个标识符是不是引用自不同对象    x is not y, 如果 id(x) 不等于 id(y). is not 返回结果 1








    循环使用 else 语句

    在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。

    #!/usr/bin/python

    count = 0
    while count < 5:
       print count, " is  less than 5"
       count = count + 1
    else:
       print count, " is not less than 5"

    以上实例输出结果为:

    0 is less than 5
    1 is less than 5
    2 is less than 5
    3 is less than 5
    4 is less than 5
    5 is not less than 5












    通过序列索引迭代

    另外一种执行循环的遍历方式是通过索引,如下实例:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-

    fruits = ['banana', 'apple',  'mango']
    for index in range(len(fruits)):
       print '当前水果 :', fruits[index]

    print "Good bye!"

    以上实例输出结果:

    当前水果 : banana
    当前水果 : apple
    当前水果 : mango
    Good bye!

    以上实例我们使用了内置函数 len() 和 range(),函数 len() 返回列表的长度,即元素的个数。 range返回一个序列的数。









    Python pass是空语句,是为了保持程序结构的完整性。

    passass 不做任何事情,一般用做占位语句。

    Python 语言 pass 语句语法格式如下:

    pass






















    Python字符串运算符

    下表实例变量a值为字符串"Hello",b变量值为"Python":
    操作符    描述    实例
    +    字符串连接    a + b 输出结果: HelloPython
    *    重复输出字符串    a*2 输出结果:HelloHello
    []    通过索引获取字符串中字符    a[1] 输出结果 e
    [ : ]    截取字符串中的一部分    a[1:4] 输出结果 ell
    in    成员运算符 - 如果字符串中包含给定的字符返回 True     H in a 输出结果 1
    not in     成员运算符 - 如果字符串中不包含给定的字符返回 True     M not in a 输出结果 1
    r/R    原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。    print r' ' prints 和 print R' ' prints
    %    格式字符串    请看下一章节














    Python字符串格式化

    Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。

    在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。

    如下实例:

    #!/usr/bin/python

    print "My name is %s and weight is %d kg!" % ('Zara', 21)

    以上实例输出结果:

    My name is Zara and weight is 21 kg!















    Python三引号(triple quotes)

    python中三引号可以将复杂的字符串进行复制:

    python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其他特殊字符。

    三引号的语法是一对连续的单引号或者双引号(通常都是成对的用)。

     >>> hi = '''hi
    there'''
    >>> hi   # repr()
    'hi there'
    >>> print hi  # str()
    hi
    there  

    三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。

    一个典型的用例是,当你需要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会非常的繁琐。

     errHTML = '''
    <HTML><HEAD><TITLE>
    Friends CGI Demo</TITLE></HEAD>
    <BODY><H3>ERROR</H3>
    <B>%s</B><P>
    <FORM><INPUT TYPE=button VALUE=Back
    ONCLICK="window.history.back()"></FORM>
    </BODY></HTML>
    '''
    cursor.execute('''
    CREATE TABLE users (  
    login VARCHAR(8),
    uid INTEGER,
    prid INTEGER)
    ''')







    你可以对列表的数据项进行修改或更新,你也可以使用append()方法来添加列表项
    可以使用 del 语句来删除列表的的元素,








    Python的元组与列表类似,不同之处在于元组的元素不能修改。

    元组使用小括号,列表使用方括号。

    元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。

    如下实例:

    tup1 = ('physics', 'chemistry', 1997, 2000);
    tup2 = (1, 2, 3, 4, 5 );
    tup3 = "a", "b", "c", "d";

    创建空元组

    tup1 = ();

    元组中只包含一个元素时,需要在元素后面添加逗号

    tup1 = (50,);











    删除字典元素

    字典键的特性

    字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。

    两个重要的点需要记住:

    1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住,如下实例:

    #!/usr/bin/python
     
    dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};
     
    print "dict['Name']: ", dict['Name'];

    以上实例输出结果:

    dict['Name']:  Manni

    2)键必须不可变,所以可以用数,字符串或元组充当,所以用列表就不行,如下实例:

    #!/usr/bin/python
     
    dict = {['Name']: 'Zara', 'Age': 7};
     
    print "dict['Name']: ", dict['Name'];

    以上实例输出结果:

    Traceback (most recent call last):
      File "test.py", line 3, in <module>
        dict = {['Name']: 'Zara', 'Age': 7};
    TypeError: list objects are unhashable






    日期和时间
    localtime = time.localtime(time.time())
    print "Local current time :", localtime









    按值传递参数和按引用传递参数

    所有参数(自变量)在Python里都是按引用传递。如果你在函数里修改了参数,那么在调用这个函数的函数里,原始的参数也被改变了。例如:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    # 可写函数说明
    def changeme( mylist ):
       "修改传入的列表"
       mylist.append([1,2,3,4]);
       print "函数内取值: ", mylist
       return
     
    # 调用changeme函数
    mylist = [10,20,30];
    changeme( mylist );
    print "函数外取值: ", mylist

    传入函数的和在末尾添加新内容的对象用的是同一个引用。故输出结果如下:

    函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
    函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

















    不定长参数

    你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。基本语法如下:

    def functionname([formal_args,] *var_args_tuple ):
       "函数_文档字符串"
       function_suite
       return [expression]

    加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可。如下实例:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    # 可写函数说明
    def printinfo( arg1, *vartuple ):
       "打印任何传入的参数"
       print "输出: "
       print arg1
       for var in vartuple:
          print var
       return;
     
    # 调用printinfo 函数
    printinfo( 10 );
    printinfo( 70, 60, 50 );











    匿名函数

    python 使用 lambda 来创建匿名函数。

        lambda只是一个表达式,函数体比def简单很多。
        lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
        lambda函数拥有自己的名字空间,且不能访问自有参数列表之外或全局名字空间里的参数。
        虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

    语法

    lambda函数的语法只包含一个语句,如下:

    lambda [arg1 [,arg2,.....argn]]:expression

    如下实例:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    # 可写函数说明
    sum = lambda arg1, arg2: arg1 + arg2;
     
    # 调用sum函数
    print "相加后的值为 : ", sum( 10, 20 )
    print "相加后的值为 : ", sum( 20, 20 )

    以上实例输出结果:

    相加后的值为 :  30
    相加后的值为 :  40










    命名空间和作用域

    变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。

    一个Python表达式可以访问局部命名空间和全局命名空间里的变量。如果一个局部变量和一个全局变量重名,则局部变量会覆盖全局变量。

    每个函数都有自己的命名空间。类的方法的作用域规则和通常函数的一样。

    Python会智能地猜测一个变量是局部的还是全局的,它假设任何在函数内赋值的变量都是局部的。

    因此,如果要给全局变量在一个函数里赋值,必须使用global语句。

    global VarName的表达式会告诉Python, VarName是一个全局变量,这样Python就不会在局部命名空间里寻找这个变量了。

    例如,我们在全局命名空间里定义一个变量money。我们再在函数内给变量money赋值,然后Python会假定money是一个局部变量。然而,我们并没有在访问前声明一个局部变量money,结果就是会出现一个UnboundLocalError的错误。取消global语句的注释就能解决这个问题。

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    Money = 2000
    def AddMoney():
       # 想改正代码就取消以下注释:
       # global Money
       Money = Money + 1
     
    print Money
    AddMoney()
    print Money








    dir()函数

    dir()函数一个排好序的字符串列表,内容是一个模块里定义过的名字。

    返回的列表容纳了在一个模块里定义的所有模块,变量和函数。如下一个简单的实例:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    # 导入内置math模块
    import math
     
    content = dir(math)
     
    print content;

    以上实例输出结果:

    ['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan',
    'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp',
    'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log',
    'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh',
    'sqrt', 'tan', 'tanh']

    在这里,特殊字符串变量__name__指向模块的名字,__file__指向该模块的导入文件名。











    globals()和locals()函数

    根据调用地方的不同,globals()和locals()函数可被用来返回全局和局部命名空间里的名字。

    如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名。

    如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字。

    两个函数的返回类型都是字典。所以名字们能用keys()函数摘取。
















    Python中的包

    包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。

    考虑一个在Phone目录下的pots.py文件。这个文件有如下源代码:

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    def Pots():
       print "I'm Pots Phone"
       

    同样地,我们有另外两个保存了不同函数的文件:

        Phone/Isdn.py 含有函数Isdn()
        Phone/G3.py 含有函数G3()

    现在,在Phone目录下创建file __init__.py:

        Phone/__init__.py

    当你导入Phone时,为了能够使用所有函数,你需要在__init__.py里使用显式的导入语句,如下:

    from Pots import Pots
    from Isdn import Isdn
    from G3 import G3

    当你把这些代码添加到__init__.py之后,导入Phone包的时候这些类就全都是可用的了。

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    # 导入 Phone 包
    import Phone
     
    Phone.Pots()
    Phone.Isdn()
    Phone.G3()

    以上实例输出结果:

    I'm Pots Phone
    I'm 3G Phone
    I'm ISDN Phone









    print [x for x in range (100) if not x % 2]






    [x*5 for x in range(2,10)]

    变量作用域

    #!/usr/bin/python
    # coding=utf-8
    name = "whole global name"
    
    
    class Person:
        name = "class global name"
    
        def __init__(self, new_name):
            # 执行锚点(1)
            # self.name = new_name
    
            # 执行锚点(2)
            name = new_name
    
        def say_your_name(self):
            print 'My name is %s' % self.name  # -> (1) cat  (2) class global name
            print 'name within class Person is actually the global name: %s' % name  # -> (1) whole global name (2) whole global name
            print "only access Person's name via Person.name=%s" % Person.name  # -> (1) class global name  (2) class global name
    
    
    if __name__ == "__main__":
        instance = Person("cat")
        instance.say_your_name()
        print "whole global name is %s" % name  # -> (1) whole global name (2) whole global name
  • 相关阅读:
    67 个拯救前端开发者的工具、库和资源
    js常用的工具函数
    npm快捷键
    给bootstrap table设置行列单元格样式
    script标签中type为"text/x-template"或"text/html"
    【转载】Ogre3d 2.1 源码编译安装教程
    【转载】OGRE 2.1 Windows 编译
    【转载】DXUT11框架浅析(4)--调试相关
    【转载】GitHub详解
    【转载】3D/2D中的D3DXMatrixPerspectiveFovLH和D3DXMatrixOrthoLH投影函数详解
  • 原文地址:https://www.cnblogs.com/balfish/p/4932297.html
Copyright © 2020-2023  润新知