PYTHON基础
一 PYTHON介绍
1 什么是PYTHON
编程语言分类
1.1编译型与解释型
编译器是把远程与的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时机器可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言交给计算机来执行,所以运行速度是不如编译后的程序运行的夸IDE。因为计算机不能直接识别并执行我们写的语句,它只认知二进制语言(机器语言)。
借张图用用:
各种语言优缺点:
1.2 编译型
优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。
缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
1.3 解释型
优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
2 PYTHON的优缺点
2.1 python的优点
1. Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去是简单易懂,初学者学Python,入门容易,可以深入,可以编写复杂的程序。
2. 开发效率高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块支持,下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。
3. 高级语言--当你用Python便携程序的时候,你无须考虑诸如如何管理你的程序使用的内存一类的底层西街问题。
4. 可移植性--由于Pyhon的开元本质,它已经被一直在许多平台上。如果小心比避免使用依赖于系统的特性,那么所有的Python程序无需修改就继续可以在所有的平台上运行。
5. 可扩展性--如果你需要你的一段关键代码运行的更快或者希望某些算法不公开,你可以把你的部分程序用C或者C++便携,然后再你的Python程序中使用它们。
6. 可嵌入性--你可以把Python嵌入到你的C/C++chengxu,从而想你的程序用户提供脚本功能。
2.2 python的缺点
1. 速度慢--PY的运行速度的确比C语言慢很多,比JAVA也慢一些。但是这里指的运行速度的快慢在绝大多数情况下是用户无法直接感知到的,必须借助测试工具才能体现出来。可能执行一个程序的时间的差别是0.1s与0.01s的差别。这已经算是非常夸张了。在大多数情况下,PY完全可以满足你对程序速度的要求,除非要写对速度要就极高的搜索引擎,在这种謦欬那个下,还是建议用C去实现。
2. 代码不能加密。因为PY是解释型语言,它的源码都是以文件的形式存放的。不过这也不是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用PY来实现。
3. 线程不能利用多CPU的问题。(待了解)
3 PYTHON的种类
1. CPython
当我们从Python官方网站下载并安装好Python 3.6后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python
就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
2. IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
3. PyPy
PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。
绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
4. JPython
Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
5. IronPython
IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
小结:
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
4 Python2与Python3的区别
Python2x:源码重复,不规范
python3x:整合源码,更清晰简单优美。
Python2x:默认的编码是ascii,
解决方式:# -*- encoding:utf-8 -*-
Python3x:默认的编码是utf-8
Python2x:long int
print 'abc' print('abc')
Python3x:无long int
print('abc')
Python2x:raw_input()
input() 只能输入数字类型
Python3x:input
(后续单独整理博文,记录)
二 PYTHON基础知识
1. 运行Pytyhon代码
将代码写在以.py结尾的文件里,以python命令去运行它
python test.py
或者在python解释器内,直接运行Python代码(仅供调试)
Hello World 程序员的入门礼仪
➜ ~ python Python 2.7.10 (default, Jul 15 2017, 17:16:57) [GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> print ("Hello World") Hello World
2. 内容编码
Python2的解释器在加载.py的文件时,会对内容进行编码(默认ASCII),而Python3对内容急性编码默认为utf-8
指定解释器:
#!/usr/bin/env python # -*- encoding:utf-8 -*-
3. 注释
单行注释 #
# 6、用户登陆(三次机会重试)
多行注释 '''123''' 或者 """123"""
''' a = sum(range(1,100,2)) b = sum(range(0,100,2)) '''
4. 变量
变量是什么? 变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。
4.1 变量定义规则
- 变量名只能是 字母、数字或下划线的任意组合
- 变量名的第一个字符不能是数字
- 以下关键字不能声明为变量名
['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'] - 变量的定义要具有可描述性。
4.2 推荐定义方式
#驼峰体 AgeOfOldboy = 56 NumberOfStudents = 80 #下划线 age_of_oldboy = 56 number_of_students = 80
你觉得哪种更清晰,哪种就是官方推荐的,我想你肯定会先第2种!你觉得第一种一眼看上去像啥?
5. 程序交互
#!/usr/bin/env puthon # -*- coding: utf-8 -*- # 将用户输入的内容赋值给name变量 name = input("请输入用户名:") #打印输入内容 print name
执行脚本你的时候,程序会输出提示信息:“请输入用户名”,并等待用户输入,同理可让用户输入用户名、密码等多个信息
6. 格式化输出
练习:询问用户的姓名、年龄、工作、爱好,然后打印成一下格式。
------------ info of Alex Li ----------- Name : Alex Li Age : 22 job : Teacher Hobbie: girl ------------- end -----------------
实现:只需要把需要打印的格式先打印好,由于一些信息需要用户输入,无法预知,所以可以先放置一个占位符,再把字符串里的占位符与外部的变量做个映射关系就好了。
name = input("Name:") age = input("Age:") job = input("Job:") hobbie = input("Hobbie:") info = ''' ------------ info of %s ----------- #这里的每个%s就是一个占位符,本行的%s代表 后面拓号里的 name Name : %s #代表 name Age : %s #代表 age job : %s #代表 job Hobbie: %s #代表 hobbie ------------- end ----------------- ''' %(name.name.age.job,hobbie) ##这行的%就是把前面的字符串与这里行括号里面的变量关联起来 print (info)
%s 字符串占位符
%d 数字占位符,这时只能输入数字
但是如果直接将age的占位符改为%d会报错,因为%d是数字的占位符,但是通过input输入的所有内容,都是字符串格式的。所以需要进行格式转换。
我们可以用type()的方法查看一个字符串的数据类型。
name = input("Name: ") age= input("Age: ") print(type(name)) print(type(age))
发现无论用户输入的是字母还是数字,其数据类型都是str,因为:input接收的所有输入默认都是字符串格式!
在这里,我们可以进行数据类型的转换操作
例如,把input接手的字符串格式,转换为整型:
age = int( input("Age:") ) print(type(age))
还可以把整型转换为字符串
age = 18
str(age)
在上面格式化输出的例子里,我们的占位符都需要%来表示。但是当你真的需要在文档中输出一个%时,那该怎么办呢?
msg = "我是%s,年龄%d,目前学习进度为80%"%('金鑫',18) print(msg)
以上代码会报错的,因为吧“80%”中的%当成了占位符,但是无法识别它
msg = "我是%s,年龄%d,目前学习进度为80%%" %('金鑫',18) print(msg)
按这种方式来写,含义是用第一个%对第二个%进行转译,告诉python解释器中午是一个单纯的符号(%),并不是占位符。
7. 基本运算符
运算符
计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,我们暂只学习算数运算、比较运算、逻辑运算、赋值运算
算数运算:
可以进行加减乘除,取余(%),幂(**),取整数-返回商的整数部分(//)
比较运算:
== 判断比较对象是否相等,注意一个=是赋值,两个=是比较判断 != 不等于 <> 不等于,很少用到 > 大于,返回x是否大于y < 小于,返回x是否小于y >= <=
比较运算,返回的值为布尔值。
赋值运算:
盗图验证:
以下假设变量:a=10,b=20
逻辑运算:
注意:在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为( )>not>and>or,同一优先级从左往右计算
8. 流程控制
8.1 if语句
if语句 单分支
if 你饿了(满足的条件): 那就去吃饭(满足条件后执行的代码)
if...else 语句 双分支
if 条件: 满足条件执行代码 else: if条件不满足就走这段
if...elif...else语句,多分支
if 条件: 满足条件执行代码 elif 条件: 上面的条件不满足就走这个 elif 条件: 上面的条件不满足就走这个 elif 条件: 上面的条件不满足就走这个 else: 上面所有的条件不满足就走这段
8.2 while语句
8.2.1 基本循环
while 基本条件: 要执行的动作1 要执行的动作2 。。。
8.2.2 break
作用:跳出while循环
8.2.3 continue
作用:跳出本次循环,进入下一次while循环
8.2.4 while...else...
while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句
count = 0
while count <= 5 :
count += 1
print("Loop",count)
else:
print("循环正常执行完啦")
print("-----out of while loop ------")
相关流程控制练习,详见博文:http://www.cnblogs.com/wangph/p/test1.html