一、编程语言的分类
编译型:
将代码一次性全部编译成计算机可识别的二进制文件,然后执行。
优点:执行效率高。
缺点:跨平台需要重新编译,开发效率低。
代表语言:c
解释性:
逐行解释成二进制,逐行运行。
优点:开发效率高,可以跨平台。
缺点:执行效率低。
代表语言:python。
二、python的优缺点
先看优点
- Python的定位是“优雅”、“明确”、“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常非常复杂的程序。
- 开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上再进行开发,大大降低开发周期,避免重复造轮子。
- 高级语言————当你用Python语言编写程序的时候,你无需考虑诸如如何管理你的程序使用的内存一类的底层细节
- 可移植性————由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够工 作在不同平台上)。如果你小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行
- 可扩展性————如果你需要你的一段关键代码运行得更快或者希望某些算法不公开,你可以把你的部分程序用C或C++编写,然后在你的Python程序中使用它们。
- 可嵌入性————你可以把Python嵌入你的C/C++程序,从而向你的程序用户提供脚本功能。
再看缺点:
- 速度慢,Python 的运行速度相比C语言确实慢很多,跟JAVA相比也要慢一些,因此这也是很多所谓的大牛不屑于使用Python的主要原因,但其实这里所指的运行速度慢在大多数情况下用户是无法直接感知到的,必须借助测试工具才能体现出来,比如你用C运一个程序花了0.01s,用Python是0.1s,这样C语言直接比Python快了10倍,算是非常夸张了,但是你是无法直接通过肉眼感知的,因为一个正常人所能感知的时间最小单位是0.15-0.4s左右,哈哈。其实在大多数情况下Python已经完全可以满足你对程序速度的要求,除非你要写对速度要求极高的搜索引擎等,这种情况下,当然还是建议你用C去实现的。
- 代码不能加密,因为PYTHON是解释性语言,它的源码都是以名文形式存放的,不过我不认为这算是一个缺点,如果你的项目要求源代码必须是加密的,那你一开始就不应该用Python来去实现。
- 线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁(Global Interpreter Lock),是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py
为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py
文件。
由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。
三、Python的种类
CPython
当我们从Python官方网站下载并安装好Python 3.6后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python
就是启动CPython解释器。
CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。
IPython
IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。
CPython用>>>
作为提示符,而IPython用In [``序号``]:
作为提示符。
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的字节码。
小结:
Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。
四、变量
- 变量定义的规则:
-
变量名只能是 字母、数字或下划线的任意组合
-
变量名的第一个字符不能是数字
-
以下关键字不能声明为变量名
[‘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’] -
变量的定义要具有可描述性
print(1+2+3+4+5) print((1+2+3+4+5)*3/2) print((((1+2+3+4+5)*3/2)+100)/24) x = 1+2+3+4+5 y = x*3/2 z = (y + 100) / 24 print(x,y,z) x8 = 100 # True b__ = 12 # True 4g = 32 # False _ = 11 # True *r = 12 # False r3t4 = 10 # True t_ = 66 # True # 变量的小高级: age1 = 18 age2 = age1 age3 = age2 age2 = 12 # print(age1,age2,age3) # 18 12 18
五、常量
why :生活中一直不变的:π,身份证号码,历史发生的事件
what: 常量:一直不变的量。python中没有真正的常量,为了应和其他语言的口味,全部大写的变量称之为常量。
how: 将变量全部大写,放在文件的最上面。
where: 设置一些不变的量 :身份证号,id,
BIRTH_OF_CHINA = 1949
# 常量
# 约定俗成不能改变
NAME = 'ymy'
# print(NAME)
六、注释
what: 注释
how:
单行注释: #
多行注释: ‘’‘被注释内容’’’ “”“被注释内容”""
where:
难以理解的代码后面,加注释。
函数,类,文件都需要注释,解释说明。
七、基础数据类型
100 ,102 ,就是数字(int), + - * / …
‘中国’,‘hello’ ,‘萨瓦迪卡’ 文字,:记录信息,描述信息等等。
[1, 2, 3, ‘中国’] 列表,他能做他相应的一些操作即可。
… python的基础数据类型。
-
int(整型): 1 ,2, 123, …
+ - * / . 运算
i = 100
i1 = 2
i2 = i*i1
print(i2)
str: 凡是用引号引起来的数据就称之为字符串。
‘’, “”, ‘’’ ‘’’ “”" “”"
# str:
s1 = 'day01'
s2 = "Python"
s2 = '''Python'''
# 单双引号可以配合使用
# content = 'I am taibai, 18 year old'
# content = "I'm taibai, 18 year old"
# 三引号:换行的字符串
msg = '''
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
'''
# print(msg)
# str 可以否加减乘除? + *
# str + str *** 字符串的拼接
s1 = 'alex'
s2 = 'sb'
# print(s1 + s2)
# str * int
# s1 = '坚强'
# print(s1*8)
bool :True False
判断变量指向的是什么数据类型? type()
# bool : True False
# print(2 > 1)
# print(3 < 1)
# print(True)
# print('True')
# s1 = '100'
# s2 = 100
# print(s1,type(s1))
# print(s2,type(s2))
八、用户交互input
场景:
网页上输入信息
username = input('请输入姓名')
age = input('请输入年龄')
sex = input('请输入性别')
print('我的姓名是'+username+',我的年龄是'+ age +',我的性别是 '+sex)
九、流程控制 if
why: 生活中选择,回家,n条路,你走那条路,取决于心情。
what: if。
how:
-
基本结构:
-
if 条件: 结果 # c: if{条件}{结果}
-
单独if
print(111) if 2 < 1: print(666) print(333) print(222)
-
if else 二选一
s1 = '100' i1 = int(s1) print(i1,type(l1)) age = input('请输入年龄:') if int(age) > 18: print('恭喜你,成年了') else: print('小屁孩儿')
-
if elif elif … 多选一
num = int(input('猜点数:')) if num == 1: print('晚上请你吃饭') elif num == 3: print('一起溜达') elif num == 2: print('请你大宝剑')
-
if elif elif … else 多选一
num = int(input('猜点数:')) if num == 1: print('晚上请你吃饭') elif num == 3: print('一起溜达') elif num == 2: print('请你大宝剑') else: print('太笨了....') print('组合')
-
嵌套的if
user = input('请输入用户名: ') password = int(input('请输入密码: ')) auth_code = input("请输入验证码") code = 'qwe' if auth_code == code: if user == 'ymy' and password == 123456: print("登录成功") else: print("登录失败,请检查用户名密码") else: print("验证码错误")
`
-
嵌套的if
user = input('请输入用户名: ') password = int(input('请输入密码: ')) auth_code = input("请输入验证码") code = 'qwe' if auth_code == code: if user == 'ymy' and password == 123456: print("登录成功") else: print("登录失败,请检查用户名密码") else: print("验证码错误")