zoukankan      html  css  js  c++  java
  • python学习:函数的学习

    我们写东东的时候,往往有一些东西要频繁去复用,那么每个功能是10行代码,复用2次就是20行,这样看来我们的程序如果频繁利用某些代码的话,那么会是我们开发的东西越来越臃肿。那么好的方法有没有呢,那就是函数,函数可以把功能进行模块化,当大量复用的时候,可以有效的减少代码数量。

    那么啥叫函数呢?打个土鳖的比方,比如我要从单位回老家的话,需要先坐地铁去火车站,然后乘坐XXx列火车回XX地,然后再打车回家。

      好的,那么我们可以把这个过程抽象成一个函数命名为"回老家",当我把这个过程讲述一遍以后,在今后我再提起回老家,就可以想到。要坐地铁去火车站,然后乘坐XXx列火车回XX地,然后再打车回家这样的一个过程。这就是一个函数。

      抽象成python代码的话可能是这样的:

      

    def 回老家():
        坐地铁去火车站
        乘坐xxx列车
        打车回家
    

       好的,上面的def(define)是用来声明一个函数。函数主体就是一个过程。

      接下来我们实际编写一个函数:

    def SayHello():
        print "hello world!"
    

     上面的函数,只要我们引用他,那么他就会打印hello world这句话,

    接下来我们就要讲些如何给函数赋值变量了。不然他总执行一个动作,功能上未免有些单一。

    函数的参数赋值,基本上分为3类。

    第一类,直接引用参数(变量)

    def SayHello(a,b,c):
       print "hello world %s %s %s" %(a,b,c)

    1、使用方法:
    SayHello("hello","world","!")#依次将"hello","world","!"赋值给a,b,c,缺陷是:如果用户给出的参数个数小于要求个数会报错。
    2、使用方法:
    SayHello(a="say",b="hello",c="world")#依次将"say","hello","world",赋值给a,b,c,好处是,可以一目了然的知晓赋值了哪些参数。

    当然有些时候,我们限定了2个参数,如果用户少给了参数,那么程序会报错,但是用户手抖或者记错了,多写了参数一般情况都是不输出,那岂不是很不爽,是吧?

    那好我们接下来看看怎么让用户多输入的参数也能够打印出来。

    #-*- encoding:utf8 -*-
    a="hello"
    b="world"
    def say2(a,b,*c):
        print "系统默认的参数%s %s" %(a,b)
        if c:
            print "其他参数",
            for i in c:
                print i,
    say2(a,b,"other","canshu")
    

     这样输出出来:

    系统默认的参数hello world
    其他参数 other canshu

    那好,我们来看看*c做了一个什么操作

    #-*- encoding:utf8 -*-
    a="hello"
    b="world"
    def say2(a,b,*c):
        print "系统默认的参数%s %s" %(a,b)
        if c:
            print "c is ",c
            print "其他参数",
            for i in c:
                print i,
    say2(a,b,"other","canshu")
    
    
    输出结果:
    系统默认的参数hello world
    c is  ('other', 'canshu')
    其他参数 other canshu

    好的,我们可以看到*c 就是把原来未定义的所有参数,都融合到一起,然后组成了一个列表(关于列表的使用这里就不赘述了)。

    在看另一种情况,如果某些同学佯装高端,这么去写

    #-*- encoding:utf8 -*-
    a="hello"
    b="world"
    def say2(a,b,*c):
        print "系统默认的参数%s %s" %(a,b)
        if c:
            print "c is ",c
            print "其他参数",
            for i in c:
                print i,
    say2(a="other",b="world",name="dab")

    结果出错:

    Traceback (most recent call last):
      File "F:pythonpythoncrossin est_def.py", line 11, in <module>
        say2(a="other",b="world",name="dab")
    TypeError: say2() got an unexpected keyword argument 'name'
    告诉你类型错误,获取了一个意外的关键词选项。

    这个错误是因为name="dab"无法转换为列表。那这种情况可以使用如下代码进行处理。

    #-*- encoding:utf8 -*-
    a="hello"
    b="world"
    def say2(a,b,**c):
        print "系统默认的参数%s %s" %(a,b)
        if c:
            print "c is ",c
            print "其他参数",
            for i in c:
                print i,
    say2(a="other",b="world",name="dab")
    
    
    结果:
    系统默认的参数other world
    c is  {'name': 'dab'}
    其他参数 name

    从上面的结果可以看到,**c是把多余的选项当作字典进行储存。

  • 相关阅读:
    Web Client Software Factory 开发路线图
    Castle ActiveRecord Hands On Lab(1):基本数据访问
    古代武侠武功与现代软件开发
    微软Code Snippet Designer Alpha版发布了
    MSDN WebCast网站全新改版
    AJAX,只是一种过渡技术吗?
    中文网站排行榜:博客园位居博客类16名
    ASP.NET AJAX JavaScript 类浏览器
    .NET开源项目介绍及资源推荐:序
    微软发布WF教程及大量示例
  • 原文地址:https://www.cnblogs.com/sageskr/p/3394741.html
Copyright © 2011-2022 走看看