机器学习与网络安全之面向对象

126 阅读4分钟

函数

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