轻松玩转AI路径:

  1.   从Python开始 [链接]
  2.  数据科学 [链接]
  3.  机器学习 [链接]
  4.  深度学习——神经网络 [链接]

从Python开始:

  • Python3入门 [链接]
  • Python3进阶 [链接]
  • Python3高级编程和异步IO并发编程 [链接]

Python3入门 目录:

  • 1. 简介
  • 2. 数据类型
  • 3. 变量、表达式、运算符
  • 4. 流程控制语句
  • 5. 组织结构
  • 6. 面向对象
  • 7. 正则表达式
  • 8. 枚举类型
  • 函数式编程:
  • 9. 闭包
  • 10. 匿名函数
  • 11. 装饰器

1. 简介

  • Python的特点:简洁

  • Python是面向对象的语言:

    • 把现实解释中各种各样事物的关系和特征映射到计算机中。
  • Python适合的领域:

    • 爬虫
    • 大数据与数据分析
    • 自动化运维与自动化测试
    • Web开发
    • 机器学习
    • 作为“胶水”语言把其他语言开发的模块包装来方便使用
  • Python不适合的领域:

    • 贴近硬件的代码(首选C)
    • 移动开发:iOS/Android有各自的开发语言(ObjC,Swift/Java)
    • 游戏开发:C/C++
  • Python和其他语言对比:


2. 数据类型

  • 不可变类型(值类型):数字、字符串、元组
  • 可变类型(引用类型):列表、集合、字典

  • type(Data) 可查询数据类型函数

  • isinstance(对象, [数据类型1, 数据类型2]) 可判断对象是否是数据类型1…

1. 数字:Number

  • 不可变类型(值类型)
  • 整数:int
  • 浮点数:float

0b开头为二进制,bin(Number) 转换为二进制
0o开头为八进制,oct(Number) 转换为八进制
0x开头为十六二进制,hex(Number) 转换为十六进制
int(Number) 转换为十进制

  • Bool 布尔类型:表示真(True)、假(False)

真表示数字:1
假表示数字:0
bool(Number):Number 为0或空或None则假(False),非0或非空则真(True)。

  • complex:复数

2. 组

1) 序列

(1) 字符串:str

  • 单引号(' ')、双引号(" ")、三引号(''' '''/""" """) 表示字符串。
  • 字符串可以为空
  • 字符串是有序序列,可用下标索引来访问、切片操作
  • 不可变类型(值类型)

  • 转义字符:\

    • 特殊的字符。
    • 无法“看见”的字符。
    • 与语言本身语法有冲突的字符。
    转义字符符号 说明
    \n 换行
    \’ 单引号
    \t 横向制表符
    \r 回车
  • 原始字符串:r

[1] 字符切片

  • 每个字符均有从头部 0开始增大的索引,或从尾部 -1开始减少的索引。
    例:
>>> "hello work"[0]
"h">>> "hello work"[-1]
"k">>> "hello work"[:]
"hello work">>> "hello work"[1:]
"ello work">>> "hello work"[1:3]
"el">>> "hello work"[1:-3]
"ello w">>> "hello work"[:-3]
'hello w'

[2] 字符运算

例:

>>> "hello work" + "s"
"hello works"
>>> "hello work"*3
"hello workhello workhello work"

字符运算无减法、除法,乘法只能乘以整数。

(2) 列表:list

  • 列表的表示方式:[ ]
  • 列表可包含 数字、字符、组
  • 列表可以为空
  • 列表是有序序列,可用下标索引来访问、切片操作
  • 可变类型(引用类型)

例:

["hello",2,True,[1,2],[True,False]]
# 列表可嵌套

[1] 列表切片

  • 每个列表中的元素均有从头部 0开始增大的索引,或从尾部 -1开始减少的索引。

例:

>>> ["hello", "work", "i", "love"][0]
"hello"
# 单一取元素索引>>> ["hello", "work", "i", "love"][0:2]
["hello", "work"]
# : 则取元素列表
>>> ["hello", "work", "i", "love"][-1:]
["love"]

[2] 列表运算

例:

>>> ["hello", "work", "i", "love"] + ["you"]
["hello", "work", "i", "love", "you"]>>> ["you"] * 3
["you", "you", "you"]

列表运算无减法、除法,乘法只能乘以整数。

