• Python基础


                                         

    一、简介:

    Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,具有20多年的发展历史,成熟且稳定。

    应用领域:

    (1).常规软件开发

    Python支持函数式编程和OOP面向对象编程,能够承担任何种类软件的开发工作,因此常规的软件开发、脚本编写、网络编程等都属于标配能力。

    桌面软件:PyQt、PySide、wxPython()、PyGTK是Python快速开发桌面应用程序的利器。

    (2).科学计算

    随着NumPy,SciPy,Matplotlib,Enthoughtlibrarys等众多程序库的开发,Python越来越适合于做科学计算、绘制高质量的2D和3D图像。和科学计算领域最流行的商业软件Matlab相比,Python是一门通用的程序设计语言,比Matlab所采用的脚本语言的应用范围更广泛,有更多的程序库的支持。虽然Matlab中的许多高级功能和toolbox目前还是无法替代的,不过在日常的科研开发之中仍然有很多的工作是可以用Python代劳的。

    (3).自动化运维、操作系统管理

    这几乎是Python应用的自留地,作为运维工程师首选的编程语言,Python在自动化运维方面已经深入人心,比如Saltstack和Ansible都是大名鼎鼎的自动化平台。

    在很多操作系统里,Python是标准的系统组件。大多数Linux发行版以及NetBSD、OpenBSD和MacOSX都集成了Python,可以在终端下直接运行Python。有一些Linux发行版的安装器使用Python语言编写,比如Ubuntu的Ubiquity安装器,RedHatLinux和Fedora的Anaconda安装器。GentooLinux使用Python来编写它的Portage包管理系统。Python标准库包含了多个调用操作系统功能的库。通过pywin32这个第三方软件包,Python能够访问Windows的COM服务及其它WindowsAPI。使用IronPython,Python程序能够直接调用.NetFramework。一般说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。

    (4).云计算

    开源云计算解决方案OpenStack就是基于Python开发的。

    【 OpenStack是一个由NASA(美国国家航空航天局)和Rackspace合作研发并发起的,以Apache许可证授权的自由软件开放源代码项目。 。OpenStack支持几乎所有类型的云环境,项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。】

    (5).WEB开发

    基于Python的Web开发框架比较多,比如Django,还有Tornado,Flask。其中的Python+Django架构,应用范围非常广,开发速度非常快,学习门槛也很低,能够快速的搭建起可用的WEB服务。

    【 Django(发音:[`dʒæŋɡəʊ]) 是用python语言写的开源web开发框架(open source web framework),它鼓励快速开发,并遵循MVC设计。Django遵守BSD版权,初次发布于2005年7月, 并于2008年9月发布了第一个正式版本1.0 。】

    (6).网络爬虫、服务器软件

    也称网络蜘蛛,是大数据行业获取数据的核心工具。能够编写网络爬虫的编程语言有不少,Python绝对是其中的主流之一。

    Python对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络爬虫。第三方库Twisted支持异步网络编程和多数标准的网络协议(包含客户端和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件。

    (7).数据分析

    在大量数据的基础上,结合科学计算、机器学习等技术,对数据进行清洗、去重、规格化和针对性的分析是大数据行业的基石。Python是数据分析的主流语言之一。

    (8).人工智能

    Python在人工智能大范畴领域内的机器学习、神经网络、深度学习等方面都是主流的编程语言,得到广泛的支持和应用。

    (9).游戏

    很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型。

    近些年,编程语言Python的热度越来越高,因为Python简单,学起来快,是不少程序员入门的首选语言。

    在网络游戏开发中,Python也有很多应用,相比于Lua or C++,Python比Lua有更高阶的抽象能力,可以用更少的代码描述游戏业务逻辑,Python非常适合编写1万行以上的项目,而且能够很好的把网游项目的规模控制在10万行代码以内。

    (10).金融分析与交易

    金融分析包含金融知识和Python相关模块的学习,学习内容囊括NumpyPandasScipy数据分析模块等,以及常见金融分析策略如“双均线”、“周规则交易”、“羊驼策略”、“Dual Thrust 交易策略”等。

    量化交易,就是以数学模型替代人的主观判断来制定交易策略。通常会借助计算机程序来进行策略的计算和验证,最终也常直接用程序根据策略设定的规则自动进行交易。

    Python 由于开发方便,工具库丰富,尤其科学计算方面的支持很强大,所以目前在量化领域的使用很广泛。市面上也出现了很多支持 Python 语言的量化平台。通过这些平台,你可以很方便地实现自己的交易策略,进行验证,甚至对接交易系统

    Python 量化平台:

    国内平台:优矿  uqer.io   聚宽joinquant.com    米筐 ricequant.com

    国外平台:quantopian.com

    Python的就业方向

    • 发展前景一:Linux运维
    • 发展前景二:Python Web网站工程师
    • 发展前景三:Python自动化测试
    • 发展前景四:数据分析
    • 发展前景五:人工智能

    例子:

    国外:谷歌、youtobe。。。

    国内:知乎、搜狐、网易游戏、豆瓣。。。



    二、安装

    1、(下载安装 python运行环境) 上python官网下载python运行环境(https://www.python.org/downloads/),建议下载稳定版本,不推荐使用最新版本

    2、(测试)打开cmd

     

    3、如果失败手动配置系统环境

     

    3、安装python包 

    安装包有两种方法,一种是使用命令行,一种是IDE选择安装

    1)下载 https://pypi.python.org/pypi/pip

     

    在管理员方式DOS下输入下图命令,进入pip-9.0.1文件夹,然后输入:python setup.py install 进行pip安装

    2)(下载安装)上pycharm官网下载最新版的IDE(http://www.jetbrains.com/pycharm/download/#section=windows),官网提供了mac、windows和linux三种版本

    1、

     

     

    2、

     

    3、

     

    4、

     

    三、简单使用

    1、Python交互模式

     

     

    2、使用IDE开发工具PyCharm

    1)创建工程

     

     

    2)创建一个python文件

     

    3)编写简单语句

     

    4)运行

     

    5)结果

     

     

     

    五、使用

    1、使用编码格式,否则出现中文会报错

    使用编码格式,否则出现中文会报错

    # encoding: utf-8

    或者

    # -*- coding:UTF-8 -*-

     

     

    2、 由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法__init__方法,例如在Student类时,把name、score等属性绑上去:

    lass Student(object):

    def __init__(self, name, score):

    self.name = name

    self.score = score

    >>>student = Student("Hugh", 99)

    >>>student.name

    "Hugh"

    >>>student.score

    99

    注:

    (1)__init__方法的第一参数永远是self,表示创建的类实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。

    (2)有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去:

    (3)这里self就是指类本身,self.name就是Student类的属性变量,是Student类所有。而name是外部传来的参数,不是Student类所自带的。故,self.name = name的意思就是把外部传来的参数name的值赋值给Student类自己的属性变量self.name。

    (4)在Python中,变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量,所以,不能用__name__、__score__这样的变量名。

     

    3、 如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线.

    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)

     

    注:关于新旧式类

    (1)继承object类是为了让自己定义的类拥有更多的属性,以便使用。当然如果用不到,不继承object类也可以。python2中继承object类是为了和python3保持一致,python3中自动继承了object类。

    (2)python2中需要写为如下形式才可以继承object类。

    def class(object):

    python2中写为如下两种形式都是不能继承object类的,也就是说是等价的。

    def class:

    def class():

     

     

    基础使用:

    # encoding: utf-8
    #coding=utf-8
    # -*- coding: UTF-8 -*-
    # 编码格式,必须要使用
    
    print('----------------1--------------')
    print ("hello Python!");
    print ("123",123);
    print ("1+1=",1+1);
    print ("2的7次方",2 ** 7);
    
    
    print('-------------2---判断/循环------------------------------')
    # 判断
    if (1!=1):
        print ("True1")
    elif 2==2:
        print ("True2")
    else:
        print ("False")
    
    print('----------')
    
    # 循环
    for x in [1, 2, 3]:
        print(x)
    
    
    print('-------------3字符串--------------------------------')
    str = 'RunoobReb'
    print(str)
    # 含头不含尾
    print("0-"+str[0])
    print("01-"+str[0:-1])
    print("25-"+str[2:5])
    # 隔2个取数
    print("162-"+str[1:6:2])
    print("2-"+str[2:])
    print(str * 2)
    print(str + "123asd")
    #
    print('-------------数组---------------------------------')
    # 数组
    tup = (1, 2, 3, 4, 5, 6)
    # 含头不含尾
    print(tup[0])
    print(tup[1:5])
    # 计算长度
    print(len(tup))
    #
    print('-------------集合1----------------------------')
    # list是python基本数据类型,它的元素类型可以不同,如:[1, 2, 'a', 3,4]
    #  array是numpy的一种数据类型,它所包含的元素类型必须相同,如:    [1, 2, 3, 4]
    # NumPy系统是Python的一种开源的数值计算扩展
    list = [1,1,2,3]
    print ([[x, x**2] for x in list])
    # 集合转元组
    # 定义元组tuple的时候,用的是括号()
    # tuple一旦初始化就不能修改,这里说的不能修改是指tuple的每个元素,指向永远不变
    # tuple和数组不同就在于,tuple中的元素也可以包括list可以包括自己,元组tuple不变,但是tuple里面的元素list是可变的
    print (tuple(list))
    
    # 统计1出现的次是
    print ("统计",list.count(1))
    # 删除
    del list[2]
    print ("删除第三个元素 : ", list)
    # 新增
    list.append(5)
    print ("增加一个元素 : ", list)
    
    # 嵌套列表
    x = [['a', 'b', 'c'], [1, 2, 3]]
    print(x[0])
    # 一次性追加一个集合
    list.extend(x)
    print(list)
    list.append(x)
    print(list)
    
    
    print('-------------5集合2------------------------------')
    # Set(集合) 无序不重复的序列,自动去除重复
    # 可以使用大括号({})或者set()函数创建集合
    student = {'Tom', 'Jim', 'Mary', 'Tom','Tom', 'Jack','Jack', 'Rose'}
    print(student)
    
    
    if 'Rose' in student :
        print('Rose 在集合中')
    else :
        print('Rose 不在集合中')
    
    print('----update-是拆散了放进集合----')
    student.update({1,2},[3,4])
    student.update('haha')
    print ("update--",student)
    print('----add--是整体放进集合---')
    student.add('haha')
    print ("add--",student)
    
    print('-------------6集合运算------------------------------')
    a = set('abcd')
    b = set('cdef')
    print(a)
    
    print(a - b)  # a 和 b 的差集
    
    print(a | b)  # a 和 b 的并集
    
    print(a & b)  # a 和 b 的交集
    
    print(a ^ b)  # a 和 b 中不同时存在的元素
    
    print('-------------7----键值对操作-------------------------')
    dict = {}
    dict['one'] = "1 - 键值对操作"
    dict[2] = "2 - 操作工具"
    tinydict = {'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
    
    print (dict['one'])  # 输出键为 'one' 的值
    print (dict[2])  # 输出键为 2 的值
    print (tinydict)  # 输出完整的字典
    
    print (tinydict["name"]) # 输出键为 name 的值
    print (tinydict.keys())  # 输出所有键
    print (tinydict.values())  # 输出所有值
    print ("copy-",tinydict.copy()) # 复制
    
    print('-------------8---特殊字符---------------------------')
    # 3个引号的特殊功能,可以直接打印多行内容,而单引号,双引号情况需要显示输入
    才能换行
    para_str = """这是一个多行字
    符串的实例
    多行字符串可以使用制表符
    也可以使用换行符 [ 
     ]。
    TAB ( 	 )。
    """
    print (para_str)
    
    print('-------------9------------------------------')
    yourSlushUStr = "\u559c\u6b22\u4e00\u4e2a\u4eba";
    decodedUnicodeStr = yourSlushUStr.decode("unicode-escape")
    print decodedUnicodeStr

     

    爬虫小例子:

    属性

    r.status_code

    http请求的返回状态,200表示连接成功,404表示连接失败

    r.text

    http响应内容的字符串形式,url对应的页面内容

    r.encoding

    从HTTP header中猜测的响应内容编码方式

    r.apparent_encoding

    从内容分析出的响应内容的编码方式(备选编码方式)

    r.content

    HTTP响应内容的二进制形式

    r.headers

    http响应内容的头部内容

     

    案例1

    # -*- coding: UTF-8 -*-
    
    import requests
    
    url="http://111.231.135.29/anon/home"
    
    try:
    
        r=requests.get(url)
    
     
    
        # r.raise_for_status()的功能是判断返回的状态码,如果状态码不是200(如404),则抛出异常
    
        r.raise_for_status()
    
     
    
        r.encoding = "utf-8"
    
        # r.encoding = r.apparent_encoding
    
        print r.encoding
    
     
    
        # http响应内容的字符串形式,url对应的页面内容
    
        # print r.text
    
     
    
        # http响应内容的头部内容
    
        print r.headers
    
     
    
        # HTTP响应内容的二进制形式
    
        # print r.content
    
    except:
    
        print "failed"

     

    案例2爬虫获取百度搜索结果

    # coding: UTF-8
    
    import requests
    
    url="http://www.baidu.com/s"
    
    kv={"wd":"rebecca"}
    
    r=requests.get(url,params=kv)
    
    r.encoding="utf-8"
    
    print r.request.url
    
    print r.text[:2000]

     

    解决网站爬虫限制

     

    有些网站限制了网络请求的来源,来阻止爬虫。一般是通过’user-agent’属性来区分。

    通过

    print r.request.headers

    来查看user-agent属性。

    requests库写的代码默认user-agent(用户代理)是’python-requests/x.xx.x’(x表示版本号)。如果访问不成功,可尝试修改’user-agent’属性。

    方法如下:

    1. 先构建一个字典

    ua={"user-agent":"Mozilla/5.0"}

    其中”Mozilla/5.0”是浏览器的普遍标识。

    2. 在get方法里面加一个参数

    r=requests.get(url,headers=ua)

     

    例子3

    import requests
    
    url="http://www.cnblogs.com/hjw1"
    
    ua={"user-agent":"Mozilla/5.0"}
    
    r=requests.get(url)
    
    print r.request.headers
    
    r=requests.get(url,headers=ua)
    
    print r.request.headers

     

    注:深究python爬虫-html可用 解析器beautifulsoup

     

     

     

     

     

    smile
  • 相关阅读:
    《Linux内核设计与实现》读书笔记(4) 中断和中断处理程序
    《Linux内核设计与实现》读书笔记(11) 内存管理(1)
    《Linux内核设计与实现》读书笔记(10) 定时器和时间管理(2)
    《Linux内核设计与实现》读书笔记(7) 内核同步方法(1)
    《Linux内核设计与实现》读书笔记(9) 定时器和时间管理(1)
    Mac os 10.7.1(Lion) 下vmware fusion里的windows有时无法工作在NAT模式下的问题
    偶然发现7年前受到的offer。7年,一晃而过
    IE下对文件(图片)进行base64转换
    IE这个bug真是弱爆了
    腾讯举办创意马拉松活动庆祝成立14周年
  • 原文地址:https://www.cnblogs.com/qiuqiu001/p/10938861.html
Copyright © 2020-2023  润新知