Day3 函数

1.   面向对象  ---类,class

  面向过程   ---过程,def

  函数式编程  --函数,def

2.过程和函数的区别:

  过程是没有返回值的函数。

  返回值可以为数字,字符串,列表,字典。没有定义返回值时,返回None。

def func():
    'func'      #函数
    print('hello')
    return 0

def func2():
    'process'    #过程
    print('hello')
    

 3.使用函数的三大优点:

  a.可扩展性

  b.可重复性

  c.保持一致性

  eg.  

import time
def logger():
    with open("a.text",'a+') as f:

        time_format='%y-%m-%d %x'
        time_current = time.strftime(time_format)
        f.write('\n%s first time\n'%time_current)

def func1():
    print('in the test 1')
    logger()
def func2():
    print('in the test 2')
    logger()
def func3():
    print('in the test 3')
    logger()
func1()
func2()
func3()
函数示例

 

4.位置参数调用:需要实参和形参一一对应

 关键字调用:  与形参顺序无关

  def test(x,y)

    print(x)

    print(y)

  test(x=1,y=2)  #关键字调用

  test(1,2)    #位置参数调用

  test(2,y=3)     #关键参数不能写在位置参数前面。

5.默认参数特点:调用函数的时候,默认参数非必须传递。

     用途:a.默认安装值

     eg. def conn(host,port =3306)

          pass

6.参数组

  a.   def test(*args):    #   *args接受多个位置参数,转换为元组

      print(args) 

  b。与位置参数混合使用

    def test(x,*args)

      print(x)

      print(args)

    test(1,2,3,4,5)

       结果:1

      (2,3,4,5)  

  c.**kwargs 把N个关键字参数,转换成字典的方式

   def test(**kwargs)

      print(kwargs)

    test(name = 'alex',age = 8,sex ='F')

   结果:{'name' : 'alex','age' :8,'sex':'F'}

  参数组一定要放在位置参数,默认参数之后。

7.递归

  a.必须要有明确的结束条件,否则会死循环,递归循环次数默认为998次。

  b.每次进入更深一层递归时,问题规模相比上次递归应有所减少。

  c.递归效率不高,递归层数过多会导致栈溢出。(因为函数调用是通过栈这种数据结构来实现的,每当进入一个函数调用,就会加一层栈帧,每当函数返回,会减少一层栈帧,由于栈的大小不是无限的,所以当递归次数过多时,会导致栈溢出。)

8.匿名函数:

9.函数式编程:

  a.函数式编程的语言:lisp,haspshell,erlang

  b.Python只支持部分函数式编程。

  c.把运算过程尽量写成一系列嵌套的函数调用。

10.高阶函数:

  函数的参数能接受变量,变量能接受函数,那么一个函数也可以接受另外一个函数作为参数,这就叫高阶函数。  

def add(a,b,f):
    return f(a)+f(b)

print(add(4,-1,abs))

 

 11.把字符串转换为字典

  b = eval (a)  #a 是字符串,b 为字典

12.内置函数

abs() :  绝对值

all():     如果迭代器里所有的元素为真则返回真,否则返回false

any():    如果迭代器里任意一元素为真则返回真,否则返回false

ascii():  把内存的数据对象编程可打印的字符串的形式

bin():     把数字由十进制转二进制

bool():   0为假,1 为真,空为假

bytearray():把二进制变成数组的格式然后编辑修改

callable():   看是否可调用, eg.函数,类可调用

chr():      将数字转换为ASCII表对应的字符

ord():     将ASCII 的字符转换为相应的数字

classmethod():类方法

compile():   用于编译代码,可以将一段代码转成字符串,在赋给一个变量,再动态调用/

      用exec直接调用

complex():   复数

delattr():    

dict():    字典

dir():      比如有一个字典,,dir可以查看字典里有什么方法。双下划綫的是内部方法,除了next的内部方法可以用,其余的不能用

divmod():   相除返回(商,余数)

enumerate():     返回下标及内容,同时需要index和value值的时候可以使用 enumerate。

eval():        把一个字符串变成字典,简单的加减乘除/数据类型,如果是复杂的数据算法,则要用exec()

exec():      

fiter():     按条件筛选出值并返回  

匿名函数:lambda,

map():   把一个列表中的所有元素统一处理返回并覆盖。

      eg. res = map(lambda n:n*2,range(10))

        res = [lambda i:i*2 for i in range(10)] 

reduce():  在3.0里,需导入import functools,再使用reduce.:每次迭代,将上一次的迭代结果(第一次时为init的元素,如没有init则为seq的第一个元素)与下一个元素一同执行一个二元的func函数。在reduce函数f中,init是可选的,如果使用,则作为第一次迭代的第一个元素使用。eg。阶乘。

      res = functools.reduce(x,y:x*y,range(1,n+1),2) -------->最后一个2代表2倍

frozenset():  冻结的不可变的集合。集合本身可变。

getattr():        面向对象时用

globals():  以key/value 格式返回当前程序所有的全局变量,也可以用来判断一个变量存不存在。

hash():   折半查找,先将无序的列表通过一定的算法编程有序的映射表,然后通过对比,对半删掉进行查找。MD5是哈希的一种算法

help():    查看帮助

hex():    把一个数字转成十六进制

id():       返回内存地址

isinstance(): 

issubclass():  是不是一个子类

iter():      迭代器

len():     长度

local():    

max():    最大值

min():     最小值

class object   

oct():    转八进制

repr():    用字符串表示一个对象。

reversed():  

pow():          a的b 次方

round():  对传入的参数四舍五入

sorted():  排序

type():   查看数据类型

vars():  返回一个对象的所有属性名

zip():    zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。合并 

posted @ 2017-09-04 10:35  耿耿824  阅读(167)  评论(0)    收藏  举报