(2) 元组:tuple

  • 元组表示方式:( )
  • 单一元素的元组需加 , 逗号
  • 元组可包含 数字、字符、组
  • 元组可以为空
  • 元组是有序序列,可用下标索引来访问、切片操作
  • 不可变类型(值类型)

例:

>>> (1,2,3,4,5)
(1,2,3,4,5)
>>> (1,)
(1)
>>> ()
()

[1] 元组切片

  • 每个元组中的元素均有从头部 0开始增大的索引,或从尾部 -1开始减少的索引。

例:

>>> (1,"-1",true)[0]
1# : 则取元素元组
>>> (1,"-1",True)[0:2]
(1,"-1")

[2] 元组运算

例:

>>> (1,"-1",true)+(4,5)
(1,"-1",true,4,5)# : 则取元素元组
>>> (1,"-1",true)*3
(1,"-1",true,1,"-1",true,1,"-1",true)

元组运算无减法、除法,乘法只能乘以整数。

2) 集合:set

  • 定义空集合方式:set()
  • 集合是无序,没有索引,没有切片
  • 集合内所有元素类型要相同
  • 集合自动去重
  • 可变类型(引用类型)

例:

>>> {1, "hello"}
{1, "hello"}

(1) 集合运算

  • 差集:-

例:

>>> {1,2,3,4,5,6} - {3,4}
{1,2,5,6}
  • 交集:&

例:

>>> {1,2,3,4,5,6} & {3,4}
{3,4}
  • 并集:|

例:

>>> {1,2,3,4,5,6} | {3,4,7}
{1,2,3,4,5,6,7}

4) 字典:dict

  • 字典的表示方式:{ }
  • 字典由键值对组成,即 key:value
  • 字典是无序,没有索引、切片操作
  • 通过 key 访问 value
  • key 不能重复,必须为不可变类型(数字、字符串、元组)
  • value 可以是 数字、字符串、组
  • 可变类型(引用类型)

例:

>>> {"2":"hello","1":"work",1:"love"}["1"]
work>>> {"2":"hello","1":"work",1:"love"}[1]
love

3. 变量、表达式、运算符

1) 变量

  • 赋值语句:变量 = 值
  • 变量名可包含字母、数字、下划线,首字母不能为数字
  • 变量名区分大小字
  • 变量名不能用系统关键字(保留字)

2) 表达式

  • 表达式(Expression)是运算符(operator)和操作符(operand)所构成的序列。

3) 运算符


运算符同一级别则按 表达式 从左向右 运算


4. 流程控制语句

  • 条件、循环、分支、枚举
  • 条件、循环、分支、枚举 皆可互相嵌套使用

    • continue 跳出后继续执行
    • break 强制结束控制语句

1) 条件语句

  • if elif else
if 条件判断1:   # True执行语句1
elif 条件判断2: # True执行语句2
else:          # 非真值条件pass       # pass 空语句/占位语句
# if  elif  只执行其中一个

2) 循环语句

  • while else
  • for else
a = True
while a:执行语句
# 死循环b = 1
while b <= 10:b += 1执行语句1
# 执行10次
else:      # while 返回False时执行执行语句2
# 主要是用来遍历/循环、序列或者集合、字典
for 新变量x in 可迭代对象:执行语句1print(x)
else:       # for 结束后执行执行语句2

5. 组织结构

    • 模块

        • 函数、变量

包:文件夹
模块:.py 文件

  • 命名空间:包名.模块名

  • 引用/导入:

    # 同一路径下
    import 模块名# 不同路径下
    import 包名.模块名
    或
    import 包名.模块名 as 新名# 导入模块
    from 包名 import 模块# 导入模块内具体的函数/变量
    from 包名.模块名 import 函数名/变量名# 全部导入模块内所有的函数/变量
    from 包名.模块名 import *
    
  • 包和模块不会被重复导入。

1) 包

定义包:在包内建 __init__.py 文件。

(1) _init_.py

__init__.py 文件在包被使用时会自动加载。# 自动加载模块:
__all__ = ['模块名1','模块名n']

2) 函数

(1) 函数的特性:

  1. 功能性
  2. 隐藏细节
  3. 避免编写重复的代码

(2) 函数基本结构

