轻松玩转AI路径:
从Python开始:
Python3入门 目录:
Python的特点:简洁
Python是面向对象的语言:
Python适合的领域:
Python不适合的领域:
可变类型(引用类型):列表、集合、字典
type(Data) 可查询数据类型函数
1. 数字:Number
0b开头为二进制,bin(Number) 转换为二进制
0o开头为八进制,oct(Number) 转换为八进制
0x开头为十六二进制,hex(Number) 转换为十六进制
int(Number) 转换为十进制
真表示数字:1
假表示数字:0
bool(Number):Number 为0或空或None则假(False),非0或非空则真(True)。
2. 组
1) 序列
(1) 字符串:str
单引号(' ')、双引号(" ")、三引号(''' '''/""" """)
表示字符串。不可变类型(值类型)
转义字符:\
转义字符符号 | 说明 |
---|---|
\n | 换行 |
\’ | 单引号 |
\t | 横向制表符 |
\r | 回车 |
原始字符串:r
[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] 列表切片
例:
>>> ["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] 元组切片
例:
>>> (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
例:
>>> {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
例:
>>> {"2":"hello","1":"work",1:"love"}["1"]
work
>>> {"2":"hello","1":"work",1:"love"}[1]
love
1) 变量
2) 表达式
3) 运算符
条件、循环、分支、枚举 皆可互相嵌套使用
1) 条件语句
if 条件判断1: # True
执行语句1
elif 条件判断2: # True
执行语句2
else: # 非真值条件
pass # pass 空语句/占位语句
# if elif 只执行其中一个
2) 循环语句
a = True
while a:
执行语句
# 死循环
b = 1
while b <= 10:
b += 1
执行语句1
# 执行10次
else: # while 返回False时执行
执行语句2
# 主要是用来遍历/循环、序列或者集合、字典
for 新变量x in 可迭代对象:
执行语句1
print(x)
else: # for 结束后执行
执行语句2
包:文件夹
模块:.py 文件
命名空间:包名.模块名
引用/导入:
# 同一路径下
import 模块名
# 不同路径下
import 包名.模块名
或
import 包名.模块名 as 新名
# 导入模块
from 包名 import 模块
# 导入模块内具体的函数/变量
from 包名.模块名 import 函数名/变量名
# 全部导入模块内所有的函数/变量
from 包名.模块名 import *
包和模块不会被重复导入。
1) 包
定义包:在包内建 __init__.py 文件。
(1) _init_.py
__init__.py 文件在包被使用时会自动加载。
# 自动加载模块:
__all__ = ['模块名1','模块名n']
2) 函数
(1) 函数的特性:
(2) 函数基本结构
def funcname(parameter_list):
pass
funcname(parameter_list) # 函数调用
# 1. parameter_list 参数列表可以没有
# 2. 可使用 return value 来返回结果,否则返回 None
例:
def add(x, y=0): # y=0 为无传参时默认 y=0
result = x + y
q = 4
return result, q # 多个则返回元组
print('ok') # 不会被执行
def print_code(code):
print(code)
a = add(1, 2)
b = print_code('python') # 赋值时函数被调用执行
print(a, b)
# 返回:
# python
# (3, 4) None
p1_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 + y
return result
a = add(1, 2) # 1,2 为实际参数(实参)
b = add(y=3, x=4) # y=3, x=4 为关键字参数
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): # 构造函数。
pass
student = 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 += 1
print(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 = name
self.__score = 0 # 含 __ 则为私有变量
def marking(self, score):
if score < 0:
return '负数不合法'
self.score = score
print(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 = 0
def __init__(self, name, age):
self.name = name
self.age = age
def 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 = name
self.age = age
def 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)
# 和父类同名时,优先调用子类的方法,所以需加super
def do_homework(self):
super(Student, self).do_homework()
print('english homework')
student1 = Student('人民路小学', '石敢当', 18)
print(student1.sum, student1.name)
student1.do_homework()
1) 正则表达式
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']
1) 区别
# 方法1:
yellow = 1
green = 2
# 方法2:
a = {'yellow':1, 'green':2}
# 方法3:
class TypeDiamond():
yellow = 1
green = 2
以上方法的缺点:
可变
没有防止相同标签的功能
from enum import Enum # 枚举类
class VIP(Enum):
YELLOW = 1
GREEN = 2
BLACK = 1 # 值相同时,BLACK相当于YELLOW的别名,即YELLOW_ALIAS
print(VIP.YELLOW) #
# 返回: VIP.YELLOW
print(VIP.BLACK)
# 返回: VIP.YELLOW
print(VIP['YELLOW'])
# 返回: VIP.YELLOW
print(VIP.YELLOW.value)
# 返回: 1
print(VIP.YELLOW.name) #
# 返回: YELLOW
for v in VIP:
print(v)
# 返回:(别名枚举不会被遍历)
# VIP.YELLOW
# VIP.GREEN
for v in VIP.__members__:
print(v)
# 返回:
# YELLOW
# GREEN
# BLACK
for v in VIP.__members__.items():
print(v)
# 返回:
# ('YELLOW',)
# ('GREEN',)
# ('BLACK',)
2) 枚举比较
from enum import Enum
class VIP(Enum):
YELLOW = 1
GREEN = 2
result1 = VIP.GREEN == VIP.YELLOW
print(result1) # 返回:False
result2 = VIP.GREEN == 2
print(result2) # 返回:False
result3 = VIP.GREEN is VIP.GREEN
print(result3) # 返回:True
class VIP1(Enum):
YELLOW = 1
GREEN = 2
result = VIP.GREEN == VIP1.GREEN
print(result) # 返回:False
from enum import Enum
class VIP(Enum):
YELLOW = 1
GREEN = 2
a = 1
# 变成枚举类型,并非真正的类型转换
print(VIP(a)) # 返回:VIP.YELLOW
from enum import IntEnum # 必须是数字
from enum import unique
@unique # 不允许值重复
class VIP(IntEnum):
YELLOW = 1
GREEN = 2
例:
def curve_pre():
a = 25 # 环境变量
def curve(x):
return a*x*x
return curve
a = 10
f = curve_pre()
print(f(2)) # 返回: 100
def f1():
a = 10
def f2():
a = 20
print(a) # 返回: 20
print(a) # 返回: 10
f2()
print(a) # 返回: 10
f1()
# 返回:10 20 10
# 改变全部变量的方法:
origin = 0 # 全局变量
def go(step):
global origin
new_pos = origin + step
origin = new_pos
return new_pos
print(go(2)) # 返回: 2
print(go(3)) # 返回: 5
print(go(6)) # 返回: 11
# 闭包的方法:
origin = 0
def factory(pos):
def go(step):
nonlocal pos
new_pos = pos + step
pos = new_pos
return new_pos
return go
tourist = factory(origin)
print(tourist(2)) # 返回: 2
print(tourist(3)) # 返回: 5
print(tourist(6)) # 返回: 11
print(origin) # 返回: 0
lambda 表达式:
lambda parameter_list: expression
例:
def add(x, y):
return x + y
add(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 * x
r = 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 函数:
from functools import reduce
list_x = [1,2,3,4]
r = reduce(lambda x,y: x+y, list_x)
print(r) # 返回:10
# ((1+2)+3)+4
r = 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]
例:
import time
def 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_time
def 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/