初识python

一、Python介绍

1、目前Python主要应用领域:

  • 云计算: 云计算最火的语言, 典型应用OpenStack
  • WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
  • 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
  • 系统运维: 运维人员必备语言
  • 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
  • 图形GUI: PyQT, WxPython,TkInter

2、Python在一些公司的应用: 

  • 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、Google广告等项目都在大量使用Python开发
  • CIA: 美国中情局网站就是用Python开发的
  • NASA: 美国航天局(NASA)大量使用Python进行数据分析和运算
  • YouTube:世界上最大的视频网站YouTube就是用Python开发的
  • Dropbox:美国最大的在线云存储网站,全部用Python实现,每天网站处理10亿个文件的上传和下载
  • Instagram:美国最大的图片分享社交网站,每天超过3千万张照片被分享,全部用python开发
  • Facebook:大量的基础库均通过Python实现的
  • Redhat: 世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的
  • 豆瓣: 公司几乎所有的业务均是通过Python开发的
  • 知乎: 国内最大的问答社区,通过Python开发(国外Quora)
  • 春雨医生:国内知名的在线医疗网站是用Python开发的
  • 除上面之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各种各样的任务。 

3、Python 是一门什么样的语言?

编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,我们一起来看一下。

  编译:把名文代码执行前先转载成二进制在执行这个过程就叫编译

  例如:sh   test.sh  #sh就是shell程序的解释器

  编译和解释的区别是什么?

  编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快.全部解释完在执行

  解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的. 边执行边解释

这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)

  编译型:运行效率高

      以来编译平台 Linux操作系统和CPU交互的接口与Windows不一样

      不能跨平台,Linux上的代码到Windows上不能用,开发效率低

  解释型特点:运行效率低

        可以跨平台

        解释器可以跟不同的平台或操作系统沟通

        开发效率高 

  

 

   

二、Python解释器

  当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。

由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

  CPython

  当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。

CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

  IPython

  IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

CPython用>>>作为提示符,而IPython用In [序号]:作为提示符。

  PyPy

  PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。

绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点

  Jython

  Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

  IronPython

  IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

  py2与3的详细区别

  

  Hello World程序

  在linux 下创建一个文件叫hello.py,并输入

1
print("Hello World!")

  然后执行命令:python hello.py ,输出

1
2
3
localhost:~ jieli$ vim hello.py
localhost:~ jieli$ python hello.py
Hello World!

  指定解释器

  上一步中执行 python hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。

  如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需要在 hello.py 文件的头部指定解释器,如下:

1
2
3
#!/usr/bin/env python
  
print "hello,world"

  如此一来,执行: ./hello.py 即可。

  ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py

  在交互器中执行 

  除了把程序写在文件里,还可以直接调用python自带的交互器运行代码, 

1
2
3
4
5
6
localhost:~ jieli$ python
Python 2.7.10 (default, Oct 23 201518:05:06)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help""copyright""credits" or "license" for more information.
>>> print("Hello World!")
Hello World!

三、变量 

  变量用于存储要在计算机程序中引用和操作的信息。他们还提供了一种以描述性名称标注数据的方法,所以我们的程序可以被读者和我们自己更清楚地理解。将变量视为容纳信息的容器是有帮助的。它们的唯一目的是将数据标记和存储在内存中。 然后可以在整个程序中使用此数据。

  Variables are used to store information to be referenced and manipulated in a computer program. They also provide a way of labeling data with a descriptive name, so our programs can be understood more clearly by the reader and ourselves. It is helpful to think of variables as containers that hold information. Their sole purpose is to label and store data in memory. This data can then be used throughout your program.

  声明变量

1
2
3
#_*_coding:utf-8_*_
 
name = "Alex Li"

  上述代码声明了一个变量,变量名为: name,变量name的值为:"Alex Li" 

  变量定义的规则:  用下划线

    • 变量名只能是 字母、数字或下划线的任意组合
    • 变量名的第一个字符不能是数字
    • 以下关键字不能声明为变量名
      ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
    • 纯大写代表常量,一般不要改

  变量的赋值

1
2
3
4
5
6
7
8
name = "Alex Li"
 
name2 = name
print(name,name2)
 
name = "Jack"
 
print("What is the value of name2 now?")

  

  用户输入

1
2
3
4
5
6
7
#!/usr/bin/env python
#_*_coding:utf-8_*_
 
 
#name = raw_input("What is your name?") #only on python 2.x
name = input("What is your name?")
print("Hello " + name )

  输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import getpass
  
# 将用户输入的内容赋值给 name 变量
pwd = getpass.getpass("请输入密码:")
  