def funcname(parameter_list):passfuncname(parameter_list)  # 函数调用# 1. parameter_list 参数列表可以没有
# 2. 可使用 return value 来返回结果,否则返回 None

例:

def add(x, y=0):      # y=0 为无传参时默认 y=0result = x + yq = 4return result, q  # 多个则返回元组print('ok')       # 不会被执行def print_code(code):print(code)a = add(1, 2)
b = print_code('python')  # 赋值时函数被调用执行print(a, b)
# 返回:
#    python
#    (3, 4) Nonep1_add, p2_add = add(3, 4)  # 序列解包
print(p1_add, p2_add)
# 返回:
#    7  4

序列解包例:

d = 1, 2, 3  # 生成元组
a, b, c = d  # 序列解包,数量需要相同
# 等同于 a, b, c = [1, 2, 3]

(3) 函数参数

  • 必须参数:形参、实参
  • 关键字参数
  • 默认参数

例:

def add(x, y=0):      # x,y 为形式参数(形参);y=0 为无传参时默认为0(默认参数)result = x + yreturn resulta = add(1, 2)    # 1,2 为实际参数(实参)
b = add(y=3, x=4)  # y=3, x=4 为关键字参数

6. 面向对象

  • 核心:类、对象

1) 类:class

变量代表刻划类的特征,方法代表类的行为。

  • 类最基本的作用:封装
  • 类名首字母大写
  • 类名不建议使用 _ 下划线 分隔,建议使用小驼峰法(即每个不同的单词首字母大写)。
class StudentRoom():def print_file(self):print('name:' + self.name)student = StudentRoom()  # 实例化
student.print_file()     # 调用类的方法

(1)类的 方法 和 函数 的区别

  • 方法:设计层面 (更多是面向对象)
  • 函数:程序运行、过程式的一种称谓 (更多是面向过程)
  • 变量:存在于模块内,一般称为 变量;而存在于类内,一般称为 数据成员。

(2) 类 和 对象 的关系和区别

  • 是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。(抽象概念)

  • 类面向对象设计最重要是:行为特征

    • 要找对主体,即类内的 函数 作用要相似或一致。
  • 对象 是用来表示一个具体的概念。当 类 被实例化后就成为一个具体的对象,并需要传递具体的数据。

  • 类就像是一个模板,通过类可以产生很多的对象。

2) 类的构造函数

  • 构造函数可以生成不同的对象
  • 类被实例化后构造函数会自动被调用
class StudentRoom():def __init__(self):  # 构造函数。passstudent = StudentRoom()  # 实例化

3) 类变量、实例变量、实例方法、类方法、静态方法

class StudentRoom():name = '1'   # 类变量sum = 0# 有self则为 实例方法,代表实例。def __init__(self, name, age): # 构造函数初始化对象的属性self.name = name  # 实例变量,保存特征值print(self.__class__.name)  # 打印类变量。@classmethod   # 类方法。装饰器def plus_sum(cls):cls.sum += 1print(cls.sum)@staticmethod  # 静态方法。装饰器def add(x, y):print('This is a static method')student = StudentRoom('小兔', 20)  # 创建对象
print(student.name)      # 返回 小兔
print(StudentRoom.name)  # 返回 1# __dict__ 保存着所有实例变量
print(student.__dict__)  # 返回 {'name':'小兔'}# 调用 类方法
StudentRoom.plus_sum()# 调用 静态方法
StudentRoom.add(1,2)

类方法和静态方法不能访问实例变量

4) 类的成员可见性

  • 公开成员、私有成员
  • 私有成员外部无法访问
class Student():def __init__(self, name): self.name = nameself.__score = 0  # 含 __ 则为私有变量def marking(self, score): if score < 0:return '负数不合法'self.score = scoreprint(self.name + str(self.score))def do_homework(self):self.do_english_homework()  # 内部调用print('homework')def __do_english_homework(self):  # 含 __ 则为私有方法print()student = Student('小兔')
student.marking(90)   # 保证数据安全  # 返回 小兔90
student.do_english_homework()  # 外部调用
student.__score = -1  # 此非原有类中的私有变量,而是增加新的私有变量。
print(student.__dict__)
print(student._Student__score)  # 间接访问私有变量

5) 面向对象3大特性

  • 继承性、多态性、封装性

(1) 继承性

  • 作用:避免定义重复的方法、重复的变量。

