python学习函数

函数  对象  模块

定义函数

  def MyFirstFunction():  

    print('第一个函数')

    ······

调用函数

  MyFirstFunction()

加入参数

  def MySecondFunction(name):

    print(name + '是谁')

调用含参函数

  MySencondFunction('某某某')

  MySecondFunction(name='某某某')

形参和实参:name是形参,传进来的具体参数才是实参

给函数写说明文档用#注释

查看注释文档

  函数._doc_

  help(函数)

增加默认参数

  def MySecondFunction(name='abc')

收集参数

  def test(*params)

    print(len(params), params[1])

  输入test(1,'abc',3,45)

  输出 4 'abc'

收集参数加其他参数  

  def test(*params, num=6)  //最好加上默认值

    print(len(params), params[1], num)

  输入test(1, 'abc', 3, 45, num=9)  //必须加num=,否则报错

  输出 4 'abc' 9

  

函数与过程

 python都是函数,都会有返回值

  def hello():

    print('Hello!')

  temp = hello  输出为  Hello!  但是temp=None

  没有return值的返回都是None

返回值

  def back1():

    return [1, 'abc', 3.14]  //返回数组

  def back2():

    return 1, 'abc', 3.14  //返回元组

局部变量和全局变量

  def sum(a, b):

    c = a + b

    return c  //c为局部变量,外部无法直接调用c

函数可以读取调用全局变量

如果在函数内修改全局变量,只对函数内有效,尽量避免

可以在函数中用 globe c  将局部变量设为全局变量

函数的内嵌

  def fun1():

    print('abc')

    def fun2():    //内嵌函数定义在fun1内部定义

      print('def')

    fun2()    //内嵌函数调用只能在fun1该函数内部使用

函数的闭包

  def FunX(x):

    def FunY(y):

      return x*y

    return FunY

调用  

  i = FunX(8)  

  i(5)  结果为40

或者 

  FunX(8)(5)  

使用闭包时注意内部和全局变量的关系

  def Fun1():

    x = 5

    def Fun2():

      x*=x

      return x

    return Fun2()    //函数错误,x在Fun2中被修改

解决办法

  def Fun1():

    x = 5

    def Fun2():

      nonlocal x  //设置x为非局部变量

      x*=x

      return x

    return Fun2()

匿名函数(lambda)

精简且不需要定义命名函数名,简化可读性

  g = lambda x : 2 * x + 1

  就可直接调用g(5)

  g = lambda x, y : x + y

  直接调用g(3, 4)

两个厉害的bif

 filter(Function or None, iterable)

过滤器,去掉iterable中非ture的部分

  list(filter(None,[1, 0, Ture, False]))  结果为 [1, Ture]

例如取奇数

  def odd(x)

    return x % 2

  temp = range(10)

  show = filter(odd, temp)

list(show)  结果为  [1, 3, 5, 7, 9]

简化  list(filter(lambda x : x % 2, range(10)))

map(Function, iterable)  

将iterable的值分别带入function函数中,组成数组输出

  list(map(lambda x : x*2, range(10)))  结果为  [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

  

原文地址:https://www.cnblogs.com/jdzhang1995/p/10234799.html