zoukankan      html  css  js  c++  java
  • py函数初识

    一. 什么是函数

      1. 我们到目前为止, 已经可以完成一些软件的基础功能了. 那么我们来完成这样一个功能: 约x

            print("拿出手机") 
            print("打开陌") 
            print("找个漂亮的妹子") 
            print("问她, 约不约啊?") 
            print("oK. 走你!") 

       我现在还想约. 约个10次8次的. 怎么办呢? 也简单. 加个循环就好了.

            while 1:
                print("拿出手机")
                print("打开陌陌")
                print("找个漂亮的妹子")
                print("问她, 约不约啊?")
                print("oK. 走你!") 

      这样写出来的程序是不是一直在约? 我想什么时候约就什么时候约,那么这里,我们可以先去定义一个事情或者功能. 等到需要的时候直接去用就好了.

      那么这里定义的东西就是一个函数. 

      函数: 对代码块和功能的封装和定义 

     二. 函数的定义, 函数名, 函数体以及函数的调用.

      1. 我们使用def关键字来定义函数, 函数的定义语法:

      

            def 函数名():
                函数体   #就是函数被执行后要执行的代码.

      注意:这里的函数名的命名规则与使用和变量基本一样.

      2. 我们来定义一个约x功能:

            def yue():
                print("拿出手机")
                print("打开陌陌")
                print("找个漂亮的妹子")
                print("问她, 约不约啊?")
                print("oK. 走你!") 

      定义完了,但是这个时候去执行. 会发现什么都没有发生.  因为我只定义了一个函数. 但是还没有执行过这个函数. 

       函数的调用: 使用函数名可以调用函数, 写法: 函数名(), 这个时候函数的函数体会被执行.

            # 调用yue()函数 
            yue() 
            结果: 
         拿出手机 打开陌陌 找个漂亮的妹子 问她, 约不不约啊? oK. 走你!

      三. 函数的返回 

      继续分析:约完了之后你需要得到一个结果吧. 比如. 约完了,得到一个萝莉, 大妈. 总得有个结果. 那么这个结果怎么来描述和获得呢?

      这个就涉及到函数的返回值的问题.  

      1. 函数中return的使用(执行完函数之后,我们可以使用return来返回结果.):  

        1> 函数中遇到return, 此函数结束, 不再继续执行.

            def yue():
                print("约你")
                print("约我")
                print("约他")
                return    
               print("约谁呀")    # 这句话不会被执行 
            yue()

        2> 给函数的调用者一个访问结果

            def yue():
                print("约你")
                print("约我")
                print("约他")
                return "美女一枚"
                girl = yue() 
            print(girl)    # 美女一枚    

          3. 函数的返回值可以有多个结果 

            def yue():
                print("约你")
                print("约我")
                print("约他")
                return "美女一枚", "萝莉一枚"
            girl = yue() 
            print(type(girl))   # tuple

        总结一下:

        (1). 遇到return.此函数结束, 函数后面的东西将不会再执行

        (2). return 返回值 关于返回值:

        如果return什么都不写或者干脆不写return .那么返回的就是None

        如果return后面写了一个值. 则调用者可以接收一个结果    

        如果return后面写了多个结果, 则调用者可以接收一个tuple, 调用者可以直接解构成 多个变量

      

    四. 函数的参数 

      当我们换不同的软件去约,就要更改代码,是不是不合适了. 好的方式是不是想用什么约就用什么约?

      ok. 我们可以通过函数的参数来给函数传递一些信息.

      1. 参数, 函数在调用的时候指定具体的一个变量的值. 就是参数.  

        语法: 

            def 函数名(参数列表):
                  函数体
             

      首先我们先把代码改一下. 能够实现上面的需求. 

            def yue(chat):    
                print("拿出手机")
                print("打开"+chat)
                print("找个漂亮的妹子")
                print("约不不约") 
            yue("陌陌")     #我们在调用yue的时候给chat一个值,然后再执行函数体.
            yue("微信") 
            yue("探探"
          

          结果:
            拿出手机

            打开陌陌

            找个漂亮的妹子

            约不约

            拿出手机

            打开微信

            找个漂亮的妹子

            约不约

            拿出手机

            打开探探

            找个漂亮的妹子

            约不约

     

      2. 关于参数

        1. 形参 写在函数声明的位置的变量叫形参.  形式上的一个完整. 表示这个函数需要xxx

        2. 实参 在函数调用的时候给函数传递的值叫实参, 实际执行的时候给函数传递的信息. 表示给函数 xxx

        3. 传参 给函数传递信息的时候将实际参数交给形式参数的过程被称为传参.   

            def yue(chat):
                # chat  形参    
            print("拿出手机")    
            print("打开"+chat)   
            print("找个漂亮的妹子")    
            print("约不约") 
            yue("陌陌")    # 实参 
            len("字符串")    # "字符串"在这里就是实参 
            print("麻花藤")    # "麻花藤"就是实参 

      3. 参数的分类:

        1>实参:

        (1)位置参数

        我们约是要有选择条件的, 比如:我在北京, 喜欢小姐姐;强哥在哈尔滨,大妈就行了,需求是不一样的.

        而我们现在的函数没有这些功能.那怎么办呢? 很简单, 多来几个参数就好.

            def yue(chat, address, age):    # 形参
                print("拿出⼿手机")
                print("打开"+chat)
                print("找个"+address+"附近漂亮的"+str(age)+"岁妹⼦子")            
                print('约不约')
            yue("微信", "北京", 18)    # 实参 
            结果: 
            拿出手机 
            打开微信 
            找个北京附近漂亮的18岁妹子 
            约不约 

         分析: 在访问yue()的时候, 我们按照位置的顺序分别把"微信", "北京", 18 赋值给 chat, address, age.

        在传参过程中. 系统会默认按照位置把实参赋值到形参.

         (2). 关键字参数    

        如果函数在定义的时候参数非常多怎么办? 程序员必须记住,有哪些参数, 而且还有记住每个参数的位置,

        否则函数就不能正常调用.那怎么办呢? python提出了一种叫做关键字参数.

        我们不需要记住每个参数的位置.只要记住每个参数的名字就可以了 

            def yue(chat, address, age):
                print("拿出手机")
                print("打开"+chat)
                print("找个"+address+"附近漂亮的"+str(age)+"岁妹子")
                print("约不约") 
            yue(chat="微信", age=18, address="北京")     # 关键字参数. 
            结果: 
            拿出手机 
            打开微信 
            找个北京附近漂亮的18岁妹子 
            约不不约
     

         (3). 混合参数    

        可以把上面两种参数混合着使用. 也就是说在调用函数的时候即可以给出位置参数,也可以指定关键字参数. 

            # 混合参数 
            yue("微信", age=18, address="上海")    # 正确.第一个位置赋值给chat, 后面的参数开始 指定关键字. 
            yue(age="18", "微信", address="广州")    # 错误, 最开始使用了关键字参数, 那么后面的微信的位置就串了, 容易出现混乱

        注意: 在使用混合参数的时候, 关键字参数必须在位置参数后面.

      4. 在形参角度看. 一共分为三种. 今天我们学习两种:

    .    1> 位置参数. 按照位置来赋值, 到目前为止, 我们编写的函数都是这种

            def yue(chat, address, age):
                print("拿出手机")
                print("打开"+chat)
                print("找个"+address+"附近漂亮的"+str(age)+"岁妹子")
                print("约不约")
         

        2> 默认值参数.

        在函数声明的时候,就可以给出函数参数的默认值.在调用的时候可以给出具体的值,也可以不给值,使用默认值.

        比如,我们录入咱们班学生的基本信息.通过调查发现,我们班大部分学生都是男生.

        这个时候就可以给出一个sex='男'的默认值. 

            def stu_info(name, age, sex=''):
                print("录入学生信息")
                print(name, age, sex)
                print("录入完毕")
            stu_info("张强强", 18) 

        注意:必须先声明位置参数,才能声明默认值参数. 

  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/panda-pandeyong/p/9300047.html
Copyright © 2011-2022 走看看