zoukankan      html  css  js  c++  java
  • 进击的Python【第一章】:Python背景初探与Python基础(一)

    Python背景初探                                                           

    一、Python起源

     

      Python的创始人为Guido van Rossum。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个叫Monty Python的喜剧团体的爱好者。ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是非开放造成的。Guido 决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。
      就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。Guido van Rossum

    二、Python是一门什么样的语言

      Python的设计哲学是“优雅”、“明确”、“简单”。在设计上坚持了清晰划一的风格,这使得Python成为一门易读、易维护,并且被大量用户所欢迎的、用途广泛的语言。

      Python的作者有意的设计限制性很强的语法,使得不好的编程习惯(例如if语句的下一行不向右缩进)都不能通过编译。其中很重要的一项就是Python的缩进规则。

      一个和其他大多数语言(如C)的区别就是,一个模块的界限,完全是由每行的首字符在这一行的位置来决定的(而C语言是用一对花括号{}来明确的定出模块的边界的,与字符的位置毫无关系)。这一点曾经引起过争议。因为自从C这类的语言诞生后,语言的语法含义与字符的排列方式分离开来,曾经被认为是一种程序语言的进步。不过不可否认的是,通过强制程序员们缩进(包括if,for和函数定义等所有需要使用模块的地方),Python确实使得程序更加清晰和美观。

      编程语言分为解释型语言和编译型语言,Python是一门解释型语言,同Python一样,Java,C#等都是解释型语言,而C/C++ 等都是编译型语言。

      解释型编译型语言有什么不同呢?简单的说编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。解释型语言,是在运行时编译一句执行一句的语言,所以运行速度相对于编译型语言要慢。打个比方,我要看一本外语书,我可以找翻译把书全部翻译成中文,我再看时就可以非常快速的看了,这是编译型。而解释型是我找翻译,我看一句,翻译给我翻译一句,相对直接看中文就会稍慢。

    三、Python的优缺点

      优点:

          Python就为我们提供了非常完善的基础代码库,覆盖了网络、文件、GUI、数据库、文本等大量内容,被形象地称作“内置电池(batteries included)”。用Python开发,许多功能不必从零编写,直接使用现成的即可。除了内置的库外,Python还有大量的第三方库,也就是别人开发的,供你直接使用的东西。当然,如果你开发的代码通过很好的封装,也可以作为第三方库给别人使用。许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。

          龟叔给Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。

          总的来说,Python的哲学就是简单优雅,尽量写容易看明白的代码,尽量写少的代码。如果一个资深程序员向你炫耀他写的晦涩难懂、动不动就几万行的代码,你可以尽情地嘲笑他。

          那Python适合开发哪些类型的应用呢?

          首选是网络应用,包括网站、后台服务等等;

          其次是许多日常需要的小工具,包括系统管理员需要的脚本任务等等;

          另外就是把其他语言开发的程序再包装起来,方便使用。

      缺点:  

          任何编程语言都有缺点,Python也不例外。

          第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。

          但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如开发一个下载MP3的网络应用程序,C程序的运行时间需要0.001秒,而Python程序的运行时间需要0.1秒,慢了100倍,但由于网络更慢,需要等待1秒,你想,用户能感觉到1.001秒和1.1秒的区别吗?这就好比F1赛车和普通的出租车在北京三环路上行驶的道理一样,虽然F1赛车理论时速高达400公里,但由于三环路堵车的时速只有20公里,因此,作为乘客,你感觉的时速永远是20公里。

          第二个缺点就是代码不能加密。如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。

          

          这个缺点仅限于你要编写的软件需要卖给别人挣钱的时候。好消息是目前的互联网时代,靠卖软件授权的商业模式越来越少了,靠网站和移动应用卖服务的模式越来越多了,后一种模式不需要把源码给别人。

          再说了,现在如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有无数非常优秀的像Linux一样的开源代码,我们千万不要高估自己写的代码真的有非常大的“商业价值”。那些大公司的代码不愿意开放的更重要的原因是代码写得太烂了,一旦开源,就没人敢用他们的产品了。

    四、Python的前景

      先不说话,上图:

      这是TIOBE编程语言社区发布的7月编程语言排名,可见Python已经强势进入最受欢迎语言的前四。Python在国外已经非常普及,虽然进入国内时间较晚,但是近几年普及率迅速提升,从国内各大互联网公司大量的使用Python就可见一斑。所以说,Python的未来一片光明。

    Python入门                                                                                              

     一、安装方式

      WINDOWS

    1 1、下载安装包
    2     https://www.python.org/downloads/
    3 2、安装
    4     默认安装路径:C:python27
    5 3、配置环境变量
    6     【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path 的一行,双击】 --> 【Python安装目录追加到变值值中,用 ; 分割】
    7     如:原来的值;C:python27,切记前面有分号

      LINUX

    系统自带Python环境,可根据情况自行下载源码包安装

    二、第一句Python

    创建一个.py文件,比如hello.py

    1 #/usr/bin/env python
    2 # -*-  coding:utf-8 -*-
    3  
    4 print("hello world!")
    5 
    6 localhost:~ qiang$ vim hello.py
    7 localhost:~ qiang$ python hello.py
    8 Hello World!

    解释

    #/usr/bin/env python
    #这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。
    
    # -*- coding: utf-8 -*- 
    #指定编码类型为utf-8

    三、变量与字符编码

     变量的赋值

    1 name = "xiaoqiang"
    2 name2 = "xiaoqiang2"
    3 print("my name is : ", name, name2)
    4 name = "xiaoqiang3"
    5 print(name)

    变量的定义规则:

    • (下划线或字母)+(任意数目的字母、数字或下划线)
    • 变量名必须以下划线或字母开头,而后面接任意数目的字母、数字或下划线。
    • 以下关键字不能声明为变量名
      ['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']

    字符编码

      ASCII码

      ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统。

      基本的 ASCII 字符集共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。标准 ASCII 码使用 7 个二进位对字符进行编码,对应的 ISO 标准为 ISO646 标准。下表展示了基本 ASCII 字符集及其编码:

      ASCII的最大缺点是只能显示26个基本拉丁字母、阿拉伯数目字和英式标点符号,因此只能用于显示现代美国英语,为了适应中文,我国推出了自己编码GB2312。

      GB2312 

      GB2312 也是ANSI编码里的一种,对ANSI编码最初始的ASCII编码进行扩充,为了满足国内在计算机中使用汉字的需要,中国国家标准总局发布了一系列的汉字字符集国家标准编码,统称为GB码,或国标码。其中最有影响的是于1980年发布的《信息交换用汉字编码字符集 基本集》,标准号为GB 2312-1980,因其使用非常普遍,也常被通称为国标码。GB2312编码通行于我国内地;新加坡等地也采用此编码。几乎所有的中文系统和国际化的软件都支持GB 2312。

      GB 2312的出现,基本满足了汉字的计算机处理需要,但对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。

    GBK采用双字节表示,总体编码范围为8140-FEFE,首字节在81-FE 之间,尾字节在40-FE 之间,剔除 xx7F一条线。总计23940 个码位,共收入21886个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号883 个。P-Windows3.2和苹果OS以GB2312为基本汉字编码, Windows 95/98则以GBK为基本汉字编码。

      Unicode

      世界上存在着多种编码方式,在ANSi编码下,同一个编码值,在不同的编码体系里代表着不同的字。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码,可能最终显示的是中文,也可能显示的是日文。在ANSI编码体系下,要想打开一个文本文件,不但要知道它的编码方式,还要安装有对应编码表,否则就可能无法读取或出现乱码。为什么电子邮件和网页都经常会出现乱码,就是因为信息的提供者可能是日文的ANSI编码体系和信息的读取者可能是中文的编码体系,他们对同一个二进制编码值进行显示,采用了不同的编码,导致乱码。这个问题促使了unicode码的诞生。

      如果有一种编码,将世界上所有的符号都纳入其中,无论是英文、日文、还是中文等,大家都使用这个编码表,就不会出现编码不匹配现象。每个符号对应一个唯一的编码,乱码问题就不存在了。这就是Unicode编码。

      Unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。每个符号的编码都不一样,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,“汉”这个字的Unicode编码是U+6C49。

      Unicode固然统一了编码方式,但是它的效率不高,比如UCS-4(Unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。 

      UTF-8

      为了提高Unicode的编码效率,于是就出现了UTF-8编码。UTF-8可以根据不同的符号自动选择编码的长短。比如英文字母可以只用1个字节就够了。

      UTF-8的编码是这样得出来的,以”汉”这个字为例:
      “汉”字的Unicode编码是U+00006C49,然后把U+00006C49通过UTF-8编码器进行编码,最后输出的UTF-8编码是E6B189。

    四、Python的交互输入及格式化输出

    一个简单的输入

    #/usr/bin/env python
    # -*-  coding:utf-8 -*-
    
    name = input("name:")
    print(name)

    格式化输出

    name  = input("name:")
    age = int(input("age:")) #强制转换为int型变量
    job = input("job:")
    salary = input("salary:")
    
    info = '''
    -----------   info of %s   ---------
    Name:%s
    Age:%d
    Job:%s
    Salary:%s
    ''' % (name, name, age, job, salary)
    
    info2 = '''
    -----------   info of {_name}   ---------
    Name:{_name}
    Age:{_age}
    Job:{_job}
    Salary:{_salary}
    '''.format(_name=name,
                  _age=age,
                  _job=job,
                  _salary=salary)
    
    info3 = '''
    -----------   info of {0}   ---------
    Name:{0}
    Age:{1}
    Job:{2}
    Salary:{3}
    '''.format(name, age, job, salary)
    
    print(info, info2, info3)

    密码的隐藏输入

    1 import getpass
    2 
    3 password = getpass.getpass("请输入密码:")
    4 print(password)

    这里使用到了getpass模块,模块用import语句调用,具体模块内容以后会讲。

     五、流程控制

      条件判断:if...elif...else

      举个栗子~

    1 age_of_oldboy = 56    #定义变量
    2 guess_age = int(input("guess age:"))    #用户输入值并赋值给变量
    3 if guess_age == age_of_oldboy:    #判断用户输入的和已定义变量的值是否相等
    4     print("yes,you got it.")
    5 elif guess_age > age_of_oldboy:   #上一个条件如果不符合再次判断
    6     print("think smaller...")
    7 else:                             #如果上面两条都不符合,执行最后语句
    8     print("think bigger!")

       while循环语句

      再举个栗子:

     1  #猜数字游戏
     2  #三次机会,猜对直接退出,猜错三次直接退出
     3 
     4 age_of_oldboy = 56
     5 count = 0
     6 while True:
     7      if count == 3:
     8          break
     9      guess_age = int(input("guess age:"))
    10      if guess_age == age_of_oldboy:
    11          print("yes, you got it.")
    12          break
    13      elif guess_age > age_of_oldboy:
    14          print("think smaller...")
    15      else:
    16          print("think bigger!")
    17      count +=1

       for循环语句

       还是上面猜数字的栗子:

     1  #猜数字游戏
     2  #三次机会,猜对直接退出,猜错三次直接退出
     3 
     4 age_of_oldboy = 56
     5 
     6 for i in range(3):
     7      guess_age = int(input("guess age:"))
     8      if guess_age == age_of_oldboy:
     9          print("yes, you got it.")
    10          break
    11      elif guess_age > age_of_oldboy:
    12          print("think smaller...")
    13      else:
    14          print("think bigger!")
    15 else:
    16     print("you have tried too many times...")

     

  • 相关阅读:
    8.31前端 jQuery
    8.30前端jQuery和数据结构知识
    8.29 jQuery
    8.28 jQuery
    8.27 jQuery
    8.26 js
    chrome开发工具指南(十二)
    chrome开发工具指南(十一)
    chrome开发工具指南(十)
    chrome开发工具指南(九)
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/5701613.html
Copyright © 2011-2022 走看看