前言

由于AI的发展,包括Python集成了很多计算库,所以淡入了人们的视野,成为一个极力追捧的语言。

首先概括下Python中文含义是蟒蛇,它是一个胶水语言和一个脚本语言,胶水的意思是能和多种语言集成,脚本的意思是没有强制类型,直接解释执行,和PHP类似。

下面是对Python的一些基础语法介绍。

安装教程这里就不说了,大家自行百度,小编这里用的是PyCharm开发。

现在主流的就是Python3.X,所以下面讲解的3.X。2.X不建议学了,因为慢慢就被取代了。

下面直接贴代码和运行结果:

第一部分:【基本】

# 打印hello world
print("hello world")
'''
字符类型
'''
# 整形
print("---整形---")
a = 10
print(a)
# 浮点型
print("---浮点型---")
b = 10.1
print(b)
# 字符串
print("---字符串---")
c = "hello string"
print(c)
# 布尔值
print("---布尔值---")
d = True
print(d)
# 空值
print("---空值---")
e = None
d = 12
print("d的类型是", type(d))
# 打印关键字
print("---打印关键字---")
import keyword print(keyword.kwlist)
# 格式化输出
print("---格式化输出---")
'''
%s代表字符串,%d代表int类型,%f代表浮点型
'''
print("我叫%s,我的年龄是%d,我今年挣了%f¥" % ("一明", 18, 0.01)) # 打印输入语句
# print("请输入内容:")
# str1=input()
# print(str1) # 赋值运算符
print("---赋值运算符---")
'''
*=
%=
+=
-=
PS:python没有i++,--i等操作
'''
a += 1
print(a) # 比较关系
'''
==
!=
>
<
>=
<=
'''
# 逻辑判断
print("---逻辑判断---")
if a >= 18:
print("我是成年人了")
else:
print("我还未成年")
if d:
print("对,你说的都对") # print("给你一次成人的机会:")
# a = input()
# a = int(a)
# if a >= 18:
# print("我是成年人了")
# else:
# print("我还未成年")
# 嵌套循环
print("---嵌套循环---")
if a >= 18:
if a < 30:
print("我还是青少年")
else:
print("我已经是而立之年")
else:
print("我还未成年") # while循环
print("---while循环---")
i = 0
j = 0
while i < 6:
j = 0
while (j <= i):
print("*", end=" ")
j += 1
print("\n")
i += 1
# for循环
print("---for循环---")
'''
for 变量 in 一个列表或者一个字符串
'''
for i in "hello":
print(i) # break和continue可以提前退出循环
print("---break和continue可以提前退出循环---")
i = 0
while i < 10:
print(i, end=" ")
i += 1
if i == 6:
break
# 下标
print("---下标---")
name = "YiMing"
print(name[0])
print(name[-1]) # 拿倒数第一个元素
# 切片
'''
切片采用的是左闭右开的类型,及从"起始"位开始到"结束"位的前一位结束(不包括结束位本身)
'''
print("---切片---")
str2 = "abcdef"
print(str2[1:5]) # 打印下标1至下标4
print(str2[1:]) # 打印下标1至结尾
print(str2[:5]) # 打印下标0至下标4
print(str2[1:-1]) # 打印下标1至到数第二位 # 字符串常见操作
print("--字符串常见操作---")
str3 = " Hello YiMing,What are you doing?"
print(str3.count("Hello")) # 计算单词次数
print(len(str3)) # 计算字符串长度
print(str3.find("q", 0, len(str3))) # 查找指定字符出现的位置 find(字符,开始位置,结束位置)
print(str3.index("H", 0, len(str3))) # 这个也是查询位置,和上面的区别是,find查询不出来,返回-1,indx查找不到不返回任何值
list2 = str3.split(" ") # 分割字符串
for s in list2:
print(s)
str3 = str3.replace("Hello", "Hi", str3.count("Hello")) # 替换字符串。 还有第三个参数,是用来指定替换多少个的
print(str3)
str3 = str3.title()
print(str3) # 将首字母全部转换为大写 str4 = "gogogo"
str4 = str4.capitalize() # 将字符串首字母转换为大写
print(str4)
print(str4.startswith("go")) # 检查首字母是否以go开头 (区分大小写)
print(str4.endswith("go")) # 检查首字母是否以go结束
print(str4.lower()) # 将所有字母转换为小写
print(str4.upper()) # 将所有字母转换为大写
str4 = str4.ljust(40)
print(str4.ljust(50)) # 左对单词长度为40。 不足的在单词后面用空字符补齐
print("长度", len(str4))
print(str4.rjust(50)) # 右对齐长度为40,不足的在单词前面用空字符补齐
print(str4.center(50)) # 居中对齐,不足的在两边补齐
print("删除左边空白", str4.lstrip())
print("删除右边空白", str4.rstrip())
str5 = "What are you doing"
print("从左边开始查找:", str5.find("e", 0, len(str5))) # 这个是从左边开始查找单词位置
print("从右边开始查找:", str5.rfind("e", 0, len(str5))) # 这个从右边开始查找,但是和左边开始查找结果一样
str6 = "Hi\n YiMing"
str7 = str6.splitlines()
for s7 in str7:
print(s7) str8 = "我是 word"
print(str8.isalpha()) # 判断是否全是字母
str9 = "12"
print(str9.isdigit()) # 判断是否全是数字
print("所有字符都是字母或者数字:", str9.isalnum()) # 所有字符都是字母或者数字则返回True
print(str8.isspace()) # str8中只包含空格,则返回Ture,否则返回False
print(str8.join(str9)) # 将str8中的每个元素插入到str9里面 # 列表
print("---列表---")
list1 = ["张三", 11, "李四", "赵六"]
print(len(list1)) print(list1[0])
list2 = ["繁星"]
list1.extend(list2) # 另一集合元素添加到list1中
print(len(list1))
list1[0] = "一明" # 替换下标0的张三为一明
if "张三" in list1: # 使用in , not in判断某元素是否存在
print("存在")
else:
print("不存在") del list1[0] # 根据下标删除元素
print(list1[0])
list1.remove(11) # 删除指定元素
print(list1[0])
print("打印最后一个元素", list1[len(list1) - 1]) # 打印最后一个元素
print(list1.pop()) # 移除最后一个元素
print("打印最后一个元素", list1[len(list1) - 1]) # 打印最后一个元素 list3 = [1, 4, 5, 3]
list3.sort() # 从小到大排序
print("从小到大排序", list3)
list3.reverse() # 从大到小排序
print("从大到小排序", list3) # 元组
print("---元组---")
'''
元组和列表类似,不同之处 元组不能修改 。元组用(小括号),列表用[中括号]
'''
tup1 = (11, 2, 43, 5)
print(tup1[0])
list4 = [88, 99]
tup2 = (11, list4)
print(tup2[1])
list4.append(44)
print(tup2[1]) # 字典
print("---字典---")
'''
字典用{花括号}表示
'''
dic1 = {"name": "张三", "age": 33}
print(dic1["name"])
print(dic1.get("name")) # 如果不确定是否存在,可以用get获取避免报错
print(dic1.get("name1", "无名氏")) # 如果不存在的话,返回默认值 "无名氏"
dic1["name"] = "李四" # 修改name
print(dic1["name"])
dic1["gender"] = 1 # 增加元素
print(dic1["gender"]) # 一些常见操作
print("字典长度为:", len(dic1))
print("字典的所有值为:", dic1.values())
# 遍历字典
print("遍历所有key")
for item in dic1.keys():
print(item)
print("遍历所有value")
for item in dic1.values():
print(item)
print("遍历所有key,value")
for key, value in dic1.items():
print("key=", key, "value=", value)
print("遍历所有item")
for item in dic1.items():
print(item) # 可变类型,不可变类型
print("---可变类型,不可变类型---")
'''
可变类型:值可以改变
可变类型有:list,dict 不可变类型:值不可以改变
我们看到有一些字符串,通过某些方法打印的值改变了,其实它是产生了一个新的变量,并把值赋值给新变量。
不可变类型有:string,long,bool,tuple
''' # Python的函数
print("---Python的函数---") def printInfo():
print("人生苦短,我用Python") printInfo() def addNum(a, b): # 带参数函数
c = a + b
print(c) addNum(1, 2) # 参数默认值设置
def fun1(a, b=10): # 如果b没有设置参数,则使用默认值10进行运算
print(a + b) fun1(1)
fun1(1, 3) # 设置不定长参数
print("设置不定长参数:") def fun2(a, *b, **c): # *接收的是不定长参数,**接收的是 key=value 形式参数
print(a)
print(b)
print(c) fun2(1, 2, 3, 4, age1=11, age2=22) print("华丽分割线————")
tup3 = (6, 7, 8)
dic2 = {"num1": 1, "num2": 2}
fun2(1, *tup3, **dic2) # 函数返回值
print("返回值函数") def fun3(x, y):
return x * y result = fun3(4, 7)
print(result) # 利用元组返回多个值
def fun4(x, y):
addResult = x + y
divResult = x // y # 整除
return addResult, divResult addRec, divRec = fun4(8, 5)
print("addRec:", addRec)
print("divRec:", divRec) # 方法内部修改全局变量方法 (在变量前面声明一个global)
'''
在函数中修改全局变量:
如果变量是可变类型,则可以随意修改。
如果是不可变类型,则不能修改指向。除非加上global。
下面是针对不可变类型int的演示。
'''
global1 = 11 def ff():
global global1
global1 = 22 # 声明一个glboal,在外部使用才会看到修改。 ff()
print("全局变量的值为:", global1)
print("递归函数") diGuiResult = 0 def diGuiFun(a):
if (a == 1):
return 1
return a * diGuiFun(a - 1) print(diGuiFun(4)) # 匿名函数
sum = lambda arg1, arg2: arg1 + arg2
print(sum(1, 2)) stus = [{"name": "三七", "age": 33}, {"name": "二六", "age": 66}, {"name": "一明", "age": 44}] print("使用匿名函数针对age进行排序")
stus.sort(key=lambda x: x["age"])
print(stus)
print("使用匿名函数针对key进行排序")
stus.sort(key=lambda x: x["name"])
print(stus)

