Python基础

说明:个人学习笔记,学习内容主要来自廖雪峰Python2.7教程:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/


输入输出问题

输入输出当然是任何一个变成语言最基本的语句,任何编程都是要与用户交互的。

  • print输出
>>> print 'Hello World'
Hello World
  • 输出格式化字符串
>>> 'Hello, %s' %'world'
'Hello,world'
>>> 'Hi, %s, you have $%d.' %('Michael',1000000)
'Hi,Michael,you have $1000000'
  • raw_input
>>> name = raw_input('please enter your name:')
>>> print 'Hello,',name
% execute result
C:\Workspace > python hello.py
please enter your name: Michael
hello,Michael 

注意:raw_input返回类型总为字符串,如果想要输入’123’,结果也为整数123,则需要int(raw_input())


字符编码问题

计算机能够处理的都是0,1串,所以如果要处理文本,需要将文本转换为数字,这是任何一种编程语言中都是要用到的,只是学习语言之初忽略了这个问题,在此补充学习。

由于计算机是美国人发明的,因此最早只有127个字母被编码到计算机中,也就是大小写英文字母、数字和一些符号,这个编码就是我们熟悉的ASCII编码
之后,中国制定了GB2312编码,把中文进行编码,同时也不与ASCII码冲突;同样的其他国家也这么做了,日本制定了shift_JIS对日文进行编码,韩国制定了Euc-kr对韩文进行编码,各国有各国的标准,就不可避免地会出现冲突,因此在多语言混合的文本中,显示会有乱码现象。
Unicode应运而生,Unicode将所有语言都统一到一套编码中,最常用的是用两个字节表示一个字符,现代操作系统和大多数编程语言都直接支持Unicode。

如果统一成Unicode编码,乱码问题从此消失了,但是,如果你写的文本基本全部是英文的,用Unicode编码比用ASCII编码需要多一倍的存储空间,在存储和运输上变得十分不划算。

因此又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。

UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码为1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节

字符ASCIIUnicodeUTF-8
A010000010000000 0100000101000001
x01001110 0010110111100100 10111000 10101101

从上表可以看出,ASCII编码实际上可以看作UTF-8编码的一部分,所以大量支持ASCII编码的历史遗留软件,可以在UTF-8编码下继续工作。

搞清楚了ASCII、Unicode和UTF-8编码的关系,下面总结一下现在计算机系统通用的字符编码工作方式:

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码

记事本的编码工作方式

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符放到内存中;编辑完成后,将Unicode编码转换为UTF-8编码保存到文件中。

浏览网页时的编码工作方式

浏览网页的之后,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器,查看浏览器源码时,看到类似<meta charset = "UTF-8" />的信息,则表示该网页正是用UTF-8进行编码的。

Python对编码方式的支持
Python的诞生比Unicode标准发布的还要早,所以最早的Python只支持ASCII编码。

只有添加了对Unicode的支持,用u'...'表示用Unicode编码的字符串。
将Unicode编码字符转换为UTF-8类型,用encode('utf-8'):

>>> u'ABC'.encode('utf-8')
'ABC'

将UTF-8类型编码转为Unicode编码,用decode('utf-8'):

>>> 'abc'.decode('utf-8')
u'abc'

用于Python源代码也是一个文本文件,所以,在保存源代码的时候,如果你的源码中包含中文,就务必指定保存为UTF-8编码。
当Python解释器读取源代码时,为了让它按照UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  • 第一行注释:告诉Linux/OS X 系统,这是一个python可执行程序,Windows系统会忽略这个注释
  • 第二行注释:告诉Python解释器,按照UTF-8编码读取源码(否则,你在源码中写的中文输出可能会有乱码)

Python解释器

了解语言的运行机制,对于理解语言的工作方式还是挺重要的。

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

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

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

  • 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的字节码。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值