Day01 - Python 基础介绍
1 Python 简介
1.1 Python 的由来
Python的创始人:吉多·范罗苏姆(Guido van Rossum)
1989年,吉多·范罗苏姆为了在阿姆斯特丹打发圣诞节假期时间,开发的一个新的脚本解释程序,作为ABC语言的一种继承。
Python社区的人赋予他“仁慈大君” 的称号,这一称号直接来自英国肥皂剧《Monty Python飞行马戏团》。Guido当初之所以选中Python作为语言的名字,是因为他太喜欢这部肥皂剧了。
1.2 Python 现状
TIOBE排行榜
http://www.tiobe.com/tiobe-index/
1.3 Python 的特点
优点:
-
1)易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
-
2)易于阅读:Python代码定义的更清晰。
-
3)易于维护:Python的成功在于它的源代码是相当容易维护的。
-
4)一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
-
5)互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
-
6)可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
-
7)可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
-
8)数据库:Python提供所有主要的商业数据库的接口。
-
9)GUI编程:Python支持GUI可以创建和移植到许多系统调用。
-
10)可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。
缺点:
- 1)运行速度慢:和C程序相比非常慢。因为Python是解释型语言,代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。
但是大量的应用程序不需要这么快的运行速度,因为用户根本感觉不出来。例如,开发一个下载MP3的网络应用程序,C程序的运行时间需要0.001秒,而Python程序的运行时间需要0.1秒,慢了100倍,但由于网络更慢,需要等待1秒,用户能感觉到1.001秒和1.1秒的区别吗?这就好比F1赛车和普通的出租车在北京三环路上行驶的道理一样,虽然F1赛车理论时速高达400公里,但由于三环路堵车的时速只有20公里,因此,作为乘客,你感觉的时速永远是20公里。
- 2)代码不能加密:如果要发布你的Python程序,实际上就是发布源代码,这一点跟C语言不同,C语言不用发布源代码,只需要把编译后的机器码(也就是你在Windows上常见的xxx.exe文件)发布出去。要从机器码反推出C代码是不可能的,所以,凡是编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。
这个缺点仅限于你要编写的软件需要卖给别人挣钱的时候。好消息是,在目前的互联网时代,靠卖软件授权的商业模式越来越少了,靠网站和移动应用卖服务的模式越来越多了,后一种模式不需要把源码给别人。另外,现在如火如荼的开源运动和互联网自由开放的精神是一致的,互联网上有无数非常优秀的像Linux一样的开源代码,我们千万不要高估自己写的代码真的有非常大的“商业价值”。那些大公司的代码不愿意开放的更重要的原因是代码写得太烂了,一旦开源,就没人敢用他们的产品了。
- 3)线程不能利用多CPU:这是Python被人诟病最多的一个缺点,GIL即全局解释器锁。是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。
1.4 Python应用领域
- WEB/客户端 开发: 豆瓣、Youtube 、Quora 、BitTorrent、dropbox 、Gmail、Google Maps
- 云计算:OpenStack
- 爬虫:搜索引擎、网站比价、买火车票
- 游戏: EVE online 、Civilization IV
- 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系统运维: 运维人员必备语言
- 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
- 图形GUI: PyQT, WxPython,TkInter
1.5 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完成各种各样的任务。
2 Python 环境搭建
2.1 获取安装包
下载地址:https:
/
/
www.python.org
/
downloads
/
2.2 安装
2.2.1 Windows:
1)添加到PATH
2)next
3)选择安装目录
4)安装成功
2.2.2 Linux:
解压、编译、安装
1 # tar zxvf Python-3.5.2.tgz 2 3 # cd Python-3.5.2 4 5 # ./configure 6 7 # make 8 9 # make install
3 Python的Hello World
3.1 交互模式
1 Python 3.5.2 (default, Sep 28 2016, 14:44:21) 2 [GCC 4.1.2 20070626 (Red Hat 4.4.7-3)] on linux 3 Type "help", "copyright", "credits" or "license" for more information. 4 >>> print("Hello World!") 5 Hello World! 6 >>>
3.2 执行文件模式
1 编辑文件:vi hello.py 2 写入代码:print("Hello Woold!") 3 执行文件:python hello.py
3.3 使用IDE
3.3.1 PyCharm 简介
PyCharm是由JetBrains打造的一款Python IDE,具备调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制等功能。另外,PyCharm还提供了一些很好的功能用于Django开发,同时支持Google App Engine,更酷的是,PyCharm支持IronPython!
3.3.2 PyCharm快捷键
在菜单栏Help下你点击Default Keymap Reference,可以打开一个PDF文件,里面列出了所有的快捷键,你可以打印出来备用。千万不要被这么多快捷键吓到了,日常编程经常使用的也就下面 几个,如果你想放弃鼠标,直接纯键盘编程,那么你会完全爱上PyCharm。
◆ Basic code completion --- ”基本代码完成“快捷键
在日常写代码中,Basic code completion是用的比较多的,它可以智能的提示你或者帮你补全余下的代码。但是这一个快捷键是最有争议的一个快捷键,因为它的快捷方式是Ctrl + Space,会与我们的输入法快捷键冲突,所以第一步我们需要改变这个快捷键,我一般喜欢改成Ctrl + Comma。(如何修改默认快捷键见下面介绍)
◆ Tab
Tab 有2种情况:
1. 当你什么也没有输入的时候,Tab只是4个空格的缩进。
2. 当你输入前几个字母,PyCharm会智能的列出所有的候选项,这时候,你只要按下Tab,会默认选择第一个候选项。你也许觉得这没什么,但是这个功能能保证你的双手不离口键盘的“字母区”,你不需要按上下左右键去选择候选项,提供输入速度,非常流畅。
◆ Shift+Enter --- 智能换行
class function鼠标在这(): 鼠标在function后面括号前面,我想换到下一行正确的位置写代码,那么就Shift+Enter 智能换行吧
◆ 其他快捷键 --- 如果你感兴趣,就看Default Keymap Reference吧,保证有惊喜
3.3.3 PyCharm默认快捷键的修改
上面提到,我们需要修改Basic code completion的默认快捷键。
1)快捷键(Ctrl + Alt + S)打开设置面板,或者点击如图所示红方框里面的图标:
2)找到Keymap选项
3.3.4 PyCharm 的插件
因为PyCharm的功能已经很强大了,我一般很少用插件,这里介绍一个我很喜欢的插件,叫Native Neighbourhood,这个插件可以快速的打开操作系统的文件。
那么如何安装插件呢?
1)快捷键(Ctrl + Alt + S)打开设置面板,或者点击如图所示红方框里面的图标
2)找到Plugins
3.3.5 PyCharm 一下吧
那么现在就点击这个链接下载吧,不需要找注册码,先试用一个月再说!
http://www.jetbrains.com/pycharm/
4. 注释
4.1 单行注释
使用符号#开头注释单行内容:
1 #!/usr/bin/env python 2 # -*- coding: UTF-8 -*- 3 # 文件名:test.py 4 5 # 第一个注释 6 print("Hello, Python!") # 第二个注释
输出结果:
1 Hello, Python!
4.2 多行注释
使用三个单引号(''')或三个双引号(""")注释多行内容
1 #!/usr/bin/env python 2 # -*- coding: UTF-8 -*- 3 # 文件名:test.py 4 5 6 ''' 7 这是多行注释,使用单引号。 8 这是多行注释,使用单引号。 9 这是多行注释,使用单引号。 10 ''' 11 12 """ 13 这是多行注释,使用双引号。 14 这是多行注释,使用双引号。 15 这是多行注释,使用双引号。 16 """
5 变量和数据类型
5.1 什么是变量
变量是存储在内存中的值。这就意味着,在创建变量时,会在内存中开辟一个空间。基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中。因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符。
5.2 变量的声明和赋值
1 #!/usr/bin/env python 2 # -*- coding: UTF-8 -*- 3 4 counter = 100 # 赋值整型变量 5 miles = 1000.0 # 浮点型 6 name = "John" # 字符串 7 8 print counter 9 print miles 10 print name
以上实例中,100,1000.0和"John"分别赋值给counter,miles,name变量。
执行以上程序会输出如下结果:
1 100 2 1000.0 3 John
5.3 变量的命名规则
- 变量名只能是字母、数字或下划线的任意组合
- 变量名第一个字符不能是数字
- 关键字不能声明为变量名
以下关键字不能声明为变量名
['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']
6 输出和输入
6.1 输出
用print()
在括号中加上字符串,就可以向屏幕上输出指定的文字。比如输出'hello, world'
,用代码实现如下:
1 >>> print("Hello World!") 2 Hello World!
print()
函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出:
1 >>> print('The quick brown fox', 'jumps over', 'the lazy dog') 2 The quick brown fox jumps over the lazy dog
6.2 输入
Python提供了一个input()
,可以让用户输入字符串,并存放到一个变量里。比如输入用户的名字:
1 >>> name = input() 2 James 3 >>> print(name) 4 James
python3中的input() 即为 python2中的raw_input()
1 #!/usr/bin/env python 2 # -*- coding: UTF-8 -*- 3 4 #name = raw_input("What is your name?") #only on python 2.x 5 name = input("What is your name?") 6 print("Hello " + name )
输入密码时,如果想要不可见,需要利用 getpass 模块中的 getpass 方法,即:
1 #!/usr/bin/env python 2 # -*- coding: UTF-8 -*- 3 4 import getpass 5 6 # 将用户输入的内容赋值给 name 变量 7 passwd = getpass.getpass("请输入密码:") 8 9 # 打印输入的内容 10 print(passwd )
7 字符编码
8 流程控制
8.1 if ... else ...
场景一:用户登录验证
1 # 提示输入用户名和密码 2 3 # 验证用户名和密码 4 # 如果错误,则输出用户名或密码错误 5 # 如果成功,则输出 欢迎,XXX! 6 7 8 #!/usr/bin/env python 9 # -*- coding:UTF-8 -*- 10 11 import getpass 12 13 name = input('请输入用户名:') 14 passwd = getpass.getpass('请输入密码:') 15 16 if name == "James" and passwd == "123": 17 print("欢迎,James!") 18 else: 19 print("用户名和密码错误")
场景二、猜年龄游戏
在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了。
8.2 for loop
循环10次:
1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 4 for i in range(10): 5 print("loop:", i )
输出结果:
1 loop: 0 2 loop: 1 3 loop: 2 4 loop: 3 5 loop: 4 6 loop: 5 7 loop: 6 8 loop: 7 9 loop: 8 10 loop: 9
需求一:还是上面的程序,但是遇到小于5的循环次数就不走了,直接跳入下一次循环
1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 4 for i in range(10): 5 if i<5: 6 continue #不往下走了,直接进入下一次loop 7 print("loop:", i )
输出结果:
1 loop: 5 2 loop: 6 3 loop: 7 4 loop: 8 5 loop: 9
需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出
1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 4 for i in range(10): 5 if i>5: 6 break #不往下走了,直接进入下一次loop 7 print("loop:", i )
输出结果:
1 loop: 5 2 loop: 6 3 loop: 7 4 loop: 8 5 loop: 9
8.3 while loop
只要条件满足,就不断循环,条件不满足时退出循环
1 #!/usr/bin/env python 2 # -*- coding:UTF-8 -*- 3 4 count = 0 5 while (count < 9): 6 print('The count is:', count) 7 count = count + 1 8 9 print("Good bye!")
输出结果:
1 The count is: 0 2 The count is: 1 3 The count is: 2 4 The count is: 3 5 The count is: 4 6 The count is: 5 7 The count is: 6 8 The count is: 7 9 The count is: 8 10 Good bye!
while 的死循环
1 #!/usr/bin/env python 2 # -*- coding:UTF-8 -*- 3 4 count = 0 5 while True: 6 print("加鸡腿...",count) 7 count +=1
作业一:博客
作业二:编写登陆接口
- 输入用户名密码
- 认证成功后显示欢迎信息
- 输错三次后锁定
- 三级菜单
- 可依次选择进入各子菜单
- 所需新知识点:列表、字典