第一部分运行结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test.py
hello world
---整形---
10
---浮点型---
10.1
---字符串---
hello string
---布尔值---
True
---空值---
d的类型是 <class 'int'>
---打印关键字---
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', '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']
---格式化输出---
我叫一明,我的年龄是18,我今年挣了0.010000¥
---赋值运算符---
11
---逻辑判断---
我还未成年
对,你说的都对
---嵌套循环---
我还未成年
---while循环---
* * * * * * * * * * * * * * * * * * * * * ---for循环---
h
e
l
l
o
---break和continue可以提前退出循环---
0 1 2 3 4 5 ---下标---
Y
g
---切片---
bcde
bcdef
abcde
bcde
--字符串常见操作---
1
34
-1
2 Hello
YiMing,What
are
you
doing?
Hi YiMing,What are you doing?
Hi Yiming,What Are You Doing?
Gogogo
False
True
gogogo
GOGOGO
Gogogo
长度 40
Gogogo
Gogogo
删除左边空白 Gogogo
删除右边空白 Gogogo
从左边开始查找: 7
从右边开始查找: 7
Hi
YiMing
False
True
所有字符都是字母或者数字: True
False
1我是 word2
---列表---
4
张三
5
不存在
11
李四
打印最后一个元素 繁星
繁星
打印最后一个元素 赵六
从小到大排序 [1, 3, 4, 5]
从大到小排序 [5, 4, 3, 1]
---元组---
11
[88, 99]
[88, 99, 44]
---字典---
张三
张三
无名氏
李四
1
字典长度为: 3
字典的所有值为: dict_values(['李四', 33, 1])
遍历所有key
name
age
gender
遍历所有value
李四
33
1
遍历所有key,value
key= name value= 李四
key= age value= 33
key= gender value= 1
遍历所有item
('name', '李四')
('age', 33)
('gender', 1)
---可变类型,不可变类型---
---Python的函数---
人生苦短,我用Python
3
11
4
设置不定长参数:
1
(2, 3, 4)
{'age1': 11, 'age2': 22}
华丽分割线————
1
(6, 7, 8)
{'num1': 1, 'num2': 2}
返回值函数
28
addRec: 13
divRec: 1
全局变量的值为: 22
递归函数
24
3
使用匿名函数针对age进行排序
[{'name': '三七', 'age': 33}, {'name': '一明', 'age': 44}, {'name': '二六', 'age': 66}]
使用匿名函数针对key进行排序
[{'name': '一明', 'age': 44}, {'name': '三七', 'age': 33}, {'name': '二六', 'age': 66}] Process finished with exit code 0

