机器学习:Python实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

4.1 Python速成

在开始使用Python之前,需要掌握几个Python语法,以便能够阅读和理解Python代码。

· 基本数据类型和赋值运算。

控制语句。

复杂数据类型。

函数。

接下来会通过一些例子来讲解上述内容。你也可以编写和测试这些内容来加强理解。在这里提醒大家一点,在Python中,空格是有意义的,用来区分代码块。

4.1.1 基本数据类型和赋值运算

作为一个程序员,对数据类型和赋值运算应该非常熟悉。下面简单地通过几个例子介绍一下Python的基本数据类型和赋值运算。

字符串

字符串的简单例子,代码如下:

    # 字符串
    data='Hello, world!'
    print(data[0])
    print(data[1:5])
    print(len(data))
    print(data)

在这里要注意print(data[0])和print(data[1:5]),这是字符串操作中对单个字符或指定范围的字符访问的方式。执行结果如下:

    H
    ello
    13
    Hello, world!

数值

数值的简单例子,代码如下:

    # 数值
    value=523
    print(value)
    value=6.18
    print(value)

执行结果如下:

    523
    6.18

布尔类型

布尔类型的简单例子,代码如下:

    # 布尔类型
    true=True
    false=False
    print(true)
    print(false)

执行结果如下:

    True
    False

多变量赋值

Python中的多赋值运算,代码如下:

    # 多变量赋值运算
    a, b, c=1,'hello',True
    print(a, b, c)
    print(a)
    print(b)
    print(c)

从程序的可读性上来看,建议不使用或尽量少使用多变量赋值运算。执行结果如下:

    1 hello True
    1
    hello
    True

空值

在Python中,每一种数据类型都是对象,空值是Python中的一个特殊值,用None表示,表示该值是一个空对象。你可以将None赋值给任何变量,也可以将任何变量赋值给一个None值的对象。代码如下:

    # 空值
    a=None
    b=a
    print(a)
    print(b)

执行结果如下:

    None
    None

4.1.2 控制语句

在Python中,控制语句主要有三类:条件控制语句、循环语句或条件循环语句。

条件控制语句

条件控制语句的简单例子,代码如下:

    # 条件控制语句
    value=1
    if value==1:
        print('This is ture')
    elif value > 10:
        print('it is bigger than 10? Yes it is true.')
    else:
        print('This is false')

执行结果如下:

    This is ture

在这里需要注意,每一个条件判断都以冒号(:)结尾,并且通过空格缩进来区分代码块。

循环语句

循环语句打印输出的简单例子,代码如下:

    # 循环语句
    for i in range(5):
        print(i)

执行结果如下:

    0
    1
    2
    3
    4

条件循环语句

条件循环语句输出的简单例子,代码如下:

    # 条件循环语句
    i=0
    while i < 5:
        print(i)
        i=i+1

执行结果如下:

    0
    1
    2
    3
    4

4.1.3 复杂数据类型

在Python中有三种数据类型非常有用,并且会被经常使用到。它们分别是元组、列表和字典,列表和字典更是经常被使用到。

元组

元组是一个只读的集合类型,初始化后,元组的元素不能重新赋值。代码如下:

    # 元组
    a=(1, 2, 3)
    print(a)
    print(a[1])

执行结果如下:

   (1, 2, 3)
    2

列表

列表与元组类似,只是列表通过中括号定义,而且列表的元素可以重新赋值。对列表增加列表项使用列表的append()函数。代码如下:

    # 列表
   a=[1, 2, 3]
   print(a)
   # 增加列表项
   a.append(4)
   print(a)
   print(a[3])
   # 更新列表项
   a[2]=5
   print(a)
   fori ina:
      print(i)

执行结果如下:

    [1, 2, 3]
    [1, 2, 3, 4]
    4
    [1, 2, 5, 4]
    1
    2
    5
    4

字典

