一个初学者的辛酸路程-初识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!!
五、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- -*-
- #Author: Leon xie
- print("hello world!")
解释说明:
第一句: 声明告诉执行文件使用Python解释器来执行
第二句: 声明字符编码为utf-8
第三局: 作者信息,让大家知道这么牛逼的代码是谁写的
第四句: 打印输出hello world!!
PS:这个打印输出的格式是在Python3.0以上环境上使用,Python2环境的话会有些许区别。
2、变量
变量的定义: 一个在内存存储数据的变量。
意义:为什么要有变量?因为它保存程序执行的中间结果或者状态,以供后面的代码进行调用。
变量的格式: 名字 = 对应的值
比如: dayone = 100
举个栗子:
name ="jixuege"
上面声明了一个变量name,变量name的值为 “jixuege”
变量名要求:
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码了。
上图是ascii码的一部分。
我们要知道,计算器是老外发明的,所以他们出的字符编码只是针对自己的使用。
1个字母呢就是1个字节。用8位的话可以表示256种状态(0-255),最大就是255,因为有了ASCII码,8位正好是 一个字节。1个字节代表1个字符。
Python解释器把文本读到内存里,读取内容是按照ASCII码来读取的,而ASCII不能表示中文,所以很尴尬。后来就出现了GB2312,可以支持中文,但是呢,支持汉字太少了(收录了7445个字符,包括6763个汉字和682个其他符号),要知道我们中华文字博大,完全不够用嘛,于是出现了GBK1.0,接着是GB18030。
Windows呢默认GBK,如下图。
即使如此,还是不能包含全世界的语言,于是出现了万国码(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、变量及占位符的使用
终于到写代码的时刻了,简单列举几个代码:
交互输入
- #!/usr/bin/env python
- # -*- coding: utf- -*-
- #Author: Leon xie
- print(input("name:"))
- print(input("age:"))
结果输出
- name:xiedi
- xiedi
- age:
接下来,我们使用占位符%s
- # 传变量
- name = input("name:")
- age = input("age:")
- job = input("job:")
- hobby = input("hobby:")
- #print("my name is",name,"i am",age,"years old,\n"
- # "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- -*-
- #Author: Leon xie
- name = input("请输入用户名:")
- passwd = input("请输入密码:")
- # 流程控制
- if name == "xiedi" and passwd == "":
- print("welcome to login")else:
- print("error,exit")
猜年纪
- #!/usr/bin/env python
- # -*- coding: utf- -*-
- #Author: Leon xie
- age =
- 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、流程控制。
一个初学者的辛酸路程-初识Python-1的更多相关文章
- 一个初学者的辛酸路程-初识Django
前言: 主要是关于JavaScript的高级部分以及Django 主要内容: 一.jQuery 事件绑定: DOM事件绑定: -直接在标签上绑定 第一种: $('.title').click(func ...
- 一个初学者的辛酸路程-python操作SQLAlchemy-13
前言 其实一开始写blog,我是拒绝的,但是,没办法,没有任何理由抗拒.今天呢,要说的就是如何使用Python来操作数据库. SQLAlchemy SQLAlchemy是Python编程语言下的一款O ...
- 一个初学者的辛酸路程-Python基础-3
前言 不要整天沉迷于学习-. 字典 一.我想跟你聊聊字典 1.为何要有字典? 大家有没有想过为什么要有字典?有列表不就可以了吗? 也许大家会这么认为,我给大家举个例子,大家就明白了. 比如说,我通讯录 ...
- 一个初学者的辛酸路程-依旧Django
回顾: 1.Django的请求声明周期? 请求过来,先到URL,URL这里写了一大堆路由关系映射,如果匹配成功,执行对应的函数,或者执行类里面对应的方法,FBV和CBV,本质上返回的内容都是字符串 ...
- 一个初学者的辛酸路程-FTP-9
前言 今天,我要描述一个FTP的故事 主要内容 嗯,今天主要以阶梯性的形式来做一个FTP项目. 第一步: 我要实现这么一个功能,一个FTP客户端,1个FTP服务端,2端建立连接以后可以进行通讯. 服务 ...
- 一个初学者的辛酸路程-socket编程-8
前言: 你会发现会网络是多么幸福的事情 主要内容: socket 概念: socket本质上就是2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递.我们知道网络通信都是基于 ...
- 一个初学者的辛酸路程-了解Python-2
前言 blog花了一上午写的,结果笔记本关机了,没有保存,找不到了,找不到了啊,所以说,你看的每一篇blog可能都是我写了2次以上的--.哎!! 代码改变世界,继续......... Python基础 ...
- 一个初学者的辛酸路程-继续Django
问题1:HTTP请求过来会先到Django的那个地方? 先到urls.py ,里面写的是对应关系,1个URL对应1个函数名. 如果发URL请求过来,到达这里,然后帮你去执行指定的函数,函数要做哪些事 ...
- 一个初学者的辛酸路程-jQuery
前言: 主要概要: 1.HTML+CSS补充 2.DOM事件 3.jQuery示例 内容概要: 1.布局 代码如下 <!DOCTYPE html> <html lang=" ...
随机推荐
- 关于Python2字符编码的体会
对于Python的字符编码问题也懵了很久,最近做爬虫多次遇到网页转码的问题,干脆彻底解决掉!Just Do it! 1.两种类型str与unicode str和unicode都是basestring的 ...
- 总结的OSM 地图相关的分析
How OSM works: Tile Format: png, z: levels [0- 18], x: Latitude [0- ], y: Longitude [0- ]; ...
- 3、XCode: 如何添加自定义代码片段
我们经常会定义一些retain的property,而且大概每次我们都会像这样写: @property (nonatomic, retain) Type *name; 每次都要老老实实的把“@prope ...
- 【实验室笔记】C#的Socket客户端接收和发送数据
采用socket发送和接收数据的实验中,服务器采用的是网络助手作为模拟服务器端. 客户端程序流程: 应用的命名空间: using System.Net; using System.Net.Socket ...
- 如何修改tomcat后台console标题(转)
一个机器启动多个tomcat之后,分不清楚项目之间的区别,通过console口设置一下标题 tomcat控制台改名,修改方法: 1.找到tomcat\bin\catalina.bat 2.找到 ...
- 101个Linq例子(40-60)
GroupBy - Simple 2 public void Linq41() { string[] words = { "blueberry", "chimpanzee ...
- SSD 和 SAS 意外造 raid 1
一台机器的磁盘更换后, 一个 SSD 和 一个 SAS 做了 raid 1 , 诡异情况,询问 IDC 同事中. 有可能是打开了 热备.
- setAction方法 Snackbar 右侧按钮可以被点击并处理一些事件
从数据库同一记录取得的字段所组装成的对象应该是同一个对象,然后由不同的Session从数据库同一条记录上分别取得对象,它们的内存地址是不一样的. 一般来说,常见的数字加密方式都可以分为两类,即对称加密 ...
- util:properties与context:property-placeholder
spring 使用注解装配的Bean如何使用property-placeholder属性配置中的值 这个问题不大不小,以前偷懒凡是碰到需要引用属性文件中的类时就改用xml来配置. 今天看了下sprin ...
- vb.net_一个半成品
Imports System.Text Imports System.Runtime.InteropServices Public Class Form1 '引用win32api进行枚举窗体句柄操作 ...