第二部分:【文件】

# Python文件操作
print("---Python文件操作---")
"""
文件操作规则:
r是只读模式,这是默认模式
w会将文件内容覆盖。如果文件不存在,则创建。
a追加文件内容。如果文件不存在,则创建。
rb以二进制格式打开一个文件,只读。这是默认模式
wb以二进制格式打开一个文件,将文件内容覆盖。如果文件不存在,则创建
ab以二进制格式打开一个文件,将内容追加到文件,如果文件不存在,则创建。
r+ 打开一个文件用于读写,文件指针将放在文件的开头。
w+ 打开一个文件用于读写,如果文件以存在,则覆盖。如果不存在,则创建。
a+ 打开一个文件用于读写,如果文件以存在,则追加内容。如果不存在,则创建。
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
"""
print("写数据")
f = open(r"F:\Code\Python\FirstDay\data\1.txt", "w")
f.write("hello world")
f.close()
print("写入成功")
print("读数据")
f2 = open(r"F:\Code\Python\FirstDay\data\1.txt", "r")
print(f2.read(1)) # read括号里面可以指定读取的长度,如果不指定则读取所有数据
f2.close()
# 按照行的方式把文件一行一行读取
f3 = open(r"F:\Code\Python\FirstDay\data\2.txt", "r")
r3 = f3.readlines()
print(type(r3))
for item in r3:
print(item)
f3.close()
# 文件定位读写
f4 = open(r"F:\Code\Python\FirstDay\data\2.txt", "r")
r4 = f4.read(3)
print(f4.tell())
f4.seek(5, 0) # 重新设置自定义位置。 第一个参数是偏移量。第二个参数一共有三个值,0代表开头,1代表当前位置,2代表结尾
print(f4.tell())
print(f4.read())
f4.close()
# 文件相关操作
import os # 文件操作模块 # os.rename(r"name1.txt", r"name2.txt") 修改文件名称
print(os.name) # 判断正在使用的平台,window平台打印nt,linux平台打印posix
print("当前文件路径为:", os.getcwd())
print("当前工作目录下所有文件为:", os.listdir())
# os.remove("name2.txt") #删除指定文件
# os.rmdir("../python") #删除指定目录
# os.mkdir("mydir") #创建目录
# os.path.isfile("") #判断指定对象是否是文件,是的话返回True,否则返回False
# os.path.isdir("") # 判断指定对象是否是文件夹,是的话返回True,否则返回False
# os.path.exists("") # 判断指定对象是否存在
# os.system("echo hello world") #执行shell命令
# os.chdir("", "") # 改变目录到指定目录
# os.path.getsize("") #获得文件的大小
# os.path.abspath("name2.txt") #获得绝对路径

第二部分运行结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test2.py
---Python文件操作---
写数据
写入成功
读数据
h
<class 'list'>
hello world What are you doing? I am coding..
3
5
world
What are you doing?
I am coding..
nt
当前文件路径为: F:\Code\Python\FirstDay\vip\shuai7boy\python
当前工作目录下所有文件为: ['FirstPy.py', 'mydir', 'name2.txt', 'support.py', 'test.py', 'test2.py', 'test3.py', 'test4.py', 'test5.py', 'test6.py', 'tt1.py', '__init__.py', '__pycache__'] Process finished with exit code 0

第三部分:【类】

