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
原文地址:https://www.cnblogs.com/qiuqiu001/p/10938861.html