Python快速入门

作者: 光行天下 | 来源:发表于2018-04-24 01:20 被阅读278次

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

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

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

    我们的目标是~~

    没有蛀牙...

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

    1. Python简介

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

    Guido van Rossum

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

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

    • Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

    • Python 是交互式语言: 这意味着,您可以在一个Python提示符,直接互动执行写你的程序。

    • Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

    • Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。

    2. Python基础

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

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

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

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

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

    2.1 数据类型

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

    • Numbers(数字):数字数据类型用于存储数值。

    pi = 3.14

    • String(字符串):由数字、字母、下划线组成的一串字符。

    str = "阿光最帅!"

    • List(列表):列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(即嵌套)。

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

    • Tuple(元组):类似于List(列表),但是不能二次赋值,相当于只读列表。

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

    • Sets(集合):是一个无序不重复元素的序列。可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
    student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
    superman = set(['Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'])
    
    • Dictionary(字典):字典是无序的对象集合,通过键来存取的元素。字典由索引(key)和它对应的值(value)组成。

    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能力中心准备课件。

    相关文章

      网友评论

      本文标题:Python快速入门

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