class Human():sum = 0def __init__(self, name, age):self.name = nameself.age = agedef get_name(self):print(self.name)# Student类 继承 Human类。
# Human是Student的父类,Student是Human的子类。
class Student(Human):def do_homework(self):print('english homework')# 子类继承了父类的所有,所以可以调用
student1 = Student('石敢当', 18)
print(Student.sum, student1.sum, student1.name)
student1.get_name()
class Human():def __init__(self, name, age):self.name = nameself.age = agedef do_homework(self):print('This is a parent method')class Student(Human):# 在父类的基础上增加属性def __init__(self, school, name, age):self.school = school# 传参给父类super(Student, self).__init__(name, age)# 和父类同名时,优先调用子类的方法,所以需加superdef do_homework(self):super(Student, self).do_homework()print('english homework')student1 = Student('人民路小学', '石敢当', 18)
print(student1.sum, student1.name)
student1.do_homework()

7. 正则表达式

1) 正则表达式

  • 正则表达式是一个特殊的字符序列,一个字符串是否与我们所设定的这样的字符序列相匹配。
  • 快速检索、实现一些替换文本的操作。
    • 如检查一串数字是否电话号码
    • 如检测一个字符串是否符合email
    • 如把一个文本里指定的单词替换为另外一个单词
a = 'C|Python'print(a.index('Python')>-1)
print('Python' in a)
# 均返回 True# 使用正则表达式匹配
import re
r = re.findall('Python', a)
if len(r) > 0:print(ok)
print(r)    # 返回 ['Python']

8. 枚举类型

  • 枚举是一个类

    • from enum import Enum
  • 枚举类型不能被更改
  • 枚举类型不能有相同标签(常量不能相同)
  • 枚举不返回值
  • 枚举类型不能实例化,属于单例模式

1) 区别

# 方法1:
yellow = 1
green = 2# 方法2:
a = {'yellow':1, 'green':2}# 方法3:
class TypeDiamond():yellow = 1green = 2
以上方法的缺点:可变没有防止相同标签的功能
from enum import Enum  # 枚举类class VIP(Enum):YELLOW = 1GREEN = 2BLACK = 1    # 值相同时,BLACK相当于YELLOW的别名,即YELLOW_ALIASprint(VIP.YELLOW)         # <enum 'VIP'>
# 返回: VIP.YELLOW
print(VIP.BLACK)
# 返回: VIP.YELLOW
print(VIP['YELLOW'])
# 返回: VIP.YELLOW
print(VIP.YELLOW.value)
# 返回: 1
print(VIP.YELLOW.name)    # <class 'str'>
# 返回: YELLOWfor v in VIP:print(v)
# 返回:(别名枚举不会被遍历)
#    VIP.YELLOW
#    VIP.GREENfor v in VIP.__members__:print(v)
# 返回:
#    YELLOW
#    GREEN
#    BLACKfor v in VIP.__members__.items():print(v)
# 返回:
#    ('YELLOW',<VIP.YELLOW: 1>)
#    ('GREEN',<VIP.YELLOW: 2>)
#    ('BLACK',<VIP.YELLOW: 1>)

2) 枚举比较

  • 枚举类型能做 等值比较、身份比较,不能做 大小比较
from enum import Enumclass VIP(Enum):YELLOW = 1GREEN = 2result1 = VIP.GREEN == VIP.YELLOW
print(result1)    # 返回:Falseresult2 = VIP.GREEN == 2
print(result2)    # 返回:Falseresult3 = VIP.GREEN is VIP.GREEN
print(result3)    # 返回:Trueclass VIP1(Enum):YELLOW = 1GREEN = 2result = VIP.GREEN == VIP1.GREEN
print(result)    # 返回:False
from enum import Enumclass VIP(Enum):YELLOW = 1GREEN = 2a = 1
# 变成枚举类型,并非真正的类型转换
print(VIP(a))   # 返回:VIP.YELLOW
from enum import IntEnum  # 必须是数字
from enum import unique@unique    # 不允许值重复
class VIP(IntEnum):YELLOW = 1GREEN = 2

函数式编程:

  • 命令式编程:如 def 、if else、for …
  • 函数式编程:如 map、reduce、filter、lambda …

