一个初学者的辛酸路程-初识Python-1

前言

很喜欢的一句话,与诸位共勉。

人的一切痛苦,本质上都是对自己无能的愤怒----王小波。

初识Python

一、它的爸爸是谁

首先,我们需要认识下面这位人物。

 

他是Python的创始人,吉多范罗苏姆(Guido van Rossum)。1989的圣诞节为了打法时间开发出来的。哎,想想,都是差距....

二、需要理解的一些概念:

1、C语言编译完就是机器码,机器码可以直接在处理器上执行。

2、CPU可以直接读取机器码。

3、Python是用C写的。

4、Python解释器会把代码内容读到内存里,通过Python解释器翻译成字节码。

5、CPU不能直接读取字节码,需要把字节码转换成机器码。

anyway,so

Python对于C来说,就多了一个字节码转换成机器码的过程,所以相对会慢。但是人为是无法感知的。

三、Python排位赛

TIOBE排行,看看Python的地位

URL在此,猛戳有惊喜:http://www.oschina.net/news/75895/tiobe-2016-8

语言趋势走向

 

四、Python的设计哲学和定位

1、优雅

2、明确

3、简单

anyway,so

还有我们最喜欢的

money!!

huangj

五、Python应用

好的,既然Python这么牛逼,那么都有哪些应用呢?

常见的有这么几个:

1、数据分析(我有一同事就是拿Python来写策略炒股)

2、系统编程

3、组件集成

4、网络服务(最为广泛)

5、图像处理

6、数值计算和科学计算

有哪些企业在用Python呢?

常见的也有这么几个:

YouTube,dropbox (可以免费申请玩玩,云存储),BT,Quora(中国盗版就是知乎)、我大谷歌,Yahoo,facebook、NASA(屌丝特斯拉最膜拜的)等等

最重要的还是我们即将要开启的自动化运维。解放双手,让你重新做运维。

六、Python的种类

Python有下面几个种类:

1、Cpython

Python的官方版本,使用C语言实现,使用最为广泛,我们常用的也是这个版本。

2、JPython

Python的Java实现,拿到代码后,会编译成Java的字节码,跟写的Java代码是一样的,然后再执行。

3、ironPython

IronPython是另一很流行的Python 实现,完全用C#实现,针对.NET平台。她运行在可以叫做.NET虚拟机的平台上,这是微软的 Common Language Runtime (CLR),同JVM相对应。

4、pypy

Python实现的Python,把写的代码最终编译成机器码。(C可以直接把代码编译成机器码),我们知道,Python会把代码先编译成字节码,拿到字节码之后继续编译成机器码,在执行的时候呢,就相当于跟C一样快了,只不过是浪费了编译时间。

其实快慢程度对于程序员来说是没有任何感知的,区别在于虚拟机不同,把代码编译成不同的字节码。

为什么有这么多Python,也许你需要看看这个http://www.oschina.net/translate/why-are-there-so-many-pythons?print。这里有你想要的答案。

七、编译和解释性语言的区别

编译型语言:编译器把源程序的每一条语句都编译成机器语言,并保存为二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快。就好比,你跟一个日本人聊天,中间有一个翻译官,你一次性说了5分钟,翻译把你5分钟说的话翻译给日本人。

解释器语言:解释器在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以裕兴速度是不如编译后的程序运行的快的。就好比,你还是跟一个日本人聊天,中间还是有一个翻译官,你说一句,它翻译一句。

那么,为何要编译器呢?

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

接下来,就说说编译型语言和解释型语言有哪些?

常见的编译型有c和c++等

举个栗子:

把c语言代码编译成机器码0和1,就需要编译器gcc来实现,编译之后就可以直接交给机器来执行,这个呢是在Linux下编译使用的,如果换了一个平台,比如说换到Windows上面呢,那么就需要另外一个编译器来编译,然后执行。

那么,问题来了。

很明显,在可移植性这方面,就比较差了。让人很不愉快。但是呢,由于是直接编译成机器码所以运行速度快。

常见的解释型语言有Python,ruby,PHP(世界上最牛逼的语言,没有之一),Java等

它的特点就是边执行边解释,速度慢(相对而言),解释器优秀支持跨平台,一处编译呢,到处执行。

八、Python的优缺点

优点:

1、上手简单

2、开发效率高

3、高级语言

4、可移植性好

5、可扩展性好

6、可嵌入性

缺点:

1、速度慢,相对而言

2、代码不能加密

3、线程不能利用多CPU问题

九、Python的安装

Python安装很简单,我主要用到Windows和Linux版本,而Linux版本原装Python,anyway,so,讲解一下如何在Windows上安装Python3.0

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

Python入门

1、人生中第一句Python代码

是的没错,就是hello world!!

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Author: Leon xie
print("hello world!")

解释说明:

第一句: 声明告诉执行文件使用Python解释器来执行

第二句: 声明字符编码为utf-8

第三局: 作者信息,让大家知道这么牛逼的代码是谁写的

第四句: 打印输出hello world!!

PS:这个打印输出的格式是在Python3.0以上环境上使用,Python2环境的话会有些许区别。

2、变量

变量的定义: 一个在内存存储数据的变量。

意义:为什么要有变量?因为它保存程序执行的中间结果或者状态,以供后面的代码进行调用。

变量的格式: 名字 = 对应的值

比如: dayone = 100

举个栗子:

name ="jixuege"

上面声明了一个变量name,变量name的值为 “jixuege”

image

变量名要求:

