Python简介
Python是一种面向对象的脚本语言,自20世纪90年代初诞生至今,已经逐渐被广泛应用于处理系统管理任务、爬虫、web编程、自动化测试、运维等方面。他是有CWI(阿姆斯特丹国家数学和计算机科学研究所)的研究员Guido van Russum开发的一种高级脚本编程语言。
1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承,从中汲取了大量语法,并从系统编程语言Modula-3借鉴了错误处理机制。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提·派森的飞行马戏团》(Monty Python's Flying Circus)。
Python语言的特点
- 简单易学: Python力求一个问题用一种方式解决,是一种代表简单主义思想的语言;在阅读Python代码是,你会有一种阅读英文的感觉,相比于其他编程语言,Python经常使用英文关键词做各种定义。
- 易读易维护: 风格清晰划一、强制缩进
- 速度快: Python 的底层是用 C 语言写的,很多标准库和第三方库也都是用 C 写的,运行速度非常快。
- 免费开源: Python是FLOSS(*/开放源码软件)之一。使用者可以*地发布这个软件的拷贝、阅读它的源代码、对它做改动、把它的一部分用于新的*软件中,这是Python能够从众多编程语言当中脱颖而出的重要原因之一,他的许多程序都来自全国个字学者的无私奉献。
- 可移植性: 由于它的开源本质,Python已经被移植在许多平台上运行使用(基于不同系统的不同特性可能需要经过些许改动)。这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux开发的android平台。
- 可扩展性:如果你想编写一些不愿开放的算法,或者需要加快关键代码的运行速度,那么你可以使用C或者C++完成那部分程序的编写,然后从你的Python程序中调用他们。
- 可嵌入性: 可以把Python嵌入C/C++程序,从而向程序用户提供脚本功能。
- 面向对象: Python是一种面向对象的语言,同事也支持面向过程编程。
- 丰富的库: Python有着庞大的标准库,可以帮你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。这被称作Python的“功能齐全”理念。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等。
Python的数据类型
Python3 中有六个标准的数据类型:
- Number(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
Python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
Number
整数
整数在Python中以int表示。
int_value = 3
print(type(int_value))
输出:<class 'int'>
浮点数
在Python3中,小数类型的即是浮点数,以float
float_value = 3.1415826
print(type(float_value))
输出: <class 'float'>
布尔类型
在Python3中,布尔类型的数据类型分为True、False
true_flag = True # 定义一个名为true_flag的bool值
false_flag = False # 定义一个名为false_flag的bool值
print(type(true_flag)) # 输出true_flag 类型为<class 'bool'>
print(type(false_flag)) # 输出false_flag 类型为<class 'bool'>
复数
复数的概念是吧一个数字分成实部和虚部两个部分,用数字表示成a+bi的形式,其中a和b是实数,分别称为复数的实部和虚部,i是虚数单位,且满足i^2=-1。在Python中,通常以j作为虚数单位
complex_value = 3+4j # 定义一个名为complex_value复数
print(type(complex_value)) # 输出complex_value的类型为 <class 'complex'>
字符串
字符串是有字符所组成的一种序列。换句话说,字符串是哟个包含字符对象的有序集合,按从左到右的顺序排列,并按照相对位置进行访问。
name = "Chris Paul" # 定义一个名为name的字符串
print(type(name)) # 输出name的类型为<class 'str'>
print(len(name)) # 获取字符串name的长度 10
print(name[0]) # 获取name的索引为0的字符: C
print(name[2:5]) # 获取字符串name 索引为2至4的字符 ris
print(name.index("P")) # 获取P在字符串下的索引值,如果不存在会抛异常
print(name.split()) # 将字符串name以空格进行拆分,输出列表 ['Chris', 'Paul']
print(name.replace("Paul","Bosh")) # 将字符串中的Paul替换成Bosh 输出:Chris Bosh
print([char for char in name]) # 将字符串name进行迭代,将每个字符作为元素填入列表: ['C', 'h', 'r', 'i', 's', ' ', 'P', 'a', 'u', 'l']
print(" ".join(["Chris","Paul"])) # 将列表中的元素以" "作为连接符进行拼接 Chris Paul
列表
列表是一种具备容器功能的类型,其中可以放入任何类型的对象,因此可以视为Python语言最通用的序列。由于列表也是序列,因此索引的方式同字符串,亦是通过偏移量对列表元素进行访问。
players = ["Chris Paul", 'Kobe Bryant', "Yao Ming"] # 定义名为players的篮球运动员列表
print(type(players)) # 输出players的数据类型 <class 'list'>
print(len(players)) # 输出列表players的长度 3
print(players[2]) # 输出索引为2的值 Yao Ming 如果索引值超过列表长度-1时,会抛异常
players[2]="Lebron James" # 修改索引值为2的元素的值为 Lebron James 如果索引值超过列表长度会抛异常
players.append("Stephen Curry") # 往列表players添加元素 Stephen Curry
players.insert(0,"Stephen Nash") # 往列表players的索引为0的位置添加元素Stephen Nash
players.pop(1) # 删除列表中索引为1的元素 如果不填就默认最后一个 超过列表长度会抛异常
players.remove("Yao Ming") # 删除列表中Yao Ming的元素 如果元素不存在会抛异常
print('Yao Ming' in players) # 判断YaoMing是否在列表中 返回一个布尔值 True或者False
元组
元组(tuple)与列表类似,都能存储任何类型的数据,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
在元素不可变这一特性上,元组跟字符串很像,然而字符串中的元素类型都只能是字符型,字符串不能存储字符型以外的数据,概括起来,元组具有可以存储不同类型的数据和元组内的元素是不可变的这两大特点。
mamba = ("Kobe Bryant", "1978年8月23日","2020年1月26日") # 定义一个名为mamba的元组
print(type(mamba)) # 输出元组mamba的数据类型 <class 'tuple'>
集合
集合既不是序列也不是映射,集合用来记录某些无顺序关旭的不可变对象是否存在于其中,集合中不存在重复的元素。 基本功能是进行成员关系测试和删除重复元素。
kobe = set('kobe fans')
james = set('james fans')
print(type(kobe)) # <class 'set'>
print(kobe - james) # a 和 b 的差集 {'b', 'o', 'k'}
print(kobe | james) # a 和 b 的并集 {'e', 'k', 'f', 'a', 'n', 's', 'm', 'o', 'b', ' ', 'j'}
print(kobe & james) # a 和 b 的交集 {'e', 'f', 'a', 'n', 's', ' '}
print(kobe ^ james) # a 和 b 中不同时存在的元素 {'k', 'b', 'o', 'm', 'j'}
字典
列表、元组都是序列类型的数据结构,所谓序列指的是其中的对象从0开始依序编号,有先后关系。现在介绍的字典是一种映射(mapping)类型的数据结构,其没有从左到右的顺序关系,也就是字典是无序的,所以不适用位置偏移量来当做索引进行取值。字典是以键值对的形式进行存储的,通过键便可以查找相对应的值。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
kobe = {"name":"Kobe Bryant","birth":"1978年8月23日", "sex":"male"} # 定义一个名为kobe的字典
print(type(kobe)) # 输出kobe的类型为 <class 'dict'>
kobe.get("name") # 通过键获取相对应的值 如果不存在,返回None
kobe["name"] # 通过键获取相对应的值 如果不存在,抛出异常
kobe["name"] = "Kobe Bean Bryant" # 如果键存在,则修改值 如果键不存在,则增加该键值对
kobe.pop("name") # 根据键删除键值对 如果键不存在,抛出异常
kobe.clear() # 清空键值对
kobe.keys() # 返回所有键的迭代对象 dict_keys(['name', 'birth', 'sex'])
kobe.values() # 返回所有值的迭代对象 dict_values(['Kobe Bean Bryant', '1978年8月23日', 'male'])
kobe.items() # 返回键值组成的元组的迭代对象 dict_items([('name', 'Kobe Bean Bryant'), ('birth', '1978年8月23日'), ('sex', 'male')])
print("name" in kobe) # 判断是否存在该键