大数据基础---Python基础

前言

由于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基础教程

系列传送门

posted @ 2020-05-11 10:07  数据驱动  阅读(242)  评论(0编辑  收藏  举报