# 打印输入的内容
print(pwd)

   4 = integer(数字) = int   整数,整形

   4 = string = str  字符串

   a = string 

   name = "alex"   #加上引号代表字符串

   print(type(name))  #查看name类型

   数字和数字可以相加,字符串和字符串也可以相加即同一类型的数据类型可以相互操作

   数字跟字符不能计算和比较

   字符串转数字用int:int("22")----->int

   数字也可以转字符串:str(22)------->str

四、字符编码

  Python解释器在加载.py文件中的代码时,会对内容进行编码(默认ascill)

  ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

  UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

   -*- coding: utf-8 -*-

五、注释

  单行注释:#被注是内容

  多行注释:"""被注释内容"""

  单引号和双引号没什么区别,一般print(""),是为了双引号中间有单引号是不会出错

六、数据类型初识

  1、数字  

    int(整形)  2

    long(长整型)  大一些的数字

    float(浮点型)  3.23和52.3E是浮点数字的例子,E标记表示10的幂。在这里,52.3E-4表示52.3*10^(-4)

    复数  (-5+4j)和(2.3-4.6j)是复数的例子

  2、布尔值

    真或假  1或0

  3、字符串

    字符串是字符的序列,字符串基本就是一组单词。

    每个Python程序中都要用到字符串

    使用单引号(')  'wu   yong   qiang'这样。所有的空白,即空格和制表符都按照原样保留

    使用双引号(")  双引号和单引号完全相同

    使用三引号(""" """)  可以指示一个多行的字符串,可以用作多行注释,可以在引号 中使用单引号和双引号

    转义符  'what\'s your name?';可以用\\来指示反斜杠本身;行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。

    自然字符串  如果想要指示某些不需要转义符那样的特别出理得字符串,那么你需要制定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。例如r"new linesare ind\n"

    字符串是不可变的,这意味着一旦你创造了一个字符串,你就不能再改变他了

    

    "hello world"

    万恶的字符串拼接:
    python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

    

    字符串格式化输出
1
2
3
4
name = "alex"
print "i am %s " % name
  
#输出: i am alex

    PS: 字符串是 %s;整数 %d;浮点数%f

    字符串常用功能:
        name ="\n\t   ALEx ; li     \t"

      移除空白print(name.strip())#脱掉,strip脱掉

      分割print(name.split())#分割,把一个字符按空格键分割成列表

        print(name.split(";"))#分割,把一个字符串按分号分开

      长度print(len(name))#长度判断,查看字符串的长度

        name1 = "suhaozhi,qinzhen,lizhi"

      索引print(name1.index("s"))#索引,返回s的下标号0

        print(name1[0])#索引,查找下标为0所对应的字符

      切片print(name1[0:8])#切片,切出suhaozhi,从0开始

        print(name1[9:16])#切片,切出qinzhen,注意[9,16]顾前不顾后,就是包括9不包括16

        print(name1[-6:-1])#切片,切出lizh,必须从[-6:-1],不能从[-1:-6],切不到i的原因是顾前不顾后

        print(name1[0::2])#切片,2叫步长,也就是每隔一个字母切一次

   4、列表

    创建列表:

1
2
3
name_list = ['alex''seven''eric']
name_list = list(['alex''seven''eric'])

    基本操作:

        names = ["suhaozhi","qinzhen","lizhi","yanlong","pianzi"]

        print(type(names))查看names的数据类型,list列表类型

      索引print(names[-1])#索引,最后一个名字

        print(names.index("lizhi"))#检索返回lizhi的下标号,注意从0开始数

      切片print(names[3:])#切出并打印出yanlong及他后面的字符串

        print(names[3:5])#打印yanlong和pianzi两个字符串,注意顾头不顾尾

                 统计个数print(names.couont("lizhi"))#统计lizhi的个数

      追加names.append("guangtou")#追加,在最后加,不能和print连用

        names.insert(4,"chentao")#插入,插到yanlong后面不能写成print(names.insert()),上下都一样

        names.insert(3,"zhiqiang")#zhiqiang插到yanlong前面,插谁前面就写谁的下标

      删除print(names.pop(4))#删除并打出删掉的东西,默认删除最后一个,pop后只能加下标值

        names.remove("lizhi")#删除,如果有两个的话默认删除第一个

        dell names[0]#删除下表为0的字符串

      长度

      切片

      循环

      包含

 Python中小括号,中括号,和大括号的区别

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2017-03-27 15:23  黄土地上的黑石头  阅读(320)  评论(1编辑  收藏  举报