字典是另一种可变容器模型,且可存储任意类型的对象。字典的每个键值对(key,value)用冒号(:)分隔,每个键值对之间用逗号(,)分隔,整个字典包括在花括号({})中。代码如下:

      # 字典
     mydict={'a': 6.18, 'b': 'str', 'c': True}
     print('A value: %.2f'% mydict['a'])
     # 增加字典元素
     mydict['a']=523
     print('A value: %d'% mydict['a'])
     print('keys: %s'% mydict.keys())
     print('values: %s'% mydict.values())
     forkey inmydict:
        print(mydict[key])

执行结果如下:

    A value: 6.18
    A value: 523
    keys: dict_keys(['a', 'b', 'c'])
    values: dict_values([523, 'str', True])
    523
    str
    True

此外,若删除字典中的全部元素,使用字典自身的clear()方法;若删除字典特定的key元素,用pop(key)方法。

      mydict={'a': 6.18, 'b': 'str', 'c': True}
     # 删除特定元素
     mydict.pop('a')
     print(mydict)
     # 删除字典中的全部元素
    mydict.clear()
    print(mydict)

执行结果如下:

    {'b': 'str', 'c': True}
    {}

4.1.4 函数

函数是组织好的、可重复使用的、用来实现单一或相关联功能的代码段。函数能提高应用的模块性和代码的重复利用率。目前我们已经使用了Python提供的许多内建函数,如print()。而且,也可以自己创建函数,即自定义函数。

自定义函数需要遵循以下几个简单的规则:

函数代码块以def关键词开头,后接函数标识符名称和圆括号()。

任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。

函数的第一行语句可以选择性地使用文档字符串,用于存放函数说明。

函数内容以冒号起始,并且缩进。

用return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。

下面是一个求和的自定义函数的示例,代码如下:

    # 定义函数
    def mysum(x, y):
        "这是自定义函数"
        return x+y
    # 测试函数
    result=mysum(x=1, y=2)
    print(result)

执行结果如下:

    3

4.1.5 with语句

要使用with语句,首先要明白上下文管理器这一概念。有了上下文管理器,with语句才能工作。

下面是一组与上下文管理器和with语句有关的概念。

上下文管理协议(Context Management Protocol):包含方法__enter__()和__exit__(),支持该协议的对象要实现这两个方法。

上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了__enter__()和__exit__()方法。上下文管理器定义执行with语句时要建立的运行时上下文,负责执行with语句块上下文中的进入与退出操作。通常使用with语句调用上下文管理器,也可以通过直接调用其方法来使用。

运行时上下文(Runtime Context):由上下文管理器创建,通过上下文管理器的__enter__()和__exit__()方法实现。__enter__()方法在语句体执行之前进入运行时上下文,__exit__()方法在语句体执行完毕后从运行时上下文退出。with语句支持运行时上下文这一概念。

上下文表达式(Context Expression):with语句中跟在关键字with之后的表达式,该表达式要返回一个上下文管理器对象。

语句体(with-body):with语句包裹起来的代码块,在执行语句体之前会调用上下文管理器的__enter__()方法,执行完语句体之后会执行__exit__()方法。

Python对一些内建对象进行改进,加入了对上下文管理器的支持,可以用于with语句中,比如可以自动关闭文件、线程锁的自动获取和释放等。假设要对一个文件进行操作,可以使用with语句,代码如下:

    with open('somefileName')as somefile:
        for line in somefile:
          print(line)
          # ...more code

这里使用了with语句,不管在处理文件过程中是否发生异常,都能保证with语句执行完毕后关闭了打开的文件句柄。如果使用传统的try/finally范式,则要使用如下代码:

    somefile=open('somefileName'try:
      forline insomefile:
          print(line)
          # ...more code
   finally:
      somefile.close()

使用with语句,简化了对异常的处理。因此,当需要对异常进行处理时,如果对象遵循了上下文管理协议(Context Management Protocol),建议使用with语句来实现。