zoukankan      html  css  js  c++  java
  • 基础知识回顾——函数

    函数是一个可重用的代码块,用来实现特定的功能。

    认识函数

    1.定义函数

       函数代码块以 def 关键词开头,后接函数名,函数名不能以数字开头;
       函数的参数是对函数的输入,参数可以有多个,也可以完全没有(但括号要保留);
       函数体内容以冒号开始,并且缩进;
       return [表达式]返回函数结果,可以没有返回结果即None,也可以返回多个函数结果;

    1 def rectangle(a,b):
    2     c = (a + b)*2
    3     return c

    当程序执行到return的时候,程序将停止执行函数内余下的语句。return并不是必须的,当没有return, 或者return后面没有返回值时,函数将自动返回None。

    2.调用函数通过函数名和传入参数,实现函数的调用。

    1 print retangle(3,4)  #(3,4)即对应位置参数(a,b)

    3.函数传参

    1)位置传参
    def add(a,b):
        return a + b
    print add(3,4
    2)引用传参 def add(a,b): return a + b x,y = 3,4 print add(x,y)
    3)关键字传参 def add(a,b): return a + b print add(a = 3,b = 4
    4)默认传参 def f(a,b=10): return a+b print add(a = 3,b)
    5)包裹传参(包裹传递定义函数时,在相应元组或字典前加*或**) >>> def func(*name):   print type(name)   print name
    >>> func(1,4,6)
    <type 'tuple'>
    (1, 4, 6)
    >>> def func(**name):
        print type(name)
        print name
    >>> func(a=1,b=9)
    <type 'dict'>
    {'a': 1, 'b': 9}

     在包裹传参中,定义func函数的参数表分别用元组name和字典name收集;相应的如果在函数调用是用*name或者**name传参,则被称为“解包裹”的过程。

    位置参数解包
    >>> def func(a,b,c):
        print a,b,c
    >>> name = (1,3,4) >>> s = func(*name) 1 3 4 关键字参数解包 >>> def func(a,b,c):     print a,b,c >>> name = {'a':1,'b':2,'c':3} >>> s2 = func(**name) 1 2 3

    函数式编程


    python在应对函数式编程有一些比较有用的函数:map、filter、reduce和lambda函数,其中map函数和filter函数可以被列表推导式代替。
        
    1.map(function,iterable,....)函数的第一个参数是函数对象,第二个参数是列表(或元组字典等),map的作用就是将函数对象依次作用于表的每一个元素,然后返回列表。

     1 >>> def double(x):
     2       return x*2
     3     
     4 >>> list1 = [11,22,33]
     5 >>> map(double,list1)  #函数可以分配给变量,作为参数传递以及从其他函数返回
     6 [22, 44, 66]
     7 
     8 >>> tuple1 = (11,22,33)
     9 >>> map(double,tuple1)
    10 [22, 44, 66]
    11 
    12 >>> dic1 = {'s':'shenzhen','w':'wuhan'}
    13 >>> map(double,dic1)  
    14 ['ss', 'ww']
    15 
    16 #多个可迭代参数,则每次从多个表中取出一个元素应用函数对象
    17 >>> def abc(a,b,c):
    18         return a*100+b*10+c
    19 
    20 >>> list1 = [1,2,3]
    21 >>> list2 = [4,5,6]
    22 >>> list3 = [7,8,9]
    23 >>> map(abc,list1,list2,list3)
    24 [147, 258, 369]
    25 
    26 #若函数给出的是'None',则默认'identity'函数
    27 >>> list1 = [11,22,33]
    28 >>> list2 = [44,55,66]
    29 >>> map(None,list1,list2)
    30 [(11, 44), (22, 55), (33, 66)]
    


    2.filter(function or None,seq)函数可以基于一个返回布尔值的函数对元素进行过滤,对序列参数seq(列表、元组或是字符串)中的每个元素调用function函数,最后返回调用结果为True的元素

     1 >>> def func(x):      
     2         return x.isalnum()    #返回含字母或数字的元素
     3 
     4 >>> seq = ["apple","nana1","?!","&c"]
     5 >>> filter(func,seq)
     6 ['apple', 'nana1']
     7 
     8 >>> seq2 = ['sf','se3','4h']
     9 >>> filter(None,seq2)
    10 ['sf', 'se3', '4h']


    3.reduce(function,seq)函数只能接收两个参数,先将序列的前两个元素与function联合使用,然后将返回值与序列的第三个元素继续联合使用,直到整个序列处理完

    1 >>> def add(x,y):
    2       return x+y
    3 
    4 >>> num = [12,432,79,20]
    5 >>> reduce(add,num)
    6 543


    4.lambda[arg1[arg2,arg3...]:expression,lambda匿名函数中,冒号前是参数,冒号后是表达式

     1 #无参数
     2 >>> bar = lambda:'echo'
     3 >>> print bar()
     4 echo
     5 
     6 #有参数
     7 >>> def double(x):
     8       return x*2
     9 等价于 double = lambda x:x*2
    10 
    11 >>> def abc(a,b,c):
    12       return a*100+b*10+c
    13 等价于 abc = lambda a,b,c:a*100+b*10+c
    14 
    15 >>> def func(x):
    16       return x.isalnum()
    17 等价于 func = lambda x:x.isalnum
    

    5.交换变量,类似于三目操作符

    1 >>> def dem1():
    2        return True if 1 == 1 else False
    3 >>> dem1()
    4 True
    5  
    6 >>> def dem2():
    7        return True if 1 == 2 else False
    8 >>> dem2()
    9 False
  • 相关阅读:
    URAL 1736 Chinese Hockey 网络流+建图
    python基础教程_学习笔记14:标准库:一些最爱——re
    吐槽下CSDN编辑器
    让你提前认识软件开发(23):怎样在C语言中运行shell命令?
    GDB十分钟教程
    任务调度开源框架Quartz动态加入、改动和删除定时任务
    AfxMessageBox和MessageBox差别
    Linux Shell脚本入门--awk命令详解
    鲁棒性的获得 —— 测试的架构
    C Tricks(十八)—— 整数绝对值的实现
  • 原文地址:https://www.cnblogs.com/Ryana/p/5975423.html
Copyright © 2011-2022 走看看