您的位置:首页 > 编程语言 > Python开发

机器学习之python基础(四)

2015-11-06 21:21 627 查看

机器学习之python基础(四)

综述

这一系列博客是记录我在学习python和机器学习的过程中的一些实践过程和体会,学习python时用到的参考书籍是《python学习手册 第四版》,即《learning python》的中文版。学习机器学习时所用的主要参考书籍是《机器学习实战》,还参考了CSDN博客平台上博客名为zouxy09的部分博客文章(博客后面附有url链接),实现其中的各种算法所使用的程序语言是python,实验平台是Ubuntu14.04,所使用的python版本是2.7.6。如果有博友想要与我进行交流可以在博客后面留言,或者发邮件到我的邮箱zouchaobin@foxmail.com。由于python3.0以后的版本与python3.0之前的版本有较大改变,所以为了某些代码的兼容性(如print函数),也为了便于直接使用《python学习手册》中的源代码(这本书的源代码是基于python3.x的),我决定采用以下处理方式:

from __future__ import print_function

from __future__ import division

在每个代码文件的开头加入以上两行代码,这样的话就可以使用python3.x的print函数和除法运算了,这样便于将这些代码稍加修改就能移植到python3.x的平台上。

python模块

在python中,模块是一个非常重要的功能,它能够让代码模块化,将程序代码和数据封装起来以便重用。每一个文件都是一个模块,并且模块导入(import)其他模块以后就可以使用导入模块定义的变量名(使用别的模块的全局变量往往会引起不必要的bug,所以不推荐直接操作别的模块的全局变量,而是通过调用模块内的方法来使用),模块可以有两个语句和一个和总要的内置函数进行处理。
import:使客户端(导入者)以一个整体获得一个模块
from:允许客户端从一个模块文件中获得特定的变量名
imp.reload:在不中止python程序的情况下,提供了一种重新载入模块文件代码的方法

其实在一开始我就已经用到来了模块的知识了:

from __future__ import print_function
from __future__ import division


有些C程序设计者喜欢把python的模块导入操作比作C语言的#include,但其实不应该这么比较,在python中,导入并非只是把一个文件文本插入到另外一个文件而已,导入其实是运行时的运算,程序第一次导入指定文件时会执行以下三个步骤:

1,找到模块文件

2,编译成位码(需要时)

3,执行模块的代码来创建其所定义的对象

这三个步骤只在程序执行时,模块第一次导入时才会执行,在这之后,导入相同模块时会跳过这三个步骤,而只是提取内存中已经加载的模块对象。以下是一个简单的import实例:

#file a.py
print("in block a:")

def print_in_a():
print("function print_in_a:")
#file b.py
print("in block b:")

def print_in_b():
print("function print_in_b:")
#file c.py
# -*- coding: utf-8 -*-
from __future__ import print_function from __future__ import division

print("in block c:")

import a
import b

def print_in_c():
print("function print_in_c:")

def func_add(x, y):
return x+y

以上三个文件a.py,b.py,c.py分别在自己的文件中定义了一个打印函数,而c.py导入了a.py和b.py,所以c.py可以直接使用a和b中的打印函数了,测试程序如下:

#file import_test.py
# -*- coding: utf-8 -*-
from __future__ import print_function from __future__ import division

from c import func_add

print('1+2=',func_add(1,2),sep='')

#import c
c.print_in_c()
c.a.print_in_a()
c.b.print_in_b()<pre name="code" class="python">print('1+2=',c.func_add(1,2),sep='')



运行结果如下:


由于只是使用了from方法来导入c.py中的func_add函数,而没有将C中的所有变量都导入,所以可以直接使用func_add函数而不能使用其他变量。去掉import c的注释以后的运行结果如下:



python模块还有reload方法,可以在第一次导入模块以后使用该方法直接再次导入在内存中的模块而不必再次使用import了。主要是在大型程序中在修改被导入的模块以后使用reload重新导入修改过的模块,而不必重新启动整个程序,可以大大节省时间,提高程序的执行效率。

示意如下:

#file import_reload_test.py
message = "Before editing"

def printer():
print(message)
首先建立一个文件,在其中定义一个变量message,内容如上,再定义一个函数用于打印该变量的内容,然后使用如下import命令导入import_reload_test模块,使用其中的打印函数打印变量的内容,然后使用编辑器修改message内容如下:

#file import_reload_test.py
message = "After editing"

def printer():
print(message)
然后再使用reload方法重新导入import_reload_test模块,再次使用其中的打印函数打印变量的内容,整个过程的运行结果如下所示:



在python3中,使用reload方法之前需要添加语句from imp import reload从imp中导入reload方法。另外,在python中还可以指定模块的路径和进行包导入等高级方法,此处按下不表。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: