函数
def 函数名(参数1、参数2、参数3…..):
语句1
语句2
Return 返回值1,返回值2
结果变量1,结果变量2=函数名(参数1、参数2、参数3….)
示例
def abc(a,b,c):
print(`{},{},{}`.format(a,b,c))
print(`the sum is {}`.format(a+b+c))
abc(1,2,3)
1,2,3
the sum is 6
行数就像工厂那种流水作业线一样,你给它设计好规则,放进去原材料,开始运行,这里原材料就是参数,规则就是语句,得到的产品就是返回值你就得准备多少变量用来装它。
示例
def bed (a,b,c):
b+=c
def m(a,b):
b+=a
def r(a,b,c):
a=b+c
return a
return r(a,b,c)
return m(a,b)
final = bed (1,2,3)
print (final)
9
如果程序中某些地方看不懂第一个方法就是调试,用debug的方法;第二个方法就是输入print。
作业1 编写函数,包含两层,结构如下:
函数写段子(参数1为人名,参数2为地点,参数3为动作):
子函数 描写角色(参数1);
return 描写好的语句1
子函数 描写地点(参数2);
return 描写好的语句2
子函数 描写动作(参数2);
return 描写好的语句3
列表生成式与生成器
生成器保存算法
a_list=[x*x for in range (0,9)]
print(a_list)
b_list = (x*x for x in range(0,9))
print(next(b_list))
print(next(b_list))
print(next(b_list))
print(next(b_list))
print(next(b_list))
[0,1,4,9,16,25,36,49,64]
0
1
4
9
16
它生成的是一个列表,把方括号变成圆括号,这个时候它就叫做生成器。
斐波拉契数列(Fibonacci)除前两个数以外,任意的数都由前两个数相加得到。
1.1.2.3.5.8.13.24.34…..
def fibonacci(max):
n,a,b = 0,0,1
while n<max ;
yield b
a, b =b. a+b
n= n+1
fib = fibonacci(6)
生成器与函数不同,函数可以直接调用,且遇到return才返回,生成器由next调用,且遇到yield就返回,但是会记录程序执行的位置,下次继续执行。
迭代器 可以直接作用于for循环的对象统称为可迭代对象:lterable
迭代器的对象是数据流
def ite(n):
m=n+1
If m<100;
n = iter(m)
return n
递归
return True else: # 开始递归调用函数,并接受其返回值: rec_result = createFile(os.path.dirname(dirname)) if rec_result: # 如果不存在该目录,则创建dirname的目录,并返回已经创建(存在)的值True: os.mkdir(dirname) return True createFile('./aa/bb/cc')
类 类是抽象的模板,实例是创建出来具有类特征的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。
class Ai(object);
pass
new_bot=Ai()
print(new_bot)
print(Ai)
new_bot.walk = ’Step by step’
print(new_bot.walk)
面向对象我们可以把这一组对象放置成一个类,这一类的对象重复统一的东西。
class Ai2(object);
def __init__(self, name, talk);
self.name = name
self.talk = talk
new_bot = Ai2(‘bot1’,Hello Bot’)
print (new_bot.name)
print (new_bot.talk)
当然通常的情况是,我们在建立类的时候,就设计好实例化时所需要填写的属性资源,然后通过定义init方法,可以在创建实例时为属性赋值。
init的第一个参数永远是实例变量self,并且,调用时,不用传递该参数。
数据封装 通过在类中建立方法,让每位类成员都能调用该方法,但各自的数据是分别保存的。
class Ai(object);
def init(self, name, talk);
self.name = name
def record_(self, data);
datas = self。name + data
return datas
new_bot1 = Ai(‘bot1’)
new_bot2 = Ai(‘bot2’)
bot1_datas = new_bot1.record(‘1001’)
bot2_datas = new_bot2.record(‘1010’)
print(bot1_datas)
print(bot2_datas)
作业2
创建一个编写情书的类
要求:
实例化此类必须输入男孩名字
类包含一个写情书的方法,该方法必须输入女孩名字与性格(三种性格爱玩、爱睡、爱吃)
该方法中增加if...else判断,针对每种性格自动输出带女孩名字的一句话情书,这句话末尾要加上男孩名字
编写好后进行实例化
访问限制 因为python中变量不需要声明,但是仍然有方法可以做到在类中保护私有信息。
多态 一个类可以看作一个数据类型,子类具备两个或以上数据类型,我们称为多态。
·方便为一个类新增子类
·调用起来不需要修改外部函数
获取对象类型
以下函数可以获取对象类型: type():判断常用对象的类型
Isinstance():针对类里面的继承关系有很好的效果
dir():获得对象的所有属性和方法
错误处理
错误如果没有被捕获,就会一直向上抛,由底层函数抛到外层函数,最终被Python解释器捕获,打印错误信息并使程序退出。
try
print(‘try….’)
r = 10/0
print(‘result:’,r)
except ZeroDivisionError as e:
print(‘except:’,e)
finally:
print(‘finally…’)
print(‘END’)
try...
except:division by zero
finally...
END