@[Python--------发展、应用、变量、标识符、格式化]
1.Python发展史
荷兰人Guido van Rossum1989年发明的
第一个公开发行版发行于1991年
1999年:支持网站开发
2000年:2.0产生,这个时候构成了现在 python语言框架的基础
2004年:python的Web框架Django诞生
2008年10月:python2.6
2008年12月:python3.0
【之前 Python 的内容有很多重复的,就做了版本更新,升级为3.0 ,但是这个版本与之前的语言不兼容,所以就做了小版本更新】
2010年:Python2.7【也就是2.6 与2.7是到3.0的一个过渡】
目前业内使用的工业版本使用的主流依然是2.7,现在新项目的主流都是3.x
2.Python特点
-
Python是一种解释性语言【开发过程中没有了编译这个环节】
-
Python是交互式语言【在cmd的黑框中输入:python直接进行编写代码】
-
Python是面向对象语言
-
Python简单易学应用广泛【支持广泛的应用程序开发:从简单的文字处理到浏览器再到游戏,下文还会具体介绍】
-
Python是跨平台的【它可以运行在Windows、Mac os或者Linux系统上,即:在Windows上书写的Python程序,在Linux上也是可以运行的,类似于Java(java靠字节码和不同的JVM运行与不同的平台)】
-
易于学习【Python有相对较少的关键字】
-
易于阅读【Python代码空格等严格对齐,强制缩进,因此看起来整齐容易阅读】
-
易于维护
-
一个广泛的标准库【Python的最大优势之一是丰富的库,跨平台的】
-
互动模式【互动模式的支持,可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片段】
-
可移植性
-
可扩展性【如果需要一段运行很快的关键代码,或者想要编写一些不愿开发的算法,可以使用C或者C++完成那部分程序,然后从你的Python程序中调用】
-
数据库【Python提供所有主要的商业数据库的接口】
-
GUI编程(图形化界面)【Python支持GUI可以创建和移植到许多系统调用】
-
可嵌入性【可以将Python嵌入到C或者C++程序,让你程序的用户获得“脚本化”的能力】
-
大量的标准库和第三方库
-
运行速度慢【和C程序相比非常慢,因为Python是解释型语言,代码在执行时会一行一行的翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢,而C程序是运行前直接编译成CPU能执行的机器码,所以非常快】
-
代码不能加密【如果要发布Python程序,实际上就是发布源代码,这一点跟C语言不通,C语言不用发布源代码,只需要把编译后的机器码发布出去,要从机器码反推出C代码是极其困难的,因此凡是编译型的语言都没有这个问题,而解释型的语言,则必须把源码发布出去】
3.python的应用方向 -
Web开发【通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的通信。一些Web框架,如Django,TurboGears,web2py,Zope等,可以让程序员轻松地开发和管理复杂的Web程序】
-
操作系统管理、服务器运维的自动化脚本【在很多操作系统里,Python是标准的系统组件。 大多数Linux发行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,可以在终端下直接运行Python。Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本】
-
网络爬虫【Python有大量的HTTP请求处理库和HTML解析库,并且有成熟高效的爬虫框架Scrapy和分布式解决方案scrapy-redis,在爬虫的应用方面非常广泛】
-
科学计算(数据分析)【NumPy、SciPy、Pandas、Matplotlib】
-
桌面软件【PyQt、PySide、wxPython、PyGTK是Python快速开发桌面应用程序的利器】
-
服务器软件(网络软件)【Python对于各种网络协议的支持很完善,因此经常被用于编写服务器软件、网络爬虫。第三方库Twisted支持异步网络编程和多数标准的网络协议(包含客户端和服务器),并且提供了多种工具,被广泛用于编写高性能的服务器软件】
-
游戏【很多游戏使用C++编写图形显示等高性能模块,而使用Python或者Lua编写游戏的逻辑、服务器。相较于Python,Lua的功能更简单、体积更小;而Python则支持更多的特性和数据类型】
4.Windows基本命令
- . 当前路径
- … 上一级路径
- cd change directory,切换工作目录
- cd**…** 退回到上一级目录
- cd**…/…/…** 向上退回三级目录cd/ 回到根目录
- dir 列出当前目录下所有的内容,包括文件和文件夹
- md xxx make directory,创建目录
- rd xxx remove directory,删除目录,注意:只能删除空目录rd /s xxx 交互式删除,输入y才删除rd /s /q xxx 强制删除>
- >重定向符 cd>xxx 创建一个非空文件,其中的内容:当前路径type nul>xxx 创建一个空文件
- copy nul>xxxx 创建一个非空文件,其中的内容:已复制 1个文件
- echo 文本内容>xxxx 创建一个非空文件,其中的内容可以自定义
- del xxx 删除文件
- del /p xxx 交互式删除,输入y才删除
- copy 原路径 目标路径 拷贝文件或者文件夹【相当于我们平时的ctrl + c .ctrl + v】
- move 原路径 目标路径 移动文件或者文件夹【同理:ctrl + x,ctrl + v】
- ren 旧名称 新名称 给文件或者文件夹进行重命名【rename】
- cls 清空控制台(清屏)盘符: 切换盘符,如,d: 表示切换到d盘【linux系统中用的是clear】
5.注释
.注释只是一个解释性文本,程序在执行的过程中会自动忽略,对程序执行的结果没有任何影响
注释分类:
单行注释:以#开头,#右边的所有内容当做说明
多行注释:用""“xxxx”"" 或者’’‘xxxx’’’ 表示,xxx就是需要说明的内容
6.标识符
合法标识符的命名规则:
- 只能由数字,字母和下划线组成
- 不可以是除了下划线之外的其他特殊字符
- 开头不能是数字或者空格
- 不能是Python的关键字,也不能使用系统的函数名
- 严格区分大小写
标识符的命名规范:
-遵守一定的命名规范
- Python官方推荐的命名方式:变量名,函数名和文件名全小写,使用下划线连接,如:stu_name check_qq
- 驼峰命名法:不同的单词之间使用首字母大写的方式进行分隔,又分为大驼峰和小驼峰,比如:stuName就是小驼峰,StuName就是大驼峰,小驼峰常用于变量或者函数的命名,大驼峰常用于类的命名
7.关键字
关键字已经被python官方使用了,所以不允许开发者自己定义和关键字重名的标识符
False None True and as assert break class
continue def del elif else except finally for
from global if import in is lambda nonlocal
not or pass raise return try while with
yield …
8.数据类型
处理不同的数据,需要使用不同的数据类型来进行表示
整型【int】
浮点型【float】
复数【complex,表示形式:a + bj,a是实部,b是虚部】
布尔型:bool,只有True和False
字符串型:str
列表:list
元组:tuple
字典:dict
集合:set
字节:bytes
空值:None
- 2.1定义变量
# 1.变量名 = 值
"""
注意问题:
a.变量名其实就是一个标识符,需要遵循标识符的规则和规范
b.根据需要表示的数据,书写值
c.=是一个赋值运算符,变量名 = 值 表示将值给变量赋值
d.变量的本质其实就是一个容器,其中存储了一个指定的数据
"""
# 需求:定义一个变量,表示一个人的名字,为张三
name = "张三"
print(name)
# 2.获取一个变量的数据类型:type()
print(type(name))
# 3.定义常用的数据类型的变量
# a.数字型
num1 = 10 # int
num2 = 34.6 # float
num3 = 2 + 5j # complex
print(num1,num2,num3)
# b.字符串str
# 字符串的组成:数字,字母和符号,中文
# 注意:字符串的名字尽量不要直接使用str
str1 = "aaa"
string1 = "bbb"
string2 = 'cccc'
s3 = """fahjhg
gahjg
gahjh"""
# \n是一个转义字符,表示换行
s4 = "hello\nfahj\nhfjakh"
print(s3)
print(s4)
# c.布尔型bool
# 注意:一般用于条件判断
b1 = True
b2 = False
# True代表的是1,False代表的是0
print(True + 1)
print(False + 1)
# d.列表list
list1 = [34,45,True,"aaa"]
# e.元组tuple
tuple1 = (34,45,True,"aaa")
# f.字典dict,key:value
dict1 = {"aaa":10,"bbb":20}
print(type(dict1))
# g.集合set
set1 = {45,436,7}
print(type(set1))
# h.字节bytes(必须学习,因为我们将一个字符串类型的给他搞个编码,那就是字节类型的,将一个字节类型的给他搞个解码,他就是字符串类型的)
bytes1 = "fafjh"
print(type(bytes1)) # str
bytes1 = b"fafjh"
print(type(bytes1)) # bytes
# j.空值None
n = None
print(n)
print(type(n)) # NoneType
# 特殊
# a.{}默认表示字典
a = {}
print(type(a))
# b.当元组中只有一个元素的时候,则必须在元素的后面添加逗号,为了消除歧义
t1 = (10) # int
t1 = (10,) #tuple
t2 = ("abc")
print(type(t1))
# 2 + 3 + 4 --->(2 + 3) + 4
# c。通过type查看变量的数据类型,得到的结果是type类型
print(type(0)) # <class 'int'>
print(type(type(0)))
- 2.2变量的使用
- 1.变量:在程序运行的过程中值可以随时发生改变的标识符
num = 10
print(num)
#重新赋值
#a.修改值
num = 20
print(num)
#b.修改值和类型
num = “hello”
print(num)
Python是一种弱类型的语言,当给变量重新赋值时,不但可以修改值,还可以修改类型
如:num = 10 ; num = hello"
#.常量:在程序运行的过程中值不能发生改变的标识符
#常量命名法:所有英文字母大写,不同单词之间使用下划线
#注意:常量命名法只是一个标记,但实际上还是一个变量
#python中没有任何机制阻止你做若任何事,若是看见单词全是大写字母,就当成常量用,不要随意修改
PI = 3.14
print(PI)
#PI = “asdddddsfafdas”
#print(PI)
#3.变量定义的其他写法
#a.定义多个变量,拥有共同的初始值
num1 = num2 = num3 = num4 = 10
#b.定义多个变量,拥有不同的初始值
#注意:变量的个数和数值的个数一定要匹配,否则导致拆包失败
num1,num2,num3 = 34,6,45
#num1,num2,num3 = 34,6 # ValueError: not enough values to unpack拆包 (expected期望 3, got 2)
print(num1,num2,num3)
#【problem】交换两个变量的值
#n1,n2 = 45,100
#print(n1,n2)
#方式一:Python特有的语法
a = 10
b = 20
a,b = b,a
print(a,b)
“”"
工作原理:给变量a和b分别作了重新赋值
“”"
#方式二:变量
a = 10
b = 20
temp = a
a = b
b = temp
print(a,b)
#方法三:数字电路的异或
a = 10
b = 809
print(a^ a ^ b, b^b ^a)
#【problem】
a = 4
b = 6
a,b = b,a
print(a,b)
a,a = 7,9
print(a,b)
结果是:a = 9;
b = 4
#4.变量的命名【标识符】
#规则
“”"
判断下面那些标识符是合法【规则】的
0.age1 合法
1.xiaoming 合法
2.3python 不合法,数字开头
3.name@ 不合法。特殊符号
4.name$ 不合法,特殊符号
“”"
#规范
stu_name = “张三”
stuName = “李四”
#5.变量的意义:变量实际上是一个容器,但是一次只能存储一个数据
#需求:初次:求2 + 9的和
print(2 + 9)
#需求:再次:求5 + 19的和
print(5 + 19)
x = 5
y = 19
print(x + y)`
- 2.3删除变量
使用场景:a.变量的重置 b.用作容器的清空
定义变量:从无到有,变量名 = 值
删除变量:从右到无,del 变量名
定义:变量名 = 值
=的左边表示变量的声明,=的右边表示变量的赋值
# 删除变量
# 一个变量一旦被删除之后,则相当于该变量未被定义
del num
-
2.4内存中的变量
- 【question】定义变量的机制:定义一个变量,相当于在内存中开辟了一份内存空间,用于存储指定的数据
- 变量的本质:其中存储的是数据的地址
- 计算机的内存: 栈:引用【变量名】 堆:实际的数据【对象】
- Python中的内存管理机制
如果内存中的堆空间中的某个数据没有引用指向它,则该数据只能等待系统的垃圾回收机制回收它
该数据占用的内存空间会被释放掉
当程序运行结束之后,该程序中开辟过的变量的空间都会被自动释放
当程序运行的过程中,也可以通过del手动释放某个变量的内存空间
-
2.5变量的类型转换
int(x) :将x转换为整型
str(x):将x转换为字符串
float(x):将x转换为浮点型
bool(x):将x转换为布尔型
ASCII码
ord(x):将x字符转换为编码之后的数字,
chr(x):将数字x转换为编码之后对应的字符
# 1.int(x),x可以是浮点型,布尔型和字符串,特别注意字符串(字符串较难)
print(int(3.57)) # 取整
print(int(True))
# 如果用int()将一个字符串转换为整型,字符串的要求:只能由数字和正负号组成,而且正负号只能出现在字符串的开头
print(int("123"))
# print(int("123a")) # ValueError: invalid literal for int() with base 10: '123a'
# print(int("1.23"))
print(int("+123"))
print(int("-123"))
# print(int("12+3"))
# 2.float(x),x是字符串,要求:只能由数字、小数点和正负号组成,而且正负号只能出现在字符串的开头
print(float("1.23"))
print(float(".123"))
print(float("123."))
# 3.str(x),x可以是任意的数据类型,都可以转换为对应的字符串
list1 = [34,45,6]
print(str(list1)) # str1 = "[34,45,6]"
print(str(True)) # str1 = "True"
# 4.bool(x),x可以是任意的数据类型
"""
假:False 0 0.0 "" [] {} None
"""
print(bool("123"))
print(bool(""))
print(bool(34))
print(bool(0))
print(bool(34.7))
print(bool(0.0))
print(bool([]))
print(bool({}))
print(bool(None))
# 5.chr() 和ord()
"""
character:字符
ordinary:原来的
48--->0
65---->A
97---->a
"""
print(chr(50))
print(ord("b"))
#【question】从控制台输入一个小写字母,经过转换,输出对应的大写字母
# e----》E
ch1 = input("请输入一个小写字母:")
num1 = ord(ch1)
num2 = num1 - 32
ch2 = chr(num2)
print(ch2)
# print(chr(ord(input("请输入一个小写字母:")) - 32))
# 变量命名的注意事项,自定义的变量名尽量不要和系统的内置函数重名,否则会导致系统功能失效
print(str(10))
str = "abc"
# print(str(30)) #TypeError: 'str' object is not callable
- 2.6输入输出
-# 语法:“自定义的格式” % (数据),是一一对应的关系
“”"
占位符
%d:只能匹配整型
%f:只能匹配浮点型
%s:可以匹配任意类型
“”"
# 1.打印一个数据
print(10)
a = 19
print(a)
# 2.打印多个数据
print("a",10,True)
# 3.可以进行拼接
print(4 + 19) # 数学运算
print(True + 9)
print("4" + "19") # 拼接
# print(4 + "19") # TypeError: unsupported operand type(s) for +: 'int' and 'str'
# print("4" + 19) # TypeError: can only concatenate str (not "int") to str
# 4.重复打印
print(4 * 3)
print("4" * 3)
# 5.格式化输出
name = "tom"
age = 10
print("姓名:",name,"年龄:",age)
# 注意1:占位符的个数和数据的个数一定要匹配
print("%d-%s-%f-%d" % (10,23,2.3,48)) #TypeError: not enough arguments参数 for format格式化 string
# 注意2:数据的类型和占位符的类型必须匹配,特别是%d和%f
print("%s-%s-%f-%d" % ("abc",23,2.3,48)) # TypeError: %d format: a number is required, not str
# 注意3:%.nf:n表示保留小数点后n位,同时也会做出四舍五入的操作
# %.nd:n表示数据的宽度,如果不够,则在前面补0
print("%f" % (34.6564774))
print("%.3f" % (34.6565774))
print("%.8d" % (34)) # 时分秒,如:17:29:05
# 注意4:如果占位符只有一个时,后面的()可以省略
name = "tom"
age = 10
print("姓名:%s" % name)
# print("姓名:%s,年龄:%d" % name,age)