Python
简介
应用领域
Python 有着非广泛的应用,几乎所有大中型互联网公司都在使用 Python,例如国外的 Google、Youtube、Dropbox,国内的百度、新浪、搜狐、腾讯、阿里、网易、淘宝、知乎、豆瓣、汽车之家、美团等等,Python 帮助它们完成了各种各样的任务。
概括起来,Python 的应用领域主要有如下几个:
-
Web应用开发
-
自动化运维
-
人工智能领域
-
网路爬虫
-
科学计算
-
游戏开发
Python前景
学习Python技术,可以做Python开发工程师、Python高级工程师、Web网站开发工程师、Python自动化测试、Linux运维工程师、Python游戏开发工程师、Python技术经理、Python开发实习等职业选择。
Python在数据分析、后端开发、人工智能、运维、全栈开发等多方面都具有得天独厚的优势。与其他语言相比,Python无论是在就业薪水方面,还是在市场岗位需求方面,都是当之无愧的黑马。
Python安装
打开CMD,输入命令查看Python版本:
python -V
安装配置PyCharm工具,具体请见资料pycharm-professional-2021.1.1.exe
变量和数据类型
变量
-
变量名只能包含字母、数字和下划线。变量名可以字母或下划线打头,但不能以数字打头,例如:可将变量命名为message_1,但不能将其命名为1_message。
-
变量名不能包含空格,但可使用下划线来分隔其中的单词。例如:变量名greeting_message 可行,但变量名greeting message会引发错误。
-
不要将Python关键字和函数名用作变量名,即不要使用Python保留用于特殊用途的单词
-
变量名应既简短又具有描述性。例如:name比n好,student_name比s_n好,name_length 比length_of_persons_name好。
就目前而言,应使用小写的Python变量名。在变量名中使用大写字母虽然不会导致错误,但避免使用大写字母是个不错的主意。
注释
-
#行注释
# 这是Python中的行注释
-
三单和三双块注释
''' 这是Python中三个单引号的块注释 ''' """ 这是Python中三个双引号的块注释 """
数据类型
Python是一门动态的(dynamic)且强类型(strong)语言。
动态/静态
-
在静态类型语言(statically typed languages)中,类型检查发生在编译阶段(compile time)
-
在动态类型语言(dynamically typed languages)中,类型检查发生在运行阶段(run time)
-
静态类型(static): 所有的变量类型必须被显示地声明,因为这些信息在编译阶段就被需要。
-
动态(Dynamic): 显示声明不被要求,因为类型赋值发生在运行阶段。
强类型/弱类型
-
在强类型中,不管在编译时还是运行时,一旦某个类型赋值给某个变量,它会持有这个类型,并且不能同其他类型在计算某个表达式时混合计算。
-
在弱类型中,它是很容易与其他类型混合计算的。
Java中的数据类型:String int/short/long/byte/double/float/boolean/char Python中的数据类型:str/int/float/bool
# python:是一门动态的强类型语言 a = "str" b = 1.0 # java:是一门静态的强类型语言 int i =1 double d=2.0 # javascript:是一门动态的弱类型语言,运行时识别数据类型 let a=1; let b="str";
字符串(str)
在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号。
# 单引号和双引号 temp = 'hello python' temp = "hello python" print(temp) temp = 'I say "hello world"' print(temp) # 转义符处理 temp="I say \"hello world\"" print(temp) # 通过+拼接字符串 print(temp+"...") # 使用制表符\t和换行符\n print("I say \thello \nworld")
整数(int)
在Python中,可对整数执行加(+)减(-)乘(*)除(/)运算。
# 加(+)减(-)乘(*)除(/)运算 count = 8 print(count+1) print(count-1) print(count/2) print(count*2) # 使用两个乘号表示乘方运算 print(count ** 2) # 相当于count * count # 符号*打印输出30次 print("*"*30)
浮点型(float)
Python将带小数点的数字都称为浮点数。
salary=3000 print(salary);
不同数据类型与str拼接,需要进行类型转换处理:
print("我的工资是:"+str(salary)) # print('1'+3) X # print(int('1')+3) √ # print('1'+str(3)) √
在字符串中使用整数时,需要显式地指出将这个整数用作字符串。str()
浮点型的缺陷:
a = 0.1 b = 0.2 print(b-a) # 0.1 print(a+b) # 0.30000000000000004
温馨提示:计算机系统底层采用二级制,而整数(1,2,3,4等)都能完美的转换成二进制,但是小数(浮点数)有可能变成无限二进制(精度的丢失问题)
所以说,只要是float类型的数据相加,无论在任何语言、任何数据库、任何中间件中进行加法(减法乘除法)运算,得到的数据,都不会精确。
解决方案:
-
数据库中使用decimal类型(字符小数,例如:'1.1111'),在Java中使用BigDecimal进行计算操作;
-
以最小单位存储,例如:1.236(一块二毛三分六厘),1236(以最小单位厘来存储);
布尔(bool)
Python提供了 bool 类型来表示真(对)或假(错),比如常见的5 > 3
比较算式,这个是正确的,在程序世界里称之为真(对),Python 使用 True 来代表;再比如4 > 20
比较算式,这个是错误的,在程序世界里称之为假(错),Python 使用 False 来代表。
配合运算符:
>=,<=,==,!=,and,or
一起使用。
列表
需要明确的是,Python中没有数组,但是加入了更加强大的列表。如果把数组看做是一个集装箱,那么 Python 的列表就是一个工厂的仓库。
从形式上看,列表会将所有元素都放在一对中括号[ ]
里面,相邻元素之间用逗号,
分隔,如下所示:
nums=[0,1,2,3,4,5,6,7,8,9]
-
常规操作
# 1) 查看names的大小 print(len(nums)) # 2) 取值,从头到尾取值,索引从0开始 print(nums[0]) # 3) 取值,从尾到头取值,索引从-1开始 print(nums[-1]) # 4) 赋值 nums[0]="zhaoliu" print(nums) nums[-2]="wahaha" print(nums)
-
追加append:在列表末尾添加元素
nums.append(100) print(nums)
-
插入insert:在列表中插入元素
nums.insert(0,666) print(nums) nums.insert(-2,777) print(nums)
-
删除del
del nums[0] print(nums)
-
删除(出栈方式)pop:出栈|根据索引删除
# 默认从最后一个开始出栈 print(nums.pop()) # 通过指定索引下表出栈 print(nums.pop(0)) print(nums)
-
删除remove:根据元素删除
# remove删除 nums.remove(5) print(nums) # 判断元素是否存在 print(5 in nums) print(5 not in nums)
方法remove()只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。
-
排序
# 临时性排序 print(sorted(nums)) # 永久性排序 nums.sort() print(nums)
-
反转
nums.reverse() print(nums)
-
切片
start和stop的正值代表列表下标,负值代表列表从右往左数起,倒数第几个数据。方向由step确定,step为正时,从左往右切片,step为负时,从右往左切片;start和stop的空值分别代表列表的头尾的最后一个数据,至于start和stop空值的时候代表的是列;表的头还是尾,由step的正负值决定,即由step确定列表切片的方向后决定。
# start:起始下标 # stop:停止下标 # step:步长 # start和stop的正值代表列表下标 print(nums[::2]) print(nums[1::2]) print(nums[0:4:2]) # start和stop负值代表列表从右往左数起,不包含结束位置 print(nums[-1:-3:-1]) # 单独一个冒号,代表从头取到尾,步长默认为1 print(nums[:]) # 单独两个冒号一样代表从头取到尾,步长默认为1 print(nums[::]) # 两个冒号后面是步长。步长为1,从左到右;步长为-1,从右到左 print(nums[::1]) print(nums[::-1]) # 赋值操作 # nums[0:4]=[] nums[0:4]=[1,2] print(nums)
元组
元组(tuple)是Python中另一个重要的序列结构,和列表类似,元组也是由一系列按特定顺序排序的元素组成。
元组和列表(list)的不同之处在于:
-
列表的元素是可以更改的,包括修改元素值,删除和插入元素,所以列表是可变序列;
-
而元组一旦被创建,它的元素就不可更改了,所以元组是不可变序列。
元组也可以看做是不可变的列表,通常情况下,元组用于保存无需修改的内容。
从形式上看,元组的所有元素都放在一对小括号( )
中,相邻元素之间用逗号,
分隔,如下所示:
nums=(0,1,2) a,b,c=nums print(a) print(b) print(c) print(len(nums)) print(nums) # tuple类型一旦初始化就不能修改 # nums[0]=5 # print(nums)
集合
Python中的集合,和数学中的集合概念一样,用来保存不重复的元素,即集合中的元素都是唯一的,互不相同。
从形式上看,和字典类似,Python 集合会将所有元素放在一对大括号 {} 中,相邻元素之间用“,”分隔,如下所示:
# 创建一个空的set集合 # cities = set() # 使用{}创建带有数据的set集合且不能重复 cities = {'hunan', 'shanghai', 'beijing','hunan'} print(cities) # 出栈,随机 print(cities.pop()) # 指定删除,remove删除不存在的元素则报错 # cities.remove("hunan") # 判断元素是否存在 if "hunan" in cities: cities.remove("hunan") # discard删除不存在的元素不报错 cities.discard("beijing") # clear代表清除 cities.clear() print(cities) # 集合运算 a = {1, 2, 3, 4} b = {3, 4, 5, 6} # a-b的差集 print('a-b的差集:'+str(a - b)) # b-a的差集 print('b-a的差集:'+str(b - a)) # a和b的并集 print('a | b的并集:'+str(a | b)) # a和b的交集 print('a & b的交集:'+str(a & b)) # a和b的对称差集 print('a ^ b的对称差集:'+str(a ^ b))
字典
Python字典(dict)是一种无序的、可变的序列,它的元素以“键值对(key-value)”的形式存储。相对地,列表(list)和元组(tuple)都是有序的序列,它们的元素在底层是挨着存放的。
在Python中,字典用放在花括号{}中的一系列键—值对表示。(与JSON类似)
person={ "name":"张三", "age":21, "salary":3000 } print(person["name"]) print(person["age"]) print(person["salary"]) person["score"]=90 print(person)