机器学习技术(一)——python基础超详解
文章目录
- 机器学习技术(一)——python基础超详解
- 0、引言
- 1、基础概念
- **:snake:变量**
- **:snake:注释**
- **:snake:输入 输出**
- 2、数据类型
- **:snake:数值类型**
- **:snake:运算符**
- **:snake:字符串类型**
- **:snake:列表**
- **:snake:元组**
- **:snake:字典**
- **:snake:集合**
- 3、选择、循环与函数
- **:snake:if....elif...else**
- **:snake:try:… except Exception**
- :snake:循环语句
- :snake:函数
- 4、对象
- **:snake:创建类**
- **:snake:访问属性**
- **:snake:类的继承**
- 5、深拷贝和浅拷贝
- :snake:浅拷贝
- :snake:深拷贝
- 6、标准库
- :snake:sys
- :snake:os
- :snake:time
- 7、总结
0、引言
Python3语言的基础,快速掌握Python语言中的基本数据类型、Python编程语言的基本语法、Python面向对象编程和Python的文件操作。为以后的机器学习实例实验打下基础。
本篇内容适用人群:具有一定python基础的读者,期末考试复习、巩固基础可用、打算学习机器学习等需要用python编程实现的知识,需要巩固python内容的读者…
另外没有基础的同学建议去菜鸟教程等文档、或者网课自学。
1、基础概念
🐍变量
语法:变量名=变量值(等号代表赋值)
输入:
a="hello world,hello tianhai"
print(a)
输出:
hello world,hello tianhai
🐍注释
为了代码的清晰)从#号开始,一直到本行的末尾,都是被注释的内容不会被Python解释器解析,即Python解释器看到#就不会进行编译。
# 我是一段注释
'''
我也是一段注释
'''
🐍输入 输出
语法:input(content)
返回值是字符串
输入:
input()
在弹出的输入框中通过键盘输入‘123’
输出:
'123'
2、数据类型
🐍数值类型
数值类型包含整型、浮点型、复数类型、布尔类型。
各数值类型间可相互转换
输入:
print(int()) #默认为0
print(float()) #没有参数,默认为0.0
print(complex()) #没有参数。默认为 0j
print(bool()) #没有参数,默认为False
输出:
0
0.0
0j
False
🐍运算符
输入:
print(True+False) # 输出1,True默认为1,False为0
print(True or False) # 输出True,关键字or执行“或”操作
print(5//2) # 输出2,//为取整运算符
print(5%2) # 输出1,%为取余运算符
print(3**2) # 输出9,**表示乘方操作
print(5+1.6) # 输出6.6,不同精度的类型的数字相加默认取高精度类型作为结果
输出:
1
True
2
1
9
6.6
🐍字符串类型
输入:
S = 'python' # 给变量S赋值 python
# len(obj): 返回对象的长度
print(len(S)) # 输出6
print(S[0],S[1],S[-1]) # 输出pyn ,按照索引获取元素
print(S+'1',S*2) # 输出python1 pythonpython:合并和重复
输出:
6
p y n
python1 pythonpython
字符串常用操作
- 字符串切片
S = "python"
S.split('h')
# 输出[‘pyt’,’on’]
- 字符串替换
S.replace('py','PY')
- 小写字符转化为大写、大写字符转化为小写
S.upper()
S.lower()
- 字符连接
emo = ''.join(['life', 'is' ,'short'])
print(emo)
# 输出life is short,join拼接字符串
- 格式化字符串
hw12='%s %s %d' % ('hello','world',12) # 格式化字符串
print(hw12) # 输出hello world 12
🐍列表
- 列表的常用操作
language = ['python', 'R', 'C++']
- 追加元素
language = ['python', 'R', 'C++']
language.append('Rust') # 追加元素
print(language)
# 输出 ['python', 'R', 'C++','Rust']
- 删除元素
language = ['python', 'R', 'C++']
language.remove('R')
print(language)
# 输出 ['python', 'C++']
- 插入列表的指定位置
language = ['python', 'R', 'C++']
language.insert(1,'Java')# 在下标1的地方插入元素Java
print(language)
# 输出 ['python', 'Java', 'R', 'C++']
- 移除列表中下标对应的元素
language = ['python', 'R', 'C++']
language.pop(1)# 删除下标为1的元素
print(language)
# 输出 ['python', 'C++']
- 遍历并获取元素和对应索引
language = ['python', 'R', 'C++']
for i in enumerate(language):
print(i)
#输出:(0, python)
# (1, R)
# (2, C++)
- 批量生成符合规则的元素组成的列表
language = ['python', 'R', 'C++']
double = [x*2 for x in language]
print(double)
#输出 :['pythonpython ', 'RR ', 'C++C++ ']
- 对列表进行排序
list1 = [12,45,34,56]
list1.sort()
print(list1)
# 输出[12,34,45,56]
- 逆置列表中元素
list1 = [12,45,34,56]
list1.reverse() # 对列表进行逆置
print(list1) # 输出[56,34,45,12]
🐍元组
- 创建元组
T=(1,2,3)
- 元组合并相加
T = T+(4,5)
print(T)
输出:(1, 2, 3, 4, 5)
- 只有一个元素的元组
t=(12,)
- 元组的不可变性
tuple1 = (12,45,32,55,[1,0,3])
# 元组中可变的元素是可以变得
tuple1[4][0] = 2
print(tuple1) # (12,45,32,55,[2,0,3])
tuple1[0] = "11" # 程序异常,元组的不可变性
🐍字典
- 定义字典
#三种方法
x = {'food':'Spam','quantity':4,'color':'pink'}
X =dict(food='Spam',quantity=4, color='pink')
x = dict([("food", "Spam"),("b", "2"),("color","pink")])
- 元素访问
print(x.keys()) # 输出dict_keys(['food', 'quantity', 'color'])
print(x.values()) # 输出dict_values(['Spam', 4, 'pink'])
print(x.items()) # 输出 dict_items([('food', 'Spam'), ('quantity', 4), ('color', 'pink')])
3.清空与删除
x.clear() # 清空字典中的所有数据
print(x) # 输出 {}
del(x)
print(x) # 程序异常,提示“d”未定义
🐍集合
- 定义集合
sample_set = {'Prince', 'Techs'}
print('Data' in sample_set) # 输出False,in的作用是检查集合中是否存在某一元素
- 增加、删除元素
sample_set.add('Data') # 向集合中增加元素Data
print(sample_set) # 输出 {'Prince', 'Techs', 'Data'}
sample_set.remove('Data') # 删除元素Data
3.不可变集合
sample_set = frozenset(sample_set)
4.集合元素的唯一性
list2 = [1,3,1,8,3]
print(list(set(list2))) # 输出 [1,3,8],利用集合元素的唯一性进行列表去重
3、选择、循环与函数
接收一个用户输入的分数,然后判断用户所输入的分数属于什么级别。使用Python中的if语句可以完成此功能。
🐍if…elif…else
if 判断条件1:
执行语句1……
elif 判断条件2:
执行语句2……
elif 判断条件3:
执行语句3……
else:
执行语句4……
🐍try:… except Exception
是Python中用于捕获异常的语句,如果try中的语句出现错误,则会执行except中的语句。
输入:
#根据输入的分数判断
# input():用于接收输入。
score = input("请输入你的分数")# input函数接收输入,为字符串类型
try:
score = float(score) # 将分数转化为数字类型
if 100>=score>=90: # 判断输入的值是否大于等级分数
print("优") # 满足条件后输出等级
elif 90 > score >= 80:
print("良")
elif 80>score>60:
print("及格")
else:
print("去补考吧!")
except Exception:
print("请输入正确的分数")
输出:
请输入你的分数59
去补考吧!
🐍循环语句
当满足条件时循环执行语句块,想要结束循环时,使用break或continue结束循环。
输入:
#while循环
i = 0 # 新建i变量
while i<9: # 设置循环条件
i+=1 # 每次循环i增加1
if i == 3: # 判断条件是否满足
print("跳出此次循环")
continue # continue跳出当前的这一次循环
if i == 5:
print("跳出当前大的循环")
break # 跳出当前的大的循环
print(i)
输出:
1
2
跳出此次循环
4
跳出当前大的循环
输入:
#使用for循环打印包含*元素的菱形
for i in range(10): #定义外层循环(第几行)
for k in range (10-i): #定义内层循环,每一行对应的纵向位置
print(" ",end="") #打印空
for j in range(2*i-1): #打印*, 每一行对应的纵向位置
print('*', end="")
print()
输出:
*
***
*****
*******
*********
***********
*************
***************
*****************
🐍函数
自定义一个函数,返回一个序列。序列中每个数字都是前两个数字之和(斐波那契数列)。
输入:
def fibs(num): # 位置参数
result = [0,1] # 新建列表存储数列的值
for i in range(2,num): # 循环num-2次
a = result[i-1] + result[i-2]
result.append(a) # 将值追加至列表
return result # 返回列表
fibs(5)
输出:
[0, 1, 1, 2, 3]
输入:
def hello(greeting='hello',name='world'): # 默认参数
print('%s, %s!' % (greeting, name)) # 格式化输出
hello() # hello,world 默认参数
hello('Greetings') # Greetings,world 位置参数
hello('Greetings','universe') # Greetings,universe 位置参数
hello(name='Gumby') # hello,Gumby 关键字参数
输出:
hello, world!
Greetings, world!
Greetings, universe!
hello, Gumby!
4、对象
🐍创建类
据Dog类创建的每个实例都将存储名字和年龄。我们将赋予了每条小狗蹲下(sit())和打滚(roll_over())的能力:
输入:
class Dog():
"""一次模拟小狗的简单尝试"""
def __init__ (self,name,age):
"""初始化属性name和age"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗被命令时蹲下"""
print(self.name.title()+"is now sitting")
def roll_over(self):
"""模拟小狗被命令时打滚"""
print(self.name.title()+"rolled over!")
dog = Dog("哈士奇",2)
dog.sit()
dog.roll_over()
输出:
哈士奇is now sitting
哈士奇rolled over!
🐍访问属性
输入:
class Employee:
'所有员工的基类'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print("Total Employee %d" % Employee.empCount )
def displayEmployee(self):
print("Name : ", self.name, ", Salary: ", self.salary)
# 创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
# 创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print("Total Employee %d" % Employee.empCount)
输出:
Name : Zara , Salary: 2000
Name : Manni , Salary: 5000
Total Employee 2
🐍类的继承
面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
输入:
class Parent: # 定义父类
parentAttr = 100
def __init__(self):
print("调用父类构造函数")
def parentMethod(self):
print('调用父类方法')
def setAttr(self, attr):
Parent.parentAttr = attr
def getAttr(self):
print("父类属性 :", Parent.parentAttr)
class Child(Parent): # 定义子类
def __init__(self):
print("调用子类构造方法")
def childMethod(self):
print('调用子类方法')
c = Child() # 实例化子类
c.childMethod() # 调用子类的方法
c.parentMethod() # 调用父类方法
c.setAttr(200) # 再次调用父类的方法 - 设置属性值
c.getAttr()
输出:
调用子类构造方法
调用子类方法
调用父类方法
父类属性 : 200
5、深拷贝和浅拷贝
使用python中的copy模块来实现深拷贝的功能
🐍浅拷贝
原数据中嵌套列表的值被修改时,浅拷贝数据一起被修改
import copy
Dict1 = { 'name': 'lee', 'age':89, 'num':[1,2,8]} # 新建字典
Dict_copy = Dict1.copy() # 浅拷贝
Dict1['num'][1] = 6 # 修改原数据中嵌套列表的值
print('Dict_copy:'+ str(Dict_copy))
# Dict_copy :{‘name’:’lee’, ‘age’:89, ‘num’:[1,6,8]}# 浅拷贝数据一起被修改
🐍深拷贝
原数据中嵌套列表的值被修改时,深拷贝的数据不被修改
import copy
Dict1 = { 'name': 'lee', 'age':89, 'num':[1,2,8]} # 新建字典
Dict_dcopy = Dict1.copy() # 浅拷贝
Dict1['num'][1] = 6 # 修改原数据中嵌套列表的值
print('Dict_dcopy:'+ str(Dict_dcopy))
# Dict_dcopy :{‘name’:’lee’, ‘age’:89, ‘num’:[1,2,8]} # 深拷贝没有修改
6、标准库
🐍sys
- sys.exit([n])
此方法可以是当前程序退出,n为0时表示正常退出,其他值表示异常退出。
输入:
import sys
for i in range(100):
print(i)
if i ==5:
sys.exit(0)
输出:
0
1
2
3
4
5
An exception has occurred, use %tb to see the full traceback.
SystemExit: 0
- sys.path
获取模块搜索路径。
输入:
sys.path
输出:
['', 'D:\\Anaconda3\\python39.zip', 'D:\\Anaconda3\\DLLs', 'D:\\Anaconda3\\lib', 'D:\\Anaconda3', 'D:\\Anaconda3\\lib\\site-packages', 'D:\\Anaconda3\\lib\\site-packages\\win32', 'D:\\Anaconda3\\lib\\site-packages\\win32\\lib', 'D:\\Anaconda3\\lib\\site-packages\\Pythonwin']
- sys.platform
获取当前系统平台。
输入:
sys.platform
输出:
'linux'
or
'win32'
…
🐍os
- 获取当前进程id
import os
print("当前进程的ID:", os.getpid())
- 获取当前父进程id
print("当前父进程的ID:", os.getppid())
- 获取当前所在路径
cwd = os.getcwd()
print("当前所在路径为:",cwd)
- 改变当前工作目录
os.chdir("/home/")
print("修改后当前所在路径为:", os.getcwd())
- 返回目录下所有文件
print("当前目录下的文件有:", os.listdir(cwd))
- 输出当前路径下的所有文件
for root, dirs, files in os.walk(cwd, topdown=False):
for name in files:
print(os.path.join(root, name))
for name in dirs:
print(os.path.join(root, name))
🐍time
- time.time()
用于获取当前时间戳
import time
# time.time():用于获取当前时间戳
time_now = time.time()
print("时间戳:",time_now)
# 输出:
# 时间戳: 1560166359.9892673
- time.localtime()
获取时间元组
localtime = time.localtime(time_now)
print("本地时间为 :", localtime)
- time.asctime()
获取格式化的时间
localtime = time.asctime(localtime)
print("本地时间为 :", localtime)
- time.strftime(format[, t])
接收时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
7、总结
本文系统性地介绍了python一些基本命令,数据类型,循环以及函数的定义等,并相应给了一些例子,通过完成这些小例子能够较好地巩固python基础并为以后的学习做铺垫。