# 定义类
class Person:
def say(self):
print("我叫:", self.name, ",我今年:", self.age, "岁了。") # 调用
ZhangSan = Person()
ZhangSan.name = "张三"
ZhangSan.age = 21
ZhangSan.say() # 在定义类时,同时初始化对象
class Person2:
def __init__(self):
self.name = "李四"
self.age = 44 def say(self):
print("我叫:", self.name, ",我今年:", self.age, "岁了。") LiSi = Person2() # 这样不赋值的话,就会使用默认的。
LiSi.say() # 构建有参数的类
print("---构建有参数的类") class Person3:
def __init__(self, name, age):
self.name = name
self.age = age def say(self):
print("我叫:", self.name, ",我今年:", self.age, "岁了。") ZhaoLiu = Person3("赵六", 66)
ZhaoLiu.say() # 构建有初始化对象的类 __new__
print("---构建有初始化对象的类") class Test1(object):
def __init__(self):
print("我是初始化后加工方法") def __new__(cls, *args, **kwargs):
print("我是初始化方法")
return object.__new__(cls) Test1() # 调用 # 删除类对象时会调用的方法 __del__
print("---删除类对象时会调用的方法") class Test2(object):
def __init__(self):
print("我是初始化后加工方法") def __new__(cls, *args, **kwargs):
print("我是初始化方法")
return object.__new__(cls) def __del__(self):
print("我马上消失.") t2 = Test2()
del t2 # 删除对象 # Python定义私有属性
'''
Python没有private专门修饰符来定义,它用了两个'_'代表私有属性,类也是,类名前面加上两个'_'代表私有的,否则就是公共的。
'''
__phone = 1 # 定义一个私有变量 # 继承
print("---继承---") class QQ(object):
def __init__(self, password, qqNum):
self.__password = password
self.qqNum = qqNum def getPassWord(self):
print("密码是:", self.__password) class MyQQ(QQ):
def talk(self):
print("我的QQ是:", self.qqNum) YiMingQQ = MyQQ(666, 10101001010101)
YiMingQQ.talk()
YiMingQQ.getPassWord() # 重写
print("---重写---") class PClass:
def say(self):
print("我是父类") class ChildClass(PClass):
def say(self):
print("我是子类") CP = ChildClass()
CP.say() # 多态
print("---多态---")
'''
Python中多态属于"鸭子类型"
'''
# 类属性和实例属性
'''
上面主要涉及了实例属性。
类属性就是在类里面定义变量,由父类和子类共享。 当然私有变量不能被对象调用和共享的。
类属性相当于Java,C#的静态成员变量,只在内存中存在一份。
'''
print("类属性和实例属性") class P1(object):
name = "无名氏"
__age = 0 p1 = P1()
print(p1.name)
print(P1.name) # 除了实例调用,类属性还可以直接调用
# print(p1._age) # 错误,私有属性是访问不到的
'''
如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性。
''' # 类方法和静态方法
'''
类方法使用@classmethod标识,静态方法使用@staticmethod标识
类方法需要定义参数,通常名称为:'cls',静态方法无需定义额外参数
'''
print("---类方法和静态方法---") #
class Earch(object):
__country = "China" def getCountry(self):
return self.__country @classmethod
def setCountry(cls, country):
cls.__country = country earch = Earch()
Earch.setCountry("中国")
print(earch.getCountry()) # 静态方法可以直接类名.方法名调用,如下所示:
class Earch2(object):
__country = "China" @staticmethod
def getCountry():
return Earch2.__country # 由于声明了静态方法,所以使用类直接调用返回即可。 @classmethod
def setCountry(cls, country):
cls.__country = country Earch2.setCountry("日本")
print(Earch2.getCountry())

第三部分运行结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test3.py
我叫: 张三 ,我今年: 21 岁了。
我叫: 李四 ,我今年: 44 岁了。
---构建有参数的类
我叫: 赵六 ,我今年: 66 岁了。
---构建有初始化对象的类
我是初始化方法
我是初始化后加工方法
---删除类对象时会调用的方法
我是初始化方法
我是初始化后加工方法
我马上消失.
---继承---
我的QQ是: 10101001010101
密码是: 666
---重写---
我是子类
---多态---
类属性和实例属性
无名氏
无名氏
---类方法和静态方法---
中国
日本 Process finished with exit code 0

第四部分:【异常】

# coding:utf-8
# 捕获异常
print("---捕获异常---")
# 普通异常
try:
open("zzz.txt", "r")
except IOError as result: # 捕获并存储异常信息
print("读取文件发生异常:")
print(result) # 带else的异常
print("带else的异常---")
try:
print("gogoogogo")
except IOError:
print("IO错误")
else:
print("没有发生异常,啦啦啦啦")
# 带finally异常
print("带finally异常---")
try:
open("zzz.txt", "r")
except IOError:
print("发生异常")
finally:
print("算了吧,我还是太年轻了") '''
异常嵌套:
如果try嵌套,那么如果里面的try没有捕获到这个异常,那么外面的try会接收到这个异常,然后进行处理,如果外边的try依然没有捕获到,那么再进行传递。。。
如果一个异常是在一个函数中产生的,例如函数A---->函数B---->函数C,而异常是在函数C中产生的,那么如果函数C中没有对这个异常进行处理,那么这个异常会传递到函数B中,如果函数B有异常处理那么就会按照函数B的处理方式进行执行;如果函数B也没有异常处理,那么这个异常会继续传递,以此类推。。。如果所有的函数都没有处理,那么此时就会进行异常的默认处理,即通常见到的那样
注意观察上图中,当调用test3函数时,在test1函数内部产生了异常,此异常被传递到test3函数中完成了异常处理,而当异常处理完后,并没有返回到函数test1中进行执行,而是在函数test3中继续执行
'''
# 自定义引发异常
'''
使用raise进行引发。raise 对应的应是Error,Exception或它俩的子类
'''
# raise IOError("读写错误")
# raise Exception("又异常了?")
try:
print("")
except Exception:
pass # 如果这行代码出现了异常,那么后面的代码不会运行

