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

机器学习之python基础(三)

2015-11-06 21:15 573 查看

机器学习之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中有许多的内置函数,用户可以直接调用,比如文件操作函数open(),write(),read()等,用户也可以根据需要自定义函数,但是需要遵守一定的规则。

def语句

python使用def来创建一个对象并将其赋值给某一变量名(函数名),从而生成函数,def在python中是一条可执行的语句,不像C语言,在运行def之前函数并不存在,运行def以后才产生函数。当然,也可以使用lambda来创建一个匿名的函数。

def <function_name>(arg1, arg2, arg3,...)

......(函数体)

......

return <value>

实例:

# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import division

#提出两个序列的交集部分
def intersect(seq1, seq2):
res = []
for x in seq1:
if x in seq2:
res.append(x)
return res

s1 = 'spam'
s2 = 'scam'
print(intersect(s1,s2))

#就算是两个不同类型,不同长度的序列也可以实现同样的功能
#下面就是一个元组和一个列表相同元素的提取
print(intersect((1, 2, 3, 4), [4, 3, 6, 7, 8, 2]))


运行结果如下:



global语句

global语句用于声明变量的作用域,它并不是一个类型或者大小的说明,是一个命名空间的声明。总结如下:
1,全局变量是位于模块文件内部的顶层的变量名。
2,全局变量如果实在函数内被赋值的话,必须经过声明(否则会生成函数内部的同名局部变量)。
3,全局变量在函数的内部不经过声明也可以被引用,但是不能赋值。
以下实例用法说明来在函数定义时的global用法,更多关于作用域的说明请参考《python学习手册》第四版。

# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import division

x = 0

#operate1()中声明了x是全局变量,所以函数中修改x的值会
#修改全局变量x的值
def operate1():
global x
x = 1

#operate2()中并没有声明x是全局变量,
#所以operate2()中的x只是函数的局部变量,修改x并不影响全局变量x的值
def operate2():
x = 2

#对于operate3(),这是一个嵌套作用域的例子,函数operate3()
#中又调用def语句生成了一个函数来打印x,在这种情况下,
#函数func所引用的x来源于函数operate3()的作用域
def operate3():
global x
x = 3
def func():
print(x)

print('before operate:',x)

operate1()
print('after operate1:',x)

operate2()
print('after operate2:',x)

operate3()
print('after operate3:',x)


运行结果如下:



python提供了lambda语句来生成不带函数名字的匿名函数,lambda是一个表达式,而不是一个语句,lambda的主体是一个单个的表达式,而不是一个代码块:

# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import division

def func():
x = 4
y = (lambda n:x ** n)
return y

a = func()
print(a(2))
运行结果如下:



另外还有带参数的函数,本博客的第一个实例便是最简单的带参数的函数,另外函数还有许多高级话题,此处按下不表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: