python人工智能

Python快速入门

2018-04-24  本文已影响278人  光行天下

Python语言本身就是一门简单的语言,入门非常容易。

机器学习中用到的Python(语法)相对就更简单了。

本文从机器学习的视角来看需要具备的Python基础。

我们的目标是~~

没有蛀牙...

针对一个程序员(如Java程序员),在1个小时内学会足够机器学习中使用到的Python语法。

1. Python简介

Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。

Guido van Rossum

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

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

2. Python基础

以#开头的语句是注释,注释是给人看的,可以是任意内容,解释器会忽略掉注释。其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块。

缩进有利有弊。好处是强迫你写出格式化的代码,但没有规定缩进是几个空格还是Tab。按照约定俗成的管理,应该始终坚持使用4个空格的缩进。

缩进的另一个好处是强迫你写出缩进较少的代码,你会倾向于把一段很长的代码拆分成若干函数,从而得到缩进较少的代码。

缩进的坏处就是“复制-粘贴”功能失效了,这是最坑爹的地方。当你重构代码时,粘贴过去的代码必须重新检查缩进是否正确。此外,IDE很难像格式化Java代码那样格式化Python代码。

最后,请务必注意,Python程序是大小写敏感的,如果写错了大小写,程序会报错。

2.1 数据类型

计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,有六个标准的数据类型:

pi = 3.14

str = "阿光最帅!"

list = [ 'kevin', 998 , 13.14, 'roy', 666 ]

tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )

student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
superman = set(['Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'])

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

2.2 条件判断

计算机之所以能做很多自动化的任务,因为它可以自己做条件判断。

Python中使用if、elif 和 else 来完成条件判断。

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')

2.3 循环

循环语句允许我们执行一个语句或语句组多次。

Python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来。

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。

sum = 0
n = 99
while n > 0:
    sum = sum + n
    n = n - 2
print(sum)

break语句可以在循环过程中直接退出循环,而continue语句可以提前结束本轮循环,并直接开始下一轮循环。这两个语句通常都必须配合if语句使用。

2.4 with语句

有一些任务,可能事先需要设置,事后做清理工作。对于这种场景,Python的with语句提供了一种非常方便的处理方式。一个很好的例子是文件处理,你需要获取一个文件句柄,从文件中读取数据,然后关闭文件句柄。在这个过程中,你还需要处理很多异常。

try:
    f = open('xxx')
except:
    print 'fail to open'
    exit(-1)
try:
    do something
except:
    do something
finally:
     f.close()

虽然这段代码运行良好,但是太冗长了。

这时候就是with一展身手的时候了。除了有更优雅的语法,with还可以很好的处理上下文环境产生的异常。

下面是with版本的代码:

with open("/tmp/foo.txt") as file:
    data = file.read()

3. 函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

Python 定义函数使用 def 关键字。

# 计算面积函数
def area(width, height):
    return width * height
 
def print_welcome(name):
    print("Welcome", name)

print_welcome("Runoob")
w = 4
h = 5
print("width =", w, " height =", h, " area =", area(w, h))

4. 模块

在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。

为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。

使用模块有什么好处?

最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。我们在编写程序的时候,也经常引用其他模块,包括Python内置的模块和来自第三方的模块。

#!/usr/bin/python
# -*- coding:utf-8 -*-
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn import preprocessing

使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。

5. 面向对象编程

面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。

5.1 类和实例

面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。

class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score

    def print_score(self):
        print('%s: %s' % (self.name, self.score))

    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'


lisa = Student('Lisa', 99)
bart = Student('Bart', 59)
print(lisa.name, lisa.get_grade())
print(bart.name, bart.get_grade())

5.2 访问限制

在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问。

class Student(object):

    def __init__(self, name, score):
        self.__name = name
        self.__score = score

    def print_score(self):
        print('%s: %s' % (self.__name, self.__score))
   
    def get_name(self):
        return self.__name

    def get_score(self):
        return self.__score

    def set_score(self, score):
        self.__score = score

需要注意的是,在Python中,变量名类似xxx的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用namescore这样的变量名。

6. 总结

使用上述Python基本语法就能完成大部分的机器学习编程了。

本文绝大部分参考了下面两篇教程:

我只是根据机器学习入门需要的Python基础进行了大幅简化,能够让智慧如你的程序员在半个小时之内入门Python。

我只是教程的搬运工。

Kevin 2018年4月23日,于成都,为AI能力中心准备课件。

上一篇 下一篇

猜你喜欢

热点阅读