第四部分运行结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test4.py
---捕获异常---
读取文件发生异常:
[Errno 2] No such file or directory: 'zzz.txt'
带else的异常---
gogoogogo
没有发生异常,啦啦啦啦
带finally异常---
发生异常
算了吧,我还是太年轻了 Process finished with exit code 0

第五部分:【模块】

# 模块
'''
Python中的模块就相当于Java中的包。导入方式也是import,比如我们前面使用的导入io。
'''
# 引入math模块
import math print(math.sqrt(2)) # 引入模块中指定方法
'''
有时候我们仅仅想引用模块中某个方法,而不是整个模块,使用from ... import 即可
'''
from math import sqrt sqrt(3)

第五部分运行结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test5.py
1.4142135623730951 Process finished with exit code 0

第六部分:【列表推导】

# 列表推导式
print("---列表推导式---")
'''
所谓列表推导式,就是循环创建列表 '''
list1 = [i for i in range(1, 10)]
print(list1)
list2 = [i for i in range(1, 10) if i % 2 == 0]
print(list2) print("---列表,元组,字典,集合之间的对比---")
'''
list=[] 列表无序,元素可以重复
tuple=() 元组有先后顺序,有下标位,元素可以重复
dict={"key":value} 字典无序,key不可重复
set=set() 集合,无序,不可重复
'''
list3 = [1, 1, 3, 4]
print(list3)
list4 = set(list3)
print(list4)
tup1 = (4, 3, 1, 6)
print(tup1[0])

第六部分运行结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test6.py
---列表推导式---
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[2, 4, 6, 8]
---列表,元组,字典,集合之间的对比---
[1, 1, 3, 4]
{1, 3, 4}
4 Process finished with exit code 0

第七部分:【自定义模块】

tt1.py

def say(word):
print("一明说:", word)

tt2.py

import tt1

# 引入自定义包
'''
Python中每个文件都可以看作是一个包,使用import 文件名 或者 from 包名 import 方法名 引入。
注意引入的时候,需要将 所在类的包标记为Sources Root。 及右键Mark Directory As -> Sources Root。这样才会有智能提示。
这个也表示了此文件是源代码文件。
'''
tt1.say("你好,世界!")

第七部分运行结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/tt2.py
一明说: 你好,世界! Process finished with exit code 0

第八部分:【数据库】

# Python操作数据库
''''
Python操作数据库很方便,直接引入pymysql包即可。
操作语句都写在execute()里面。
execute()执行是获取影响行数,如果拿具体的SQL执行结果需要fetchall。
步骤1:链接数据库,定位数据库
conn=connect(服务器IP,用户名,密码,数据库,端口) 这部分可以直接查看源码得知
cur=conn.cursor() 定位数据库
步骤2:构建执行语句
count=cur.execute("") 语句可以包括增删改查 ,返回受影响的行数
步骤3: 获取执行结果
result cur.fetchall() 拿到全部执行结果
步骤4:提交修改,关闭链接
conn.commit()
cur.close()
conn.close()
''' from pymysql import * print("---Python操作数据库---") # 构建数据库链接
conn = connect("localhost", "root", "123456", "test", 3306)
cur = conn.cursor() # 更新操作
count1 = cur.execute("update grade1 set `name`='三张' where `name`='张三'")
print(count1) # 打印受影响的行数 # 查询操作
count2 = cur.execute("select *from grade1;")
# 获取执行结果(具体的数据)
result = cur.fetchall()
for rs in result: # 循环展示结果
print(rs) # 插入操作
count3 = cur.execute(
"insert into grade1(`name`,object,grade) values(%s,%s,%d)" % ("'一明'", "'Computer'", 100)) # 注意双引号里面加个单引号
print(count3) conn.commit() # 插入跟新语句注意commit
cur.close()
conn.close()

第八部分运行结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test7.py
---Python操作数据库---
3
('三张', 'English', 11)
('三张', 'Chinese', 12)
('三张', 'Math', 13)
('李四', 'English', 14)
('李四', 'Math', 15)
('赵六', 'Chinese', 16)
1 Process finished with exit code 0

第九部分:【科学计算】

numpy基本运算

import numpy as np