9. 闭包

  • 闭包 = 函数 + 环境变量(函数定义时候)

例:

def curve_pre():a = 25    # 环境变量def curve(x):return a*x*xreturn curvea = 10
f = curve_pre()
print(f(2))    # 返回: 100
def f1():a = 10def f2():a = 20print(a)  # 返回: 20print(a)      # 返回: 10f2()print(a)      # 返回: 10f1()
# 返回:10  20  10
# 改变全部变量的方法:
origin = 0    # 全局变量def go(step):global originnew_pos = origin + steporigin = new_posreturn new_posprint(go(2))      # 返回: 2
print(go(3))      # 返回: 5
print(go(6))      # 返回: 11# 闭包的方法:
origin = 0def factory(pos):def go(step):nonlocal posnew_pos = pos + steppos = new_posreturn new_posreturn gotourist = factory(origin)
print(tourist(2))      # 返回: 2
print(tourist(3))      # 返回: 5
print(tourist(6))      # 返回: 11
print(origin)          # 返回: 0

10. 匿名函数

  • 不定义函数名的函数。

lambda 表达式:

lambda parameter_list: expression

例:

def add(x, y):return x + yadd(1, 2)# 等同于:
f = lambda x,y: x+y
f(1, 2)

三元表达式:

条件为真时返回的结果 if 条件判断 else 条件为假时的返回结果

例:

x = 2
y = 1
r = x if x > y else y
print(r)    # 返回:2

map 类:

  • 把一个集合里的元素映射到新的集合里。
list_x = [1,2,3]def square(x):return x * xr = map(square, list_x)
# 等同于:
#for x in list_x:
#   square(x)print(list(r))    # 返回:[1,4,9]
list_x = [1,2,3]
r = map(lambda x: x*x, list_x)
print(list(r))    # 返回:[1,4,9]
list_x = [1,2,3,4,5]
list_y = [1,2,3]
r = map(lambda x,y: x*x+y, list_x, list_y)
print(list(r))    # 返回:[2,6,12]

reduce 函数:

  • 连续计算,连续调用 lambda,每一次的计算结果作为下一次计算的参数。
from functools import reducelist_x = [1,2,3,4]
r = reduce(lambda x,y: x+y, list_x)
print(r)    # 返回:10
# ((1+2)+3)+4r = reduce(lambda x,y: x+y, list_x, 10)  # 10为初始值
print(r)    # 返回:20
# (((10+1)+2)+3)+4

filter 类:

  • 过滤器
list_x = [1,0,1,0,0,1]
filter(lambda x: True if x==1 else False, list_x)
print(list(r))    # 返回:[1,1,1]

11. 装饰器

  • 在不修改原函数代码的情况下,增加功能。
  • 装饰器符号:@
  • 一个函数可以增加多个装饰器

例:

import timedef f1():print('This is a function')# 在不修改原函数的情况下,增加打印时间戳
def print_current_time(func):print(time.time())func()print_current_time(f1)
import time
# 装饰器
def decorator(func):def rint_current_time():print('123')func()return rint_current_timedef f1():print('This is a function')f = decorator(f1)
f()
import time
# 装饰器
def decorator(func):# * 为可变参数, ** 为关键字参数def rint_current_time(*args, **kw):print(time.time())func(*args, **kw)return rint_current_time# 装饰器名字
@decorator
def f1(func_name, **kw):print('This is a function')f1('test func', a=1, b='2')

注:资料整理来源于:https://www.imooc.com/

