交流群:942277506,问题答案:董长春
1 Python简介
Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。
1.1 起源
Python的作者是著名的“龟叔”Guido van Rossum,他希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样,可以轻松的编程。龟叔从ABC语言看到希望,ABC语言是由荷兰的数学和计算机研究所开发的。龟叔也参与到ABC语言的开发。由于一系列原因ABC并没有快速传播使用。因此,龟叔开始写Python语言。
1.2 诞生
1989年,龟叔为了打发无聊的圣诞节,开始编写Python语言。1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。特点:“优雅 ”,“明确”,“简单”
1)官 网:https://www.python.org/
2)中文社区:http://www.pythontab.com/
1.3优缺点
优点:简单易学,代码简洁,脚本可拓展,可嵌入,库的支持非常丰富
缺点:运行速度慢,是c和java的以上的封装,代码不能加密(没有编译过程)
2 环境搭建与测试
解释器:Python3.7.x(最新3.8.x)
IDE:jupyter、PyCharm
工具包:Anaconda(内置python,jupyter)
两种环境搭建方式:
1.Python+pip(原生)
2.Anaconda(内容更加丰富,支持多种工具)
Anaconda是什么?
Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存、切换以及各种第三方包安装问题。Anaconda利用工具/命令conda来进行package和environment的管理,并且已经包含了Python和相关的配套工具。
2.1 推荐环境:Anaconda+PyCharm
2.2 Anaconda下载安装
官网:https://www.anaconda.com/
选择个人开源版本下载安装包
下载安装包后,指定安装目录,凡以下没有特别说明的步骤一路下一步即可
2.3 PyCharm下载安装
官网https://www.jetbrains.com/pycharm/download/#section=windows下载社区版本即可
下载安装包后,指定安装目录,凡以下没有特别说明的步骤一路下一步即可
至此安装完成.
2.4 PyCharm的使用
安装完成后第一次打开会一路下一步直到
默认没有eclipse的keymap可以从plugins中搜索下载
2.5 第一个python程序
#!/home/app/python3.7.6
# -*- coding: utf-8 -*-
print("Hello World!!!")
注意:其中前两行内容为shebang(释伴) 在Unix为内核的系统中,必须要有shebang才能正确识别文件类型.第一行为解释器位置的声明,第二行为字符编码的声明,在windows系统中,文件都以后缀名识别,并且有默认应用和默认字符集的设置,所以在windows中这两行内容不生效.
3 基础语法
3.1 注释
1、单行注释
以井号(#)开头,右边的所有内容当做说明
2、多行注释
以三对单引号或者三对双引号将注释包含起来
# 这是一个单行注释
"""
这是一个多行注释
"""
'''
这也是一个多行注释,但是一般不做为第一个注释来使用
'''
print("Hello World!!!")
3.2 缩进
Python的语法比较简单,采用缩进的方式(严格)。
'''
缩进:在python中,没有行位结束符,但同时对格式的要求也就比较严
格,代码必须以缩进的方式维护格式,同时在运算符的前后应该加上空格
'''
a = 100
if a > 100:
print("大于100")
elif a == 100:
print("等于100")
else:
print("小于100")
注意:
由于Python采用缩进的语法,在你复制,粘贴语句时,一定要注意,重新检查当前代码的缩进格式。
在Python中,对大小写十分敏感,如果大小写错误,会报错。
3.3 变量
变量指存放数据的容器(所有python支持的格式)
3.4 标识符
标识符是自己定义的,如变量名 、函数名等
标识符命名规则
1、只能包含字母、数字和下划线。变量名可以以字母或者下划线开头。但是不能以数字开头。
2、不能包含空格,但可以使用下划线来分隔其中的单词。
3、不能使用Python中的关键字作为变量名
4、建议使用驼峰命名法,驼峰式命名分为大驼峰(UserName)。和小驼峰(userName)。
常见关键字不可以作为标识符
import keyword
print(keyword.kwlist)
4 数据类型
可以用以下两种方式判断数据的类型
type()不会认为子类是一种父类类型。
isinstance()会认为子类是一种父类类型。
4.1 Number(不可变)
4.1.1 整数int
Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样。
"""
int
"""
i = 100
print(type(i))
4.1.2 浮点型float
浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的。
"""
float
"""
f = 1.1
print(type(f))
4.1.3 复数complex
一个实数和一个虚数的组合构成一个复数。
"""
complex
"""
c = 2 + 6j
print(type(c))
4.1.4 布尔bool
bool值是特殊的整型,取值范围只有两个值,也就是True和False。
"""
bool
"""
b = True
print(type(b))
print(isinstance(b, bool))
4.1.5 算数运算符
"""
算数运算符
"""
i, j = 10, 3
print(i + j)
print(i - j)
print(i * j)
print(i / j)
print(i % j)
print(i // j)
print(i ** j)
4.1.6 赋值运算符
"""
赋值运算符
"""
num, i = 5, 2
num += i
print(num)
num, i = 5, 2
num -= i
print(num)
num, i = 5, 2
num *= i
print(num)
num, i = 5, 2
num /= i
print(num)
num, i = 5, 2
num %= i
print(num)
num, i = 5, 2
num //= i
print(num)
num, i = 5, 2
num **= i
print(num)
4.1.7 比较运算符
定义a = 1, b = 2
4.1.8 逻辑运算符
4.1.9 位运算符
定义a = 60, b = 13
"""
位运算符
"""
a, b = 4, 2
'''
0000 0100 4
0000 0010 2
0000 0000 0
'''
print(a & b)
'''
0000 0100 4
0001 0000 16
'''
print(a << b)
4.2 String(不可变)
字符串就是一系列任意文本。Python中的字符串用单引号或者双引号括起来,同时可以使用反斜杠(\)转义特殊字符。
单引号(’’)和双引号(“”)本身只是一种表示方式,不是字符串的一部分,因此,字符串’hello’只有h,e,l,l,o这五个字符。如果’本身也是字符的话,那么就可以用””括起来,比如”I’m OK” 当中包含了一个 ’ 。如果字符串内部包含 ’ 或者 ” ,但是又想当成普通字符串处理怎么办?这个时候就要用转义字符(\)来标识。
4.2.1 字符串的声明
"""
字符串的声明:单双引号都可以声明字符串,互相嵌套不需要转义,同符号嵌套需要使用'\'转义,
当希望字符串中的'\'只作为普通字符展示时,在字符串前加'r'
"""
s0 = 'Hello'
s1 = "World"
s2 = '我说了:"你好!",I\'m cc'
print(s1+s2)
s3 = r"do\ngcc"
print(s3)
注意,Python 没有单独的字符类型,一个字符就是长度为1的字符串。
4.2.2 字符串的下标
"""
字符串的下标:正数从0开始,倒数从-1开始
"""
s3 = "abcdef"
print(s3[2])
print(s3[-2])
4.2.3 字符串的截取
变量[头下标:尾下标:步长]
"""
字符串的截取:s4[头下标:尾下标:步长] 对于[头下标:尾下标]遵循左闭右开的原则
"""
s4 = "abcdef"
print(s4[1:5]) # bcde
print(s4[1:5:2]) # bd
print(s4[-4:-1]) # cde
print(s4[-1:-4:-1]) # fed
print(s4[::-1]) # fedcba
4.2.4 字符串的拼接
加号 + 是字符串的连接符, 星号 * 表示复制当前字符串,紧跟的数字为复制的次数。
"""
字符串的拼接:'+'可以将两个字符串进行拼接,'*'用来多次复制某个字符串
"""
s6 = "Hello"
print(s6+"Python") # HelloPython
print(s6*3+"Python"*2) # HelloHelloHelloPythonPython
4.2.5 格式化输出
"""
格式化输出
"""
name = "董长春"
age = 18
address = "张家口"
wind = 5.5
print("大家好,我叫" + name + ",今年" + str(age) + "岁了,来自" + address + "一个常年刮着" + str(wind) + "级大风的地方")
print("大家好,我叫%s,今年%d岁了,来自%s一个常年刮着%.1f级大风的地方" % (name, age, address, wind))
4.2.6 字符串的常用函数
"""
字符串中的常用函数
"""
# find:查找字符串内是否包含指定内容,如果是,返回位置,否,返回-1
s7 = input("请输入一个字符串:")
print(s7.find('dong'))
# index:查找字符串内是否包含指定内容,如果是,返回位置,否,报错
s7 = "Hi, my name is dongcc"
# print(s7.index('q'))
# 略
4.3 List(可变)
List(列表) 是 Python 中使用最频繁的数据类型。
列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套)。
列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
嵌套列表以多级索引进行访问.
"""
列表的定义
"""
my_list = [123, "hello", "cc", [123, 456]]
"""
列表的访问
"""
print(my_list[0]) # 123
print(my_list[3][1]) # 456
4.3.1 列表的截取
列表截取的语法格式如下:
变量[头下标:尾下标:步长]
索引值以 0 为开始值,-1 为从末尾的开始位置。
"""
列表的截取:与字符串截取一样list[头下标:尾下标:步长]
"""
my_list = [1, 2, 3, 4, 5, 6]
print(my_list[2:5:2])
4.3.2 列表元素的’增删改查’
4.3.2.1 增加元素
"""
增加元素
"""
# 列表后追加
my_list = ["hadoop", "flink", "spark"]
my_list.append('python')
print(my_list) # ['hadoop', 'flink', 'spark', 'python']
# 列表中指定位置插入
my_list = ["hadoop", "flink", "spark"]
my_list.insert(2, 'tensoflow')
print(my_list) # ['hadoop', 'flink', 'tensoflow', 'spark']
4.3.2.2 删除元素
"""
删除元素
"""
# pop():用于移出列表中的一个元素(默认是最后一个元素),可以指定元素索引,并且返回该元素的值。
my_list = ["hadoop", "flink", "spark"]
print(my_list.pop())
print(my_list) # ['hadoop', 'flink'] 默认删除最后一个元素
my_list.pop(0)
print(my_list) # ['flink'] 也可以指定下标删除
print('='*50)
# del:通过列表索引删除某个元素,元素一旦被删除之后就再无法访问,如果不指定索引将会删除整个list
my_list = ["hadoop", "flink", "spark"]
del my_list[0]
print(my_list) # ['flink', 'spark']
del my_list # 整个列表被删除
# print(my_list) # 报错:NameError: name 'my_list' is not defined
print('='*50)
# remove():通过元素值删除list中与之匹配的第一个元素,如果没有这个元素则会报错
my_list = ["hadoop", "flink", "spark", "hadoop"]
my_list.remove("hadoop")
print(my_list) # ['flink', 'spark', 'hadoop']
4.3.2.3 修改元素
修改元素的方式非常简单,就是拿到某个元素后重新赋值的过程.
"""
修改元素:修改列表元素的语法和访问列表元素的语法类似,指定列表名和要修改元素的索引,再指定新值
"""
my_list = ["hadoop", "flink", "spark"]
my_list[2] = "scala"
print(my_list) # ['hadoop', 'flink', 'scala']
4.3.2.4 查找元素
这里的查找是指查看list中是否存在指定的元素.
"""
查找元素:查找指定的元素是否存在,包括两种:in 和 not in
"""
my_list = ["hadoop", "flink", "spark"]
print("hadoop" in my_list) # True
print("hadoop" not in my_list) # False
4.3.2.5 其他操作
加号 + 是列表连接运算符,星号 * 是重复操作。如下实例:
"""
其他操作
"""
list01 = [1, 2, 3, 4]
list02 = [5, 6]
print(list01 + list02) # [1, 2, 3, 4, 5, 6]
print(list01 * 2) # [1, 2, 3, 4, 1, 2, 3, 4]
4.3.3 列表的常用函数
"""
列表常用函数
"""
my_list = ["hadoop", "flink", "spark", "flink"]
ext_list = ["scala", "kafka"]
print(len(my_list)) # 4
print(max(my_list)) # spark
print(min(my_list)) # flink
print(my_list.count("flink"))
my_list.extend(ext_list)
print(my_list) # ['hadoop', 'flink', 'spark', 'flink', 'scala', 'kafka']
4.4 Tuple(不可变)
元组(tuple)与列表类似,不同之处在于元组的元素不能修改,所以不能新增修改或者删除单个元素。元组写在小括号 () 里,元素之间用逗号隔开。
元组中的元素类型也可以不相同.
4.4.1 元组的声明
"""
创建元组:以小括号的方式定义,元素类型任意
"""
in_list = [1, 2, 3]
my_tup = (1, 2, 3, 4, "tuple", in_list)
print(my_tup)
4.4.2 元组的访问
"""
元组的访问:元组的访问与String,list相同,通过下标的方式来进行元素的读取
"""
my_tup = (1, 2, 3, 4, "tuple", ("a", "b", "c"))
print(my_tup[5][1]) # b
4.4.3 元组的截取
"""
元组的截取:元组的截取与String,list相同,通过[头下标:尾下标:步长]操作
"""
my_tup = (1, 2, 3,