Python全栈之路-----基础篇
Python诞生
Python是著名的”龟叔
“Guido van Rossum(吉多·范罗苏姆)
在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。
Python语法很多来自C,但又受到ABC语言的强烈影响。来自ABC语言的一些规定直到今天还富有争议,比如强制缩进。但这些语法规定让Python容易读。Guido van Rossum
著名的一句话就是Life is short, you need Python
,译为:人生苦短,我用Python
Python实现方式
Python身为一门编程语言,但是他是有多种实现方式的,这里的实现指的是符合Python语言规范的Python解释程序以及标准库等。
- Python的实现方式主要分为三大类
- Cpython
- PyPy
- Jpython、IronPython等等类似的实现方式
- CPython
这是Python的官方版本,使用C语言实现,使用最为广泛,新的语言特性一般也最先出现在这里。
CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上。
- PyPy
Python(RPython Python)的Python实现版本,原理是这样的,PyPy运行在CPython(或者其它实现)之上,用户程序运行在PyPy之上。它的一个目标是成为Python语言自身的试验场,因为可以很容易地修改PyPy解释器的实现(因为它是使用Python写的),PyPy的代码性能是Cpython的五倍以上。
- 性能对比图
- Jython
Jython是个Python的一种实现方式,Jython编译Python代码为Java字节码,然后由JVM(Java虚拟机)执行,这意味着此时Python程序与Java程序没有区别,只是源代码不一样。此外,它能够导入和使用任何Java类像Python模块。
- IronPython
IronPython是Python的C#实现,并且它将Python代码编译成C#中间代码(与Jython类似),然后运行,它与.NET语言的互操作性也非常好。
安装Python
Windows安装Python2.7.11
- 下载Python软件
64位下载地址:https://www.python.org/ftp/python/2.7.11/python-2.7.11.amd64.msi
32位下载地址:https://www.python.org/ftp/python/2.7.11/python-2.7.11.msi
- 安装Python软件
下载下来之后双击安装,安装时一路下一步下一步即可,Windows一贯的作风,默认的安装路径是:C:\Python27
- 配置环境变量
右键计算机
—> 属性
—> 高级系统设置
—> 高级
—> 环境变量
—> 在第二个内容框中找到变量名为Path的一行,双击
—> Python安装目录追加到变值值中,用;分割
如图:
Windows 10安装后默认会把环境变量配置好。
- cmd测试
CentOS升级到Python2.7.11
CentOS6.7
默认自带Python2.6.6
版本,如果你不需要升级到2.7.11
请跳过这段,如果需要升级请继续往下看。
- 下载python2.7.11源码包
下载地址:https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
1 | [root@mosson ~] # wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz |
- 安装开发工具包
1 | [root@mosson~] # yum -y groupinstall "debugging Tools" |
- 编译安装
1 2 3 4 5 | [root@mosson ~] # tar xf Python-2.7.11.tgz [root@mosson ~] # cd Python-2.7.11 [root@mosson Python - 2.7 . 11 ] # ./configure -prefix=/usr/local/python2.7.11 [root@mosson Python - 2.7 . 11 ] # make [root@mosson Python - 2.7 . 11 ] # make install |
- 更改配置
创建链接来使系统默认python变为python2.7
1 | [root@mosson Python - 2.7 . 11 ] # ln -fs /usr/local/python2.7.11/bin/python2.7 /usr/bin/python |
查看Python版本
1 2 | [root@mosson Python - 2.7 . 11 ] # python -V Python 2.7 . 11 |
修改yum配置(否则yum无法正常运行)
1 2 3 4 | [root@mosson Python - 2.7 . 11 ] # vim /usr/bin/yum #!/usr/bin/python #将第一行改为 #!/usr/bin/python2.6 |
Python简单入门
Hello Word
一般情况下程序猿的第一个小程序都是简单的输出Hello Word!
,当然Python也不例外,下面就让我们来用Python输出一句Hello Word!
吧!
- 创建一个以py结尾的文件
1 | [root@mosson python_code] # touch hello.py |
其内容为:
1 2 | #!/usr/vin/env python print "Hello World!" |
- 用Python执行
1 2 | [root@mosson python_code] # python hello.py Hello Word! |
Python代码执行流程
释意:当Python执行代码的时候,会先把源码读取到内存当中,然后由Cpython进行编译,编译成字节码,最后由Cpython的虚拟机一行一行的解释其内容,再输出到屏幕上,然后释放内存,退出程序。
pyc文件
执行Python代码时,如果导入了其他的.py文件,那么,执行过程中会自动生成一个与其同名的.pyc文件,该文件就是Python解释器编译之后产生的字节码。
代码经过编译可以产生字节码;字节码通过反编译也可以得到代码
指定Python解释器
在Python文件的开头加入以下代码就制定了解释器。
- 第一种方式 告诉shell这个脚本用
/usr/bin/python
执行
1 | #!/usr/bin/python |
- 第二种方式 在操作系统环境不同的情况下制定这个脚本用python来解释。
1 | #!/usr/bin/env python |
执行Python文件
执行python文件有两种方式:
- 第一种执行方式
1 2 | [root@mosson python_code] # python my.py Life is short, you need Pytho |
- 第二种执行方式
1 2 3 | [root@mosson python_code] # chmod +x my.py [root@mosson python_code] # ./my.py Life is short, you need Pytho |
字符编码
ASCII
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode 缺点:浪费空间如果是字母特殊字符数字的话
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8
一个汉字3个字节
gbk1个汉字是2个字节
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
报错:ascii码无法表示中文
1 2 3 4 5 6 | #!/usr/bin/env python print ( "你好,世界" ) #!/usr/bin/env python # -*- coding: utf-8 -*- print ( "你好,世界" ) |
代码注释:
单行注释:在代码前加上#
多行注释:
1 2 3 | """ 注释内容 """ |
pyc文件
执行Python代码时,如果导入了其他的 .py 文件,那么,执行过程中会自动生成一个与其同名的 .pyc 文件,该文件就是Python解释器编译之后产生的字节码。
ps:代码经过编译可以产生字节码;字节码通过反编译也可以得到代码。
Py转pyc 其实 就是你的程序代码交给虚拟机转换成机器可以识别的二进制的过程。 就是字节码转换
不是编译过程
为什么生成pyc文件
缓存的问题。 转换字节码的数据写到硬盘上, 下次执行的时候不用翻译了。
python中的变量
变量的命名规则:
1 变量名只能是 字母、数字或下划线的任意组合
2 不能以数字开头
3 不能是python的已用的变量名
例如:['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']
变量赋值:
1 2 3 4 | #!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "zhangsan" name2 = "licsi" |
1 2 3 4 5 | #!/usr/bin/env python # -*- coding: utf-8 -*- name1 = "wupeiqi" name2 = name1 |
模块导入:
模块导入是大大简化你的程序的可读性。
比如 1.py
1 2 3 4 5 | #!/usr/bin/env python #_*_coding:utf-8_*_ import 2.py print ( "hello" ) |
而2.py
1 2 3 4 | #!/usr/bin/env python #_*_coding:utf-8_*_ print ( "world" ) |
而执行python 1.py结果是
world
hello
大家看到了吧,import xxx.py 就是将这个文件的内容导入进来替换这个import行。
数据类型
按照特征划分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | 数字类型: 整形: 布尔型: True False 必须大写第一个字母 长整形: 标准整形: 非整型: 双精度浮点型 复数 decimal(不是内建类型) 序列类型: 字符串:引号引起来的 元祖: tuple 不可变 列表: 键值: 字典: 集合类型: 可变集合 不可变集合 |
按照可变性划分:
1 2 3 4 5 6 7 8 9 10 | 可哈希的不可变数据类型: 数字类型 不可变集合 字符串 元组 可变数据类型 字典 列表 可变集合 |
流程控制和缩进
注释:if语句,当且仅当if后的条件为真时才会执行if条件下的代码块,
if 多层判断
1 2 3 4 5 6 7 8 9 10 11 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' inp = raw_input ( ">>>" ) if inp = = "1" : print ( '1' ) elif inp = = "2" : print ( '2' ) else : print ( "other" ) |
while 循环
while 条件:
动作
当条件一旦满足就不会再执行动作
while的退出循环方法1
例子: 打印数字当数字为7 则退出循环
重点:利用了 flag的布尔类型来做赋值控制。
1 2 3 4 5 6 7 8 9 10 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' start = 1 flag = True while flag: print (start) if start = = 7 : flag = False start + = 1 print ( "end" ) |
continue break练习
continue 是跳出本次循环,继续下次循环
break是跳出本层循环
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' import time i = 0 while i< = 10 : time.sleep( 0.1 ) i + = 1 if i = = 7 : continue print i print ( "end" ) |
检测是否是跳出本层循环
1 2 3 4 5 6 7 8 9 10 11 12 13 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' a = 0 b = 0 while a< 10 : while b< 3 : if b = = 2 : break b + = 1 print b a + = 1 print a |
作业:
1 2 3 4 5 6 7 8 9 10 11 12 | 练习题 1 、使用 while 循环输入 1 2 3 4 5 6 8 9 10 2 、求 1 - 100 的所有数的和 3 、输出 1 - 100 内的所有奇数 4 、输出 1 - 100 内的所有偶数 5 、求 1 - 2 + 3 - 4 + 5 ... 99 的所有数的和 6 、用户登陆(三次机会重试) |
num one
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' i = 0 while i< = 10 : time.sleep( 0.1 ) i + = 1 if i = = 7 : continue print i print ( "end" ) |
num two
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' #1到100求和 j = 0 i = 1 while i< = 100 : j + = i i + = 1 print j |
linux命令行求和
1 2 3 4 5 6 7 | awk 'BEGIN{i=1;do{sum+=i;i++}while (i<=100);print sum}' awk 'BEGIN{i=1;while (i<=100){sum+=i;i++};print sum}' awk 'BEGIN{sum=0;for (i=1;i<=100;i++)sum+=i;print sum}' declare sum = 0 ; for i in `seq 1 100 `;do let sum + = $i;done;echo $ sum |
num three
1 2 3 4 5 6 7 8 9 | #!/usr/bin/env python #—*— coding:utf-8 —*— #奇数求和 j = 0 i = 1 while i < 100 : j + = 1 i + = 2 print (j) |
num four
1 2 3 4 5 6 7 8 9 | #!/usr/bin/env python # -*- coding:utf-8 -*- #偶数求和 i = 0 j = 0 while i < 100 : j + = i i + = 2 print (j) |
num five
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/usr/bin/env python # _*_ coding:utf-8 _*_ __author__ = 'Administrator' # 奇数 求和 j = 0 i = 1 while i< = 100 : j + = i i + = 2 print j #偶数 求和 k = 0 l = 0 while l< = 100 : k + = l l + = 2 print k print (j - k |
三次登录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import sys i = 0 while i < 3 : #只要用户登录异常不超过3次就不断循环 username = input ( "请输入用户名:" ) lock_file = open ( 'user_lock.txt' , 'r+' ) #当用户输入用户名后,打开LOCK 文件 以检查是否此用户已经LOCK了 lock_list = lock_file.readlines() for lock_line in lock_list: #循环LOCK文件 lock_line = lock_line.strip( '\n' ) #去掉换行符 if username = = lock_line: #如果LOCK了就直接退出 sys.exit( '=======WARNING:该账号 %s 已经被冻结========' % username) user_file = open ( 'user_id.txt' , 'r' ) #打开帐号文件 user_list = user_file.readlines() for user_line in user_list: #对帐号文件进行遍历 (user,password) = user_line.strip( '\n' ).split() #分别获取帐号和密码信息 if username = = user: #如用户名正常匹配 m = 0 while m < 3 : #只要用户密码异常不超过3次就不断循环 passwd = input ( '请输入密码:' ) #输入密码,相对安全 if passwd = = password: #密码正确,提示欢迎登录 print ( 'HI,%s,欢迎登录系统' % username) sys.exit( 0 ) #正常退出 else : if m ! = 2 : #m=2时,是最后一次机会,不用在提示还剩余0次机会了 print ( '用户 %s 密码错误,请重新输入,还有 %d 次机会' % (username, 2 - m)) m + = 1 #密码输入错误后,循环值增加1 else : lock_file.write(username + '\n' ) #密码输入三次错误后,将该用户追加到LOCK文件 sys.exit( '用户 %s 达到最大登录次数,请联系管理员!!' % username) else : pass #当用户没匹配时,跳过并继续循环 else : if i ! = 2 : #i=2时,是最后一次机会,不用在提示还剩余0次机会了 print ( '用户 %s 不存在,请重新输入,还有 %d 次机会' % (username, 2 - i)) i + = 1 #当用户输入错误时,循环值增加1 else : sys.exit( '用户 %s 不存在,退出' % username) #用户输入三次错误后,异常退出 lock_file.close() #关闭lock文件 user_file.close() #关闭user_id文件 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步