# numpy类型
print("---numpy类型---")
a = np.dtype(np.float_)
print(a) # int8,int16,int32,int64分别用 i1 ,i2, i4 ,i8替代
b = np.dtype('i1')
print(b)
# 创建数组
print("---创建数组---")
c = np.array([[1, 2, 3], [4, 5, 6]], dtype=int)
print(c.shape) # 打印结构为2行3列 d = np.arange(24).reshape(2, 3, 4) # 创建一个三维数组。还可以创建二维 np.arange(6).reshape(2, 3)
print(d) # 基本运算
'''
rand 生成均匀分布的伪随机数。分布在(0~1)之间。
randn 生成标准正态伪随机数。 均值是0,方差是1
'''
print("---基本运算---")
print("一维运算---")
e = np.random.random(6)
f = np.random.rand(6)
g = np.random.randn(6)
print(e)
print(f)
print(g)
print("二维运算---")
e2 = np.random.random((2, 3))
f2 = np.random.rand(2, 3)
g2 = np.random.randn(2, 3)
print(e2)
print(f2)
print(g2) print(np.dot(2, 4)) # 矩阵乘法 n1 = np.ones((2, 5)) # 生成2行5列的矩阵,元素都为1
n2 = np.zeros((2, 5)) # 生成2行5列的矩阵,元素都为0
print("结果为:", n1)
print("结果为:", n2) # 常见函数
print("---常见函数---")
'''
abs,fabs 计算整数,浮点数的绝对值。
sqrt
'''
print(np.abs(-12)) # 计算整数的绝对值
print("浮点绝对值:", np.fabs(-3.14)) # 计算浮点数的绝对值
print("平方根:", np.sqrt(9)) # 计算平方根
print("平方:", np.square(2)) # 计算各元素的平方
print(np.exp(9)) # 计算个元素e^
print("对数值:", np.log10(100)) # 求对数。 log,log10,log2,log1p分别为自然对数,底数为10的log,底数为2的log和log(1+x)
print("正负号为:", np.sign(-23)) # 计算正负号:1(正数),0(零),-1(负数)
print("向上取整:", np.ceil(2.3)) # 计算大于小于该值的最小整数
print("向下取整:", np.floor(2.3)) # 计算最小整数,及小于等于该值的最小整数
print("数组和为:", np.sum([1, 2, 3])) # 对数组中全部或某轴向的元素和。
print("数组平均值为:", np.mean([1, 2, 3])) # 计算算术平均数
print("标准差:", np.std([1, 2, 3])) # 计算标准差。 标准差计算公式为: √((平均值-x1)+(平均值-x2)+(平均值-x3))/元素个数
print("方差:", np.var([1, 2, 3])) # 计算方差。 方差和标准差少一步,就是不开方。 ((平均值-x1)+(平均值-x2)+(平均值-x3))/元素个数
print("最小值:", np.min([1, 2, 3])) # 打印最小值
print("最大值:", np.max([1, 2, 3])) # 打印最大值
print("最小值索引:", np.argmin([1, 2, 3])) # 最小值索引
print("所有元素阶梯累计和:", np.cumsum([1, 2, 3])) # 计算所有元素阶梯累计和
print("所有元素阶梯累计积:", np.cumprod([2, 2, 3])) # 计算所有元素阶梯累计积
print("四舍五入:", np.rint(3.1415)) # 四舍五入到最近整数
print(np.modf([3, 45, 12, 0, 5, 11])) # 将数组以整数部分,小数部分两个独立的数组返回
print(np.isnan([float("NaN"), 23, 44])) # 判断是否为NaN。 NaN是非数字的一个特殊值,可以把number设置为NaN来指示此值不是数字。
print("cos:", np.cos(90)) # cos,cosh,sin,sinh,tan,tanh普通型或双曲型三角函数 ,前面加上ar就是反三角函数
print("数组相加:", np.add([1, 2, 3], [4, 5, 6])) # 将数组中对应的元素相加
print("数组相减:", np.subtract([1, 2, 3], [4, 5, 6])) # 从第一个数组减去第二个数组中的元素
print("数组相乘:", np.multiply([1, 2, 3], [4, 5, 6])) # 将第一个数组元素乘以第二个数组元素
print("数组相除:", np.divide([8, 15, 3], [4, 5, 6])) # 将两个数组相除
print("数组相除,并向下取整", np.floor_divide([8, 15, 3], [4, 5, 6])) # 数组相除,并向下取整
print("数组指数运算:", np.power([1, 2, 3], [2, 2, 3])) # 两个数组对应位置做指数运算
print("取模运算:", np.mod(3, 2)) # 取模运算
print("符号复制", np.copysign([1, 2, 3], [-4, 5, 6])) # 将第二个数组符号赋值到第一个数组中的值
print("比较数组:", np.greater_equal([1, 2, 3], [4, 2, 6])) # 进行数组比较
print("唯一元素计算:", np.unique([1, 1, 2, 3, 9, 4])) # 计算数组中的唯一元素,并返回有序结果
print("数组相交值:", np.intersect1d([1, 2, 3], [3, 6, 7])) # 计算两个数组的公共元素
print("数组的并集:", np.union1d([1, 2, 3], [3, 6, 7])) # 计算两个数组的并集
print("数组包含某元素:", np.in1d(3, [3, 6, 7])) # 前一个元素是否包含于后面的数组
print("集合差:", np.setdiff1d([1, 2, 3], [3, 6, 7])) # 集合的差,及元素在第一个数组中,不在第二个中
print("异或:", np.setxor1d([1, 2, 3], [3, 6, 7])) # 异或,及存在一个数组中,但不存在于两个数组中的元素
print("矩阵乘法:", np.dot([1, 2, 3], [3, 6, 7])) # 矩阵乘法
print("矩阵行列式:", np.linalg.det(np.array([[1, 1], [1, 2]]))) # 矩阵行列式。 求法:对角线想乘-对角线相乘
print("特征值和特征向量:", np.linalg.eig(np.array([[1, 2], [1, 2]]))) # 特征值就是运行的速度,特征向量就是运行的方向。
print("逆矩阵:", np.linalg.inv(np.array([[1, 1, 1], [0, 2, 5], [2, 5, -1]]))) # 求逆矩阵

