面向对象
面向对象编程将数据和操作数据的方法封装到对象中,组织代码和数据的方式更接近人的思维。
python支持面向过程、面向对象,函数式编程等
面向过程POP
面对过程更加关注流程,按照步骤实现。适合小规模程序。
面向对象OOP
关注对象之间的关系,适合编写大规模程序。
先找名词,再找动词
面向对象
面向对象编程将数据和操作数据的方法封装到对象中,组织代码和数据的方式更接近人的思维。
python支持面向过程、面向对象,函数式编程等
面向过程POP
面对过程更加关注流程,按照步骤实现。适合小规模程序。
面向对象OOP
关注对象之间的关系,适合编写大规模程序。
先找名词,再找动词
LEGB规则
python查找名称时,按照LEGB规则查询
Local 函数或者类的方法内部
Enclosed 嵌套函数,闭包
Global 全局变量
Built in Python为自己保留的特殊名称
def outer():
str="outer"
def inner()
str="inner"
print(str)
pass
inner()
outer()
global声明全部变量
nonlocal申明外部函数的局部变量
嵌套函数(内部函数)
嵌套函数:
在函数内部定义的函数
1.封装-数据隐藏
2.避免函数内部重复代码
3.闭包
递归函数阶乘计算
def factorial(n):
if n ==1:
return 1
else:
return n*factorial(n-1)
result = factorial(5)
print(5)
递归函数
递归函数,类似于数学归纳法。
每个递归函数必须包含两个部分:
1.终止条件
2.递归步骤
栈先进后出
eval()函数
执行一个字符串
eval(source[,globals[,locals]])
globals:可选,必须是字典
locals:可选,任意映射对象
lambda表达式
lambda表达式可以用来声明匿名函数。只允许包含一个表达式,不能包括复杂语句。该表达式的计算结果就是函数的返回值。
lambda 形参1,形参2,形参3: <表达式>
运算结果是表达式的运算结果
f= lambda a,b,c:a+b+c
print(f(2,3,4))
可变参数
可变数量的参数
1. *,将多个参数收集到一个'元组'对象中。
2. **,将多个参数收集到一个'字典'对象中。
强制命名参数
参数的几种类型
位置参数
按照位置传递的参数
默认值参数
为某些参数设置默认值,这些参数传递时可选。
命名参数
按照形参的名称传递参数
传递不可变对象是浅拷贝
浅拷贝和深拷贝
浅拷贝:不拷贝子对象的内容,只拷贝引用
深拷贝:子对象的内存也全部拷贝,子对象修改不影响源对象
参数的传递
从实参到形参的赋值,引用传递。
1.可变对象,直接作用于原对象本身
2.不可变对象,生出新的对象空间
可变对象有:字典、列表、集合、自定义对象等
不可变对象:数字、字符串、元组、function等
函数也是对象,内存底层分析。
文档字符串
help(函数名._doc_)打印函数的文档字符串
函数用法和底层分析
函数的基本概念
1. 一个程序由一个个任务组成。函数就是代表一个任务或一个功能
2. 函数是代码复用的通用机制
python函数的分类
1. 内置函数
2. 标准库函数
3. 第三方库函数
4. 用户自定义函数
函数的定义和调用
核心要点
def 函数名([参数列表]):
#文档说明
函数体/若干语句
绘制不同颜色的多个同心圆
import turtle
t = turtle.Pen()
my_colors=('red','green','pink','black')
t.speed(10)
for i in range(10):
t.penup()
t.goto(0,-i*10)
t.pendown()
t.color(my_colors[i%len(my_colors)])
t.circle(15+i*10)
turtle.done()
推导式创建序列
列表推导式
[表达式 for item in 可迭代对象 if 条件判断]
[x*2 for x in range(1,20) if x%5==0]
cells = [(row,col) for row in range(1,10) for col in range(1,10)] #可以使用两个循环
字典推导式
{key : value for 表达式 in 可迭代对象}
my_text ='i love you, i love he, i love 123'
char_count ={c:my_text.count(c) for c in my_text}
集合推导式
{key for 表达式 in 可迭代对象}
b={x for x in range(1,100) if x%9 ==0}
生成器推导式(生成元组)
一个生成器只能运行一次
使用zip()并行迭代
zip()对多个序列进行并行迭代