Python基础

作者: 纵我不往矣 | 来源:发表于2016-04-19 20:54 被阅读63943次

    Python 基础教程

    实例(Python 2.0+)

    #!/usr/bin/python
    print "Hello, World!";
    

    实例(Python 3.0+)

    #!/usr/bin/python
    print("Hello, World!");
    

    Python 简介

    Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。


    Python 环境搭建

    集成开发环境: PythonWin


    Python 中文编码

    #!usr/bin/python
    #coding=utf-8
    print("hello world!");
    

    Python 基础语法

    • 交互式编程
      交互式编程不需要创建脚本文件,是通过 Python 解释器的交互模式进来编写代码。

    • 脚本式编程
      通过脚本参数调用解释器开始执行脚本,直到脚本执行完毕。当脚本执行完成后,解释器不再有效。

    $ python test.py
    

    以下划线开头的标识符是有特殊意义的。

    • 以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用"from xxx import *"而导入;

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

    • 在Python的代码块中必须使用相同数目的行首缩进空格数。

    • 我们可以使用斜杠( \)将一行的语句分为多行显示.

    • python中单行注释采用 # 开头。

    • python 中多行注释使用三个单引号(''')或三个双引号(""")。

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


    Python 变量类型

    exit()就可以退出
    
    • Python中的变量不需要声明.

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

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

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

    • 从左到右索引默认0开始的,最大范围是字符串长度少1
    • 从右到左索引默认-1开始的,最大范围是字符串开头
    s = 'ilovepython'
    s[1:5]
    结果是love,第一个要,最后一个不要。
    
    • 加号(+)是字符串连接运算符,星号(*)是重复操作。如下实例:
    #!/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列表
    • 列表用[ ]标识。
    • 列表中的值得分割也可以用到变量[头下标:尾下标],就可以截取相应的列表,从左到右索引默认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 运算符

    a**b 为10的20次方, 输出结果 100000000000000000000

    if ( a == b ): print "1 - a 等于 b"
    else: print "1 - a 不等于 b"
    
    • << 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
    • ">>"右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数
    Python成员运算符
    • in 如果在指定的序列中找到值返回 True,否则返回 False。
    • not in 如果在指定的序列中没有找到值返回 True,否则返回 False。
    a = 10
    b = 20
    list = [1, 2, 3, 4, 5 ];
    if ( a in list ):
       print "1 - 变量 a 在给定的列表中 list 中"
    else: 
       print "1 - 变量 a 不在给定的列表中 list 中"
    
    Python身份运算符
    • 身份运算符用于比较两个对象的存储单元
    • is is是判断两个标识符是不是引用自一个对象
    • is not is not是判断两个标识符是不是引用自不同对象
    a = 20
    b = 20
    if ( a is b ):
       print "1 - a 和 b 有相同的标识"
    else: 
       print "1 - a 和 b 没有相同的标识"
    

    Python 条件语句

    if 判断条件: 
       执行语句……
    else:
       执行语句……
    
    if 判断条件1: 
       执行语句1……
    elif 判断条件2: 
       执行语句2……
    elif 判断条件3: 
       执行语句3……
    else: 
       执行语句4……
    

    Python While循环语句

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    var = 1
    while var == 1 : # 该条件永远为true,循环将无限执行下去 
       num = raw_input("Enter a number :") 
       print "You entered: ", num
    print "Good bye!"
    
    #!/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"
    

    注意:以上的无限循环你可以使用 CTRL+C 来中断循环。

    Python for 循环语句

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    for letter in 'Python': # 第一个实例 
       print '当前字母 :', letter
    
    fruits = ['banana', 'apple', 'mango']
    for fruit in fruits: # 第二个实例
       print '当前字母 :', fruit
    print "Good bye!"
    
    当前字母 : P
    当前字母 : y
    当前字母 : t
    当前字母 : h
    当前字母 : o
    当前字母 : n
    当前字母 : banana
    当前字母 : apple
    当前字母 : mangoGood bye!
    
    通过序列索引迭代
    • 另外一种执行循环的遍历方式是通过索引,如下实例:
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    fruits = ['banana', 'apple', 'mango']
    for index in range(len(fruits)): 
       print '当前水果 :', fruits[index]
    print "Good bye!"
    
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    for num in range(10,20):         # 迭代 10 到 20 之间的数字
       for i in range(2,num):          # 根据因子迭代
          if num%i == 0:               # 确定第一个因子 
             j=num/i                   # 计算第二个因子 
             print '%d 等于 %d * %d' % (num,i,j)  
             break                     # 跳出当前循环 
    else:                            # 循环的 else 部分 
    print num, '是一个质数'
    

    Python pass 语句

    • Python pass是空语句,是为了保持程序结构的完整性。
    • pass 不做任何事情,一般用做占位语句。
    • Python 语言 pass 语句语法格式如下:
    pass
    

    Python 数字

    数据类型是不允许改变的,这就意味着如果改变数字数据类型得值,将重新分配内存空间。
    以下实例在变量赋值时 Number 对象将被创建:

    var1 = 1
    var2 = 10
    

    您也可以使用del语句删除一些数字对象引用。
    del语句的语法是:

    del var1[,var2[,var3[....,varN]]]]
    

    Python 字符串

    #!/usr/bin/python
    var1 = 'Hello World!'
    var2 = "Python Runoob"
    print "var1[0]: ", var1[0]
    print "var2[1:5]: ", var2[1:5]
    

    以上实例执行结果:

    var1[0]: H
    var2[1:5]: ytho
    
    Python字符串格式化
    • Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
    #!/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\nthere'
    >>> print hi # str()
    hi
    there 
    
    • 使用 Python 的 Unicode-Escape 编码
    >>> u'Hello\u0020World !'
    u'Hello World !'
    

    Python 列表(List)

    • 使用 del 语句来删除列表的的元素:
    #!/usr/bin/python
    list1 = ['physics', 'chemistry', 1997, 2000];
    print list1;
    del list1[2];
    print "After deleting value at index 2 : "
    print list1;
    
    • 以上实例输出结果:
    ['physics', 'chemistry', 1997, 2000]
    After deleting value at index 2 :
    ['physics', 'chemistry', 2000]
    
    • L[-2]读取列表中倒数第二个元素

    Python 元组

    • 创建空元组
      tup1 = ();

    • 元组中只包含一个元素时,需要在元素后面添加逗号
      tup1 = (50,);

    • 元组中的元素值是不允许修改的,但我们可以对元组进行连接组合

    • 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组


    Python 字典(Dictionary)

    • 字典是另一种可变容器模型,且可存储任意类型对象。

    • 键必须是唯一的,但值则不必。

    • 值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

    • 一个简单的字典实例:

    dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
    
    删除字典元素
    • 能删单一的元素也能清空字典,清空只需一项操作。
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
    del dict['Name']; # 删除键是'Name'的条目
    dict.clear(); # 清空词典所有条目
    del dict ; # 删除词典 
    print "dict['Age']: ", dict['Age'];
    print "dict['School']: ", dict['School'];
    

    Python 日期和时间

    • Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。
    • Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
    • 时间间隔是以秒为单位的浮点小数。
    • 每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
    • Python 的 time 模块下有很多函数可以转换常见日期格式。
    • time.time()用于获取当前时间戳, 如下实例:
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import time; # 引入time模块
    ticks = time.time()
    print "当前时间戳为:", ticks
    

    以上实例输出结果:

    当前时间戳为: 1459994552.51
    
    • 什么是时间元组?很多Python函数用一个元组装起来的9组数字处理时间:
    获取当前时间
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import time
    localtime = time.localtime(time.time())
    print "本地时间为 :", localtime
    

    以上实例输出结果:

    本地时间为 : time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, 
    tm_hour=10, tm_min=3, tm_sec=27, tm_wday=3, tm_yday=98, tm_isdst=0)
    
    获取格式化的时间asctime():
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import time
    localtime = time.asctime( time.localtime(time.time()) )
    print "本地时间为 :", localtime
    

    以上实例输出结果:

    本地时间为 : Thu Apr 7 10:05:21 2016
    
    格式化日期
    • 我们可以使用 time 模块的 strftime 方法
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import time
    # 格式化成2016-03-20 11:45:39形式
    print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) 
    # 格式化成Sat Mar 28 22:24:24 2016形式
    print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) 
    # 将格式字符串转换为时间戳a = "Sat Mar 28 22:24:24 2016"
    print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))
    

    以上实例输出结果:

    2016-04-07 10:25:09
    Thu Apr 07 10:25:09 2016
    1459175064.0
    
    获取某月日历
    • Calendar模块
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    import calendar
    cal = calendar.month(2016, 1)
    print "以下输出2016年1月份的日历:"
    print cal;
    

    以上实例输出结果:

    以下输出2016年1月份的日历: 
    January 2016
    Mo Tu We Th Fr Sa Su 
                   1  2  3 
       4  5  6  7  8  9  10
    11  12 13 14 15 16 17
    18  19 20 21 22 23 24
     25 26 27 28 29  30 31
    

    Python 函数

    • 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
    # 定义函数
    def printme( str ): 
          "打印任何传入的字符串" 
          print str; 
          return; 
    # 调用函数
    printme("我要调用用户自定义函数!");
    printme("再次调用同一函数");
    

    以上实例输出结果:

    我要调用用户自定义函数!
    再次调用同一函数
    
    按值传递参数和按引用传递参数
    • 所有参数(自变量)在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]]
    
    参数

    -以下是调用函数时可使用的正式参数类型:

    • 必备参数

    • 关键字参数

    • 默认参数

    • 不定长参数

    • 必备参数
      必备参数须以正确的顺序传入函数。

    • 关键字参数
      关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
      使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

    • 缺省参数
      调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

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

    #!/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 );
    

    以上实例输出结果:

    输出:
    10
    输出:
    70
    60
    50
    
    匿名函数
    • python 使用 lambda 来创建匿名函数。
    • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
    #!/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代码段。
    • 把相关的代码分配到一个 模块里能让你的代码更好用,更易懂。
    • 模块也是Python对象,具有随机的名字属性用来绑定或引用。
    • 简单地说,模块就是一个保存了Python代码的文件。模块能定义函数,类和变量。模块里也能包含可执行的代码。
    import 语句
    • 想使用Python源文件,只需在另一个源文件里执行import语句,语法如下:
    #!/usr/bin/python
    # -*- coding: UTF-8 -*- 
    # 导入模块
    import support # 现在可以调用模块里包含的函数
    support.print_func("Zara")
    

    以上实例输出结果:

    Hello : Zara
    
    • 一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
    From…import 语句
    • Python的from语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:
    例如,要导入模块fib的fibonacci函数,使用如下语句:
    from fib import fibonacci
    
    • From…import* 语句
    • 把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
    from modname import *
    

    这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。

    命名空间和作用域
    • 命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。

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

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

    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']
    
    globals()和locals()函数
    • 根据调用地方的不同,globals()和locals()函数可被用来返回全局和局部命名空间里的名字。
    • 如果在函数内部调用locals(),返回的是所有能在该函数里访问的命名。
    • 如果在函数内部调用globals(),返回的是所有在该函数里能访问的全局名字。

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

    reload()函数
    • 当一个模块被导入到一个脚本,模块顶层部分的代码只会被执行一次。
    • 因此,如果你想重新执行模块里顶层部分的代码,可以用reload()函数。该函数会重新导入之前导入过的模块。语法如下:
    reload(module_name)
    在这里,module_name要直接放模块的名字,而不是一个字符串形式。
    
    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
    

    相关文章

      网友评论

      • Luat物联网通信模块:可以关注下Luat开源项目,基于Air200 GPRS模块(价格才12块多),基于Lua开发应用软件,超级容易上手。 完美支持mqtt,而且开发点阵LCD 的UI 非常方便,有丰富的底层库,支持中文很方便。

      本文标题:Python基础

      本文链接:https://www.haomeiwen.com/subject/yyhzlttx.html