随堂笔记16day

复习

  1.作用域

  2.return可返回任何值(包含函数,意思是返回值可以返回函数)

没有return返回None例子:

  def test1():

    print('in the test1)--------------------- (2)

  def test():

    print('in the test)-------------------------(1)

    return test1

res = test()

print(res())------------------------------------------(3)

************************************************

result:

in the test ————(1)

in the test1————(2)

None------------------------------因为test1没有return值(3)

 

函数名称(test)-------内存地址

函数名+( )括号-------运行这个函数

 

注意事项:

  不可以一步进入子程序,要一层层运行才能进入子程序。

匿名函数

  lambda x :x+1

其中:x是形参,x+1是返回值(表达式)

 

要获得函数的运行结果:     函数结果要赋给一个变量保存值。

 

fun = lambda x : x+1

print(fun(10))

匿名函数就是没有名字的函数,没有名字运行完就会马上会被内存回收。

 

lambda函数通常会与其他函数一起用(def),不会单独存在,

如果单独存在,python解释完了之后就会马上被内存回收。

 

匿名函数不应该存在复杂的逻辑运算:

  lambda x :if x > 1...等等

        x:后面应该是一个明确的返回值

可以是 lambda x : startswith(N)

        这样可以,返回值是True和False

lambda的冒号后面一定是最终返回结果

 

lambda x,y,z:(x+1, y+1, z+1)--------------可以多个值运算格式

 

编程方法论(流派)

  1.面向过程

  2.函数体

  3.面向对象

要形成自己的风格

  面向过程:将大的问题分解成几个小的问题

  函数就是编程(最早)

    函数式 = 编程语言定义的函数 + 数学意义的函数

    1.不可变,不用变量保存状态,不修改变量

    2.第一类对象,函数即“变量”

    3.尾调用

 

把函数当作参数传给另一个参数

def foo(n):

  print(n)

def bar(name):

  print('my name is %s" %name)

foo(bar ('wwe'))

***********************************

result:

my name is wwe

None -------------------------因为bar没有return,所以返回值为None

 

注意-------------最后一步 <>最后一行

 

高阶函数定义(满足其中一项即可)

1.把函数当作参数传给另一个函数 | 函数接受的参数是一个函数名称

2.返回值中包含函数

 

---------------------------------------------------------------------------------------------------------------

map函数

array==参数

func==函数运算

 

def map_test(func, array):

  ret [ ] -------------------这个是表示空的列表,用来接收作用

  for i in num_1:

    res = func( i )    *****

    ret.append(res) ***********add_one(i)写死逻辑,这个例子应该是为了表达出,逻辑被写死,不够灵活,扩张性不好

  return ret                   ****

 

print(map_test (add_one,num_1) )---------可以写成--------print(map_test ( lanbda x : x+1,num_1)   匿名函数是用于简单逻辑(不能太复杂和不能没有明确的返回值)

其中:

  map_test() 是函数逻辑

  add_one   是要求

  num_1   是参数

 

map函数是个迭代器,只能迭代一次-----------?为什么,忘记怎么理解了

  map ( lambda x : x+1, num_1)

  其中  lambda x : x+1    是处理方法------------如果是逻辑很精简的用lambda,如果逻辑太复杂则要用自己定义的函数

    num_1     是参数-----------进行for循环赋值给map

 

print(传的是有名函数,list(map(reduce_one, num_1) ) )

 

函数是编程,缺点是易读性差,优点是精简。

 

 

*****  filter函数   ******

 

def filter_test (array):  ——————其中array不要写成movice_people; 因为会修改到movice_people这个全局变量

  ret [ ]

  for p in array:

    if not p.startswith(' sb' ):

      ret.append(p)

  return ret

res = print (filter_test(movic_people) )  ------------这里调用movice_people 不会修改全局变量。

res的作用是保存,要保存就赋值给一个变量,类似挂门牌

 

注意:

print ( a =filter_test(movice_people) )   ---------这样是打印的是a赋值的过程

 

print(filter (lambda n :n.endswith('sb) , movice_people) --------------------这样是打印成内存地址,要在前面加上list(用列表形式保存值)

            这个是根据n.endswith('sb) 的布尔值,来选择保留(true)movice_people保留值。

*************************************************************************************************************************

 

reduce函数

  from functools import reduce ---------------->>>>>>意思是从functool模块中,导入reduce功能

  def reduce_test (func,array, init = None)>>>>>>>>>>其中init = None是默认参数

  reduce函数

    reduce (function----函数,sequence------序列, inital = None-----初始值参数)

----------------------------------------------------------------------------------------------------------------------------------------------

总结(小结)

map():

  处理序列中的每个元素,得到的结果是一个“列表”,该“列表”元素个数及位置与原来的一样

 

filter():

  遍历序列中的每个元素,判断每个元素得到布尔值,如果布尔值是True,则留下来

-------------------------------------------------------------------------------------------------------------------------------------------

内置函数:

  abs()——取绝对值

  all ( n ) ---------其中 n = [1, 2, 4],  all( ) 会将列表中所有的元素进行布尔运算,

          特例:如果是个空的是返回True,这个是在注释里写的,可以去看看

  any()—— 里面有一个是真,则全为真

  bin ( ) ——将十进制转二进制

  bool() ——判断布尔值,( 空,None, 0 布尔值为False)其余都为True

  bytes()——把一个字符转换成字节

      例如 :

name = '你好'
print(bytes(name,encoding = 'utf8'))


------resul---------------

b'\xe4\xbd\xa0\xe5\xa5\xbd'

其中\x 表示是十六进制(标识)

utf-8 中文是3个字节

gbk   中文是2个字节

bytes()存在的意义是,因为网络传输只能传二进制

  print(bytes (name,encoding = ‘utf-8’).decode('utf-8))   --------------------其中decode是解码作用,用什么编码就用什么解码

注意:ascil码不能编中文

 

chr():

  print(chr(91))-----------------------打印的结果是  a  ,chr()中给个数字,就会打印成在ascil表里相应位置的字符

dict()?

 

dir()打印某个对象下面有哪些方法,只打印名称。作用是查看作用

 

dirmod()-------运用于分页功能

  dirmod(10,3)    --------10可以是一共多少信息,而3是一页放多少信息。

  --------result---------

  (3, 1)取商得余。3为商,1为余。因为余不为0,所以要多分一页。

dic = {name : ‘wwe’} 字典

 

eval()---------------------------------很重要------------------------

d1 = eval(dic_str)   --------------将字符串中的数据结构提取出来(1)

d1[ 'name']

---------------------result---------------------

wwe

 

eval的第二个功能,把字符串中表达式进行运算

  express = ‘1+2*(3/3-1)- 2’   表达式是字符串形式

  eval(express)

-----------result-------------

  -1.0

 

frozenset() frozenset() 返回一个冻结的集合,冻结后集合不能再添加或删除任何元素。

 

hash()

  可以hash的数据类型是不可变数据类型,反之

  hash是一种算法,可以防止软件被篡改(通过hash值前后判断)

help()帮助

 

bin()十进制转二进制

hex()十进制转十六进制

oct()十进制转八进制

 

isinstance(1,int )  ---------------判断1是不是int类型,返回是布尔值。

          str

       list      其中([  ]   ,list) —— True

       dict

locals()本地,当前级别

max()取最大值

min()取最小值

 

  

 

posted @ 2018-03-06 07:54  牢妖  阅读(101)  评论(0编辑  收藏  举报