轻松玩转AI(从Python开始之Python3入门)相关推荐

  1. ChatGPT提示词指令大全调教指南,6个网站让你轻松玩转AI聊天机器人!

    ChatGPT提示词大揭秘!6个网站让你轻松玩转AI聊天机器人! ChatGPT 的火热程度大家都看在眼里.很多人都想知道 : 要想用好 ChatGPT 需要什么 Prompt 提示词.提问模板 经常 ...

  2. 还在加班做数据吗?今天1分钟教你学会用Python轻松玩转Excel

    前言 当你需要每天对 Excel 做大量重复的操作,如果只靠人工来做既浪费时间,又十分枯燥,好在 Python 为我们提供了许多操作 Excel 的模块,能够让我们从繁琐的工作中腾出双手. 今天就和大 ...

  3. Eclipse轻松玩转SmartFramework

    2019独角兽企业重金招聘Python工程师标准>>>        SmartFramework框架和 SmartSample都是使用Maven构建,使用IDEA开发的.对于像我这 ...

  4. oracle行列转换关联union的方式_几行代码轻松玩转 Excel 行列转换

    几行代码轻松玩转 Excel 行列转换 下面这种交叉式的 Excel 表是很常见的格式,用来填写和查看都比较方便: 但是,如果想做进一步的统计分析,这种格式就不方便了,需要行列转换,变成如下格式的明细 ...

  5. pandas 选择数据 字符串_读完本文,轻松玩转数据处理利器Pandas 1.0

    选自Medium 作者:Tom Waterman机器之心编译参与:李诗萌.魔王 2020 年 1 月 9 日 Pandas 1.0.0rc 版本面世,Facebook 数据科学家 Tom Waterm ...

  6. 轻松玩转树莓派Pico之三、Windows+Ubuntu虚拟机模式下VSCode C语言开发环境搭建

    目录 1.VSCode下载与安装 2.VSCode基础插件安装 3.SSH连接与配置 4.SSH免密登录 5.Pico编译 工欲善其事,必先利其器.之前的介绍的Pico流程都是通过命令行编译,没有进行 ...

  7. ModelArts+MindSpore,前端小工和“MM“玩转AI

    转载地址:ModelArts+MindSpore,前端小工和"MM"玩转AI_MindSpore_昇腾论坛_华为云论坛 作者:胡琦 ModelArts+MindSpore,前端小工 ...

  8. python人脸识别代码百度ai_强大的AI!Python几行代码,就能预测未来孩子的长相?...

    这次,将百度智能云中的人脸识别功能与python结合起来进行实验花了一些时间.结果非常令人满意,而且过程非常简单而不复杂.或许,你可以整合你孩子的外貌.让我们一起敲击键盘. 准备百度人工智能开放平台账 ...

  9. 用Python玩转数据:python基础语法

    ---以下笔记来源于视频教程<用Python玩转数据> Python常用开发工具 Python标准的集成开发环境IDLE. 在linux下使用vim. eclipse+Pydev(可以不用 ...

最新文章

  1. 进入贝壳网_贝壳网app下载安装
  2. 图解Silverlight 3的7个新功能
  3. 学校计算机二级模拟上机能看分数吗,全国计算机二级考试机试考完怎么储存的...
  4. php功能大马加密乱码,php大马加密工具 phpTrace:奇虎360开源的PHP脚”的相关知识...
  5. matlab调用ANSYS--------2
  6. mesos marathon mysql_Mesos和Marathon简介
  7. 重磅!华为云社区·CSDN【寻找黑马程序员】有奖征文活动奖项公布!!
  8. 继续ajax长轮询解决方案--递归
  9. Python爬虫Scrapy入门
  10. 【ARM】2410裸机系列-中断处理
  11. nmap扫描服务器端口不稳定,端口扫描命令nmap
  12. Eclipse下如何使用Maven——超详细教程
  13. Python 自动批量生成发卡平台卡密信息并导入数据库
  14. 估计值与平均值的离差平方和_各变量值与其算术平均数的离差平方之和为()
  15. 用tushare数据自定义期货大宗商品指数(1)
  16. mac虚拟摄像头插件_macOS平台下虚拟摄像头的研发总结
  17. abaqus 录制结果动画_录制和编辑动画 | Adobe Character Animator 教程
  18. 基于ESP8266称重式压力传感器(接入阿里云物联网平台)
  19. #今日论文推荐# IJCAI 2022 | 求同存异:多行为推荐的自监督图神经网络
  20. 手机号码归属地查询,免费API

热门文章

  1. 时间序列数据Correlogram图分析
  2. 数据库应用——MySQL基础知识和操作数据库
  3. 将kindle中的书导入群晖DS218Play
  4. iOS Charles Proxy 教程
  5. 真正可用win10 x64位twain协议虚拟扫描仪.net C#Twain连接打印机扫描仪winform测试demo
  6. 头插法和尾插法创建单链表
  7. 读书笔记-别说你懂写网文
  8. scratch如何制作英语类的游戏?(附少儿编程平台源码)
  9. platform驱动的probe过程
  10. android 模拟器 host修改