numpy基本运算结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test8.py
---numpy类型---
float64
int8
---创建数组---
(2, 3)
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]] [[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
---基本运算---
一维运算---
[0.86770359 0.56616857 0.31614419 0.38133187 0.72912149 0.3242815 ]
[0.51159366 0.16152977 0.02869309 0.57144147 0.61089012 0.49114884]
[ 0.29766702 0.23493723 0.14115526 -1.29261721 -0.57533482 -0.44860585]
二维运算---
[[0.86053384 0.33917939 0.20983055]
[0.95293759 0.10255904 0.01336376]]
[[0.77379715 0.9487771 0.31541077]
[0.14415509 0.16419332 0.88090558]]
[[-0.73064851 1.13257581 -0.7313222 ]
[-1.24625777 -0.09798101 1.2632825 ]]
8
结果为: [[1. 1. 1. 1. 1.]
[1. 1. 1. 1. 1.]]
结果为: [[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]]
---常见函数---
12
浮点绝对值: 3.14
平方根: 3.0
平方: 4
8103.083927575384
对数值: 2.0
正负号为: -1
向上取整: 3.0
向下取整: 2.0
数组和为: 6
数组平均值为: 2.0
标准差: 0.816496580927726
方差: 0.6666666666666666
最小值: 1
最大值: 3
最小值索引: 0
所有元素阶梯累计和: [1 3 6]
所有元素阶梯累计积: [ 2 4 12]
四舍五入: 3.0
(array([0., 0., 0., 0., 0., 0.]), array([ 3., 45., 12., 0., 5., 11.]))
[ True False False]
cos: -0.4480736161291701
数组相加: [5 7 9]
数组相减: [-3 -3 -3]
数组相乘: [ 4 10 18]
数组相除: [2. 3. 0.5]
数组相除,并向下取整 [2 3 0]
数组指数运算: [ 1 4 27]
取模运算: 1
符号复制 [-1. 2. 3.]
比较数组: [False True False]
唯一元素计算: [1 2 3 4 9]
数组相交值: [3]
数组的并集: [1 2 3 6 7]
数组包含某元素: [ True]
集合差: [1 2]
异或: [1 2 6 7]
矩阵乘法: 36
矩阵行列式: 1.0
特征值和特征向量: (array([0., 3.]), array([[-0.89442719, -0.70710678],
[ 0.4472136 , -0.70710678]]))
逆矩阵: [[ 1.28571429 -0.28571429 -0.14285714]
[-0.47619048 0.14285714 0.23809524]
[ 0.19047619 0.14285714 -0.0952381 ]] Process finished with exit code 0

索引,切片和迭代

import numpy as np

# 索引,切片和迭代
a = np.arange(10) ** 3
print("a的值为:", a)
print("切片为:", a[0:3]) # 多维数组切片
b = np.arange(6).reshape(2, 3)
print("b的值为:", b)
print("切片为:", b[0:2, 1])
print(b[-1, :]) # 当少于轴的索引被提供时,缺失的索引被认为是整个切片
print(b[-1])
print(b[1, ...])
'''
秩为5的数组(即它有5个轴),那么:x[1,2,…] 等同于 x[1,2,:,:,:],x[…,3] 等同于 x[:,:,:,:,3],x[4,…,5,:] 等同 x[4,:,:,5,:].
''' d = np.array([[1, 2, 3], [4, 5, 6]]) # 创建ndarry
print("d:", d)
print(d.ndim) # 轴的个数(秩)
print(d.shape) # 数组维度
print(d.size) # 元素个数,等于shape中元组元素的乘积
print(d.dtype) # 类型
e = np.array([[[[1, 2, 3], [4, 5, 6], [7, 8, 9]]], [[[11, 12, 13], [14, 15, 16], [17, 18, 19]]]])
print("ndim:", e.ndim)
print("shape:", e.shape)
print(e[1, ...]) # f = np.arange(12).reshape(2, 3, 2)
print("f:", f[1, 1]) # 等价于f[1][1] print("循环迭代:")
for i in f:
print(i)
# 如果要对每个数组中元素进行运算,请使用flat属性。flat用于将数组切分得到一个个元素。
for i in f.flat:
print(i) print("---华丽分割线---")
b1 = np.mat([[1, 2, 3], [4, 5, 6]])
print(b1.flatten()) # 形状操作
a1 = np.arange(10).reshape(2, 5)
print(a1.ravel())
print(a1.resize(5, 2))

索引,切片和迭代运算结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test9.py
a的值为: [ 0 1 8 27 64 125 216 343 512 729]
切片为: [0 1 8]
b的值为: [[0 1 2]
[3 4 5]]
切片为: [1 4]
[3 4 5]
[3 4 5]
[3 4 5]
d: [[1 2 3]
[4 5 6]]
2
(2, 3)
6
int32
ndim: 4
shape: (2, 1, 3, 3)
[[[11 12 13]
[14 15 16]
[17 18 19]]]
f: [8 9]
循环迭代:
[[0 1]
[2 3]
[4 5]]
[[ 6 7]
[ 8 9]
[10 11]]
0
1
2
3
4
5
6
7
8
9
10
11
---华丽分割线---
[[1 2 3 4 5 6]]
[0 1 2 3 4 5 6 7 8 9]
None Process finished with exit code 0

形状操作

import numpy as np

#形状操作
'''
ravel(), vstack(),hstack(),column_stack,row_stack, stack, split, hsplit, vsplit
'''
# 增加维度
a = np.arange(5)
a[:, np.newaxis]
a[np.newaxis, :]
np.tile([1, 2], 2)
# 合并
a = np.arange(10).reshape(2, 5)
print(a.ravel())
print(a.resize(5, 2))
b = np.arange(6).reshape(2, 3)
c = np.ones((2, 3))
d = np.hstack((b, c)) # hstack:horizontal stack 左右合并
e = np.vstack((b, c)) # vstack: vertical stack 上下合并
f = np.column_stack((b, c))
g = np.row_stack((b, c))
h = np.stack((b, c), axis=1) # 按行合并
i = np.stack((b, c), axis=0) # 按列合并
j = np.concatenate((b, c, c, b), axis=0) # 多个合并 # 分割
k = np.hsplit(i, 2)
l = np.vsplit(i, 2)
m = np.split(i, 2, axis=0)
n = np.split(i, 2, axis=1) o = np.array_split(np.arange(10), 3) # 不等量分割

形状操作运算结果:

F:\Code\Python\FirstDay\venv\Scripts\python.exe F:/Code/Python/FirstDay/vip/shuai7boy/python/test10.py
[0 1 2 3 4 5 6 7 8 9]
None Process finished with exit code 0

总结文档参考Python基础教程

系列传送门

入门大数据---Python基础的更多相关文章

  1. 大数据学习--day04(选择结构、循环结构、大数据java基础面试题)

    选择结构.循环结构.大数据java基础面试题 switch: 注意: byte short int char String(jdk1.7支持) 不能是 long float double boolea ...

  2. 大数据Python学习大纲

    最近公司在写一个课程<大数据运维实训课>,分为4个部分,linux实训课.Python开发.hadoop基础知识和项目实战.这门课程主要针对刚从学校毕业的学生去应聘时不会像一个小白菜一样被 ...

  3. 【全集】大数据Java基础

    课程介绍 本课程是由猎豹移动大数据架构师,根据Java在公司大数据开发中的实际应用,精心设计和打磨的大数据必备Java课程.通过本课程的学习大数据新手能够少走弯路,以较短的时间系统掌握大数据开发必备语 ...

  4. 入门大数据---Flink学习总括

    第一节 初识 Flink 在数据激增的时代,催生出了一批计算框架.最早期比较流行的有MapReduce,然后有Spark,直到现在越来越多的公司采用Flink处理.Flink相对前两个框架真正做到了高 ...

  5. 【全集】大数据Linux基础

    课程介绍 本课程是由猎豹移动大数据架构师,根据公司大数据平台的运维情况,精心设计和打磨的大数据必备Linux课程.通过本课程的学习大数据新手能够少走弯路,快速掌握Linux常用命令及Shell编程,为 ...

  6. 入门大数据---Hadoop是什么?

    简单概括:Hadoop是由Apache组织使用Java语言开发的一款应对大数据存储和计算的分布式开源框架. Hadoop的起源 2003-2004年,Google公布了部分GFS和MapReduce思 ...

  7. 入门大数据---Kylin是什么?

    一.Kylin是什么? Apache Kylin是一个开源的.分布式的分析型数据仓库,提供Hadoop/Spark 上的SQL查询接口及多维度分析(OLAP)能力以支持超大规模的数据,最初由eBay开 ...

  8. 第四章:大数据 の HBase 基础

    本课主题 NoSQL 数据库介绍 HBase 基本操作 HBase 集群架构与设计介紹 HBase 与HDFS的关系 HBase 数据拆分和紧缩 引言 介绍什么是 NoSQL,NoSQL 和 RDBM ...

  9. 第一章:大数据 の Linux 基础 [更新中]

    本课主题 Linux 休系结构图 Linux 系统启动的顺序 Linux 查看内存和 CPU 指令 环境变量加载顺序 Linux 内存结构 Linux 休系结构图 Linux 大致分为三个层次,第一层 ...

随机推荐

  1. 利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器

    相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10-20 ...

  2. 【HBase】安装与使用

    下载HBase(注意下载与您使用的hadoop版本兼容的版本) 前提:hadoop HA,zookeeper是正常的. 1.解压 tar -zxvf hbase压缩包 -C 解压后存储路径 2.配置环 ...

  3. TI CC1310 sub1G的SDK开发之入门

    CC1310是TI新出的一款sub1G射频模块,具体参数见数据手册吧,这款芯片的SDK跑的是rtos系统,是基于free-rtos定制的ti-rtos,多任务运行.芯片集成了两个核,一个M3做控制MU ...

  4. Java实现 LeetCode 514 自由之路

    514. 自由之路 视频游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring"的金属表盘,并使用表盘拼写 ...

  5. Java实现蓝桥杯VIP 算法训练 矩阵乘方

    import java.util.Scanner; public class 矩阵乘方 { public static void main(String[] args) { Scanner scann ...

  6. Java实现 LeetCode 137 只出现一次的数字 II(二)

    137. 只出现一次的数字 II 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空 ...

  7. java实现第六届蓝桥杯奇怪的数列

    奇怪的数列 从X星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 - YY博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行& ...

  8. Linux 自动挂载与fstab文件修复

    /etc/fstab文件 自动挂载就是写入/etc/fstab文件 vi /etc/fstab 其中,第九行是/分区的自动挂载信息,有6个字段 第一字段表示分区的UUID(硬盘通用唯一识别码,使用du ...

  9. mybatis源码解析-日志适配器

    1.为什么需要使用适配器?    集成第三方日志组件,屏蔽日志组件底层实现,统一提供写日志的接口. 2.什么是适配器模式 定义:将一个类的接口变成客户端所期待的另一种接口,从而使原本因接口不匹配而无法 ...

  10. 一文带你快速搞懂动态字符串SDS,面试不再懵逼

    目录 redis源码分析系列文章 前言 API使用 embstr和raw的区别 SDSHdr的定义 SDS具体逻辑图 SDS的优势 更快速的获取字符串长度 数据安全,不会截断 SDS关键代码分析 获取 ...