a、变量名只能由字母,下划线或数字的任意组合。

b、变量名的第一个字符不能是数字。

c、声明变量名要避开关键字。

如下所示:

['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']

3、字符编码

首先,科普一下姿势,我也不知道对不对。

我们知道,计算机底层呢都是电流,电流默认是表示不了数字的,所以呢,我们就给它加一个开关。可以表示2种状态0和1,也就是我们接下来要讲的二进制。

接下来我们可以想象,Alex有特么开始讲烽火台了,这个故事听的我(此处省略100字)….

故事大概的意思就是古时候如何通过点狼烟来告诉友军有多少敌军攻城(如何通过最少的排列数字去代表更大的数字。)

接下来,我要认真起来了:

1个二进制数字只有两种状态(0和1),在计算机里代表1个比特(bit)= 计算机最小存储单位。

1个字节(bytes)=8个比特 即    1bytes = 8 bit

1024个字节(bytes)= 1kb 即   1kb = 1024 bytes

1024个kb = 1兆(1mb)  即  1mb = 1024kb

1GB = 1024mb  即  1GB = 1024mb

1TB = 1024 GB

1PB=1024 tb

知道这些关系之后呢,我们要说的就是最早的默认编码ascii码了。

image

上图是ascii码的一部分。

我们要知道,计算器是老外发明的,所以他们出的字符编码只是针对自己的使用。

1个字母呢就是1个字节。用8位的话可以表示256种状态(0-255),最大就是255,因为有了ASCII码,8位正好是 一个字节。1个字节代表1个字符。

Python解释器把文本读到内存里,读取内容是按照ASCII码来读取的,而ASCII不能表示中文,所以很尴尬。后来就出现了GB2312,可以支持中文,但是呢,支持汉字太少了(收录了7445个字符,包括6763个汉字和682个其他符号),要知道我们中华文字博大,完全不够用嘛,于是出现了GBK1.0,接着是GB18030。

Windows呢默认GBK,如下图。

image

即使如此,还是不能包含全世界的语言,于是出现了万国码(Unicode)

它最少用2个字节来表示,即16位。有2的16次方,这样一来可以表示更多的字符或者符号,汉字也都包含进来,但是呢,1个Unicode最少2个字节也就是16位,有点浪费。于是出现了UTF-8,它是对Unicode编码的压缩和优化,它的特性就是对于可以用8位表示的都用8位来表示,16位表示用16位,32位表示用32位,而不是最少用16位表示了,而是用8位,节省了空间。

总的来说:ASCII码只能表示256种,Unicode可以表示全部,占位最少16位,UTF-8对Unicode加工,让占用内存更合理。

这就是为何需要指定字符编码为UTF-8的原因。 #  -*- coding:utf-8 -*-(Python解释器读这个文件的时候,指定以什么方式来读,而不是用默认的ASCII码了)。

小结:

ASCII码是计算机诞生时候的标准,8位,出了Unicode后,最小16位,Unicode表示中文用3个字节,就是24位,8位表示不了,这个情况下出现一个浪费,就是内存资源浪费,因为Unicode最少16位,但是Unicode写英文的时候,只需要使用8位,因为这个情况才出来utf-8,可以理解为Unicode的字系列,所有英文还是用ASCII形式存放,但是中文,该用3个字节,就用3个字节,避免了空间的浪费。所以以后写代码的时候加入这个coding:utf-8即可。

Python3.0之后,默认编码就是utf-8

4、变量及占位符的使用

终于到写代码的时刻了,简单列举几个代码:

交互输入

1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 #Author: Leon xie
4 
5 print(input("name:"))
6 print(input("age:"))

结果输出

name:xiedi
xiedi
age:22
22

接下来,我们使用占位符%s

# 传变量
name = input("name:")
age = input("age:")
job = input("job:")
hobby = input("hobby:")

#print("my name is",name,"i am",age,"years old,
"

#        "my job is",job,"my hobby is",hobby)

# 占位符

info = '''
-----info of %s--------
Name: %s
Age: %s
Job: %s
Hobby: %s
----------end-------------

'''  %(name,name,age,job,hobby)

print(info)

  

输出效果如下:

说明:
第一句:

name = input("name:")

其中name为字符串,所以需要加上引号告诉Python,它是字符串,数字不需要加引号。
最后一句:
其中info是一个变量,三个单引号是注释多行,里面的%s是占位符,就是把这个地方霸占掉,后面%(name,name,age,job,hobby)就是把变量传给占位的占位符,记住需要按照顺序来给。
 

5、流程控制

写一个简单的登录

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Author: Leon xie

name = input("请输入用户名:")
passwd = input("请输入密码:")

# 流程控制
if name == "xiedi" and passwd == "123":
    print("welcome to login")else:
    print("error,exit")

猜年纪

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Author: Leon xie

age = 20

gues_age = int(input("age:"))  # str --> int

if gues_age == age:
    print("right!!")
elif  gues_age > age:
    print("try smaller.....")
else:
    print("try bigger...")

6、小结:

目前为止,我们知道了下面几个知识点

1、Python是怎么来的。

2、哪些公司在使用。

3、Python与其他语言的区别。

4、应该学习哪个版本的Python,各自有何优缺点。

5、如何给Python指定解释器和字符编码。

6、Python提供了大量的类库(不是内裤)供选择。

7、Linux原装Python。

8、字符编码。

9、变量及使用。

10、流程控制。

原文地址:https://www.cnblogs.com/jixuege-1/p/5906073.html