zoukankan      html  css  js  c++  java
  • Day18_函数定义_形参_实参_可变参数

    一. 上节课复习

    1. write补充
      • f.write('111 ')
        f.write('111 ')
      • f.writelines(['111 ','222 ']) #writelines 用法相当于write多行
        • writelines() 方法用于向文件中写入一序列的字符串。
          这一序列字符串可以是由迭代对象产生的,如一个字符串列表。
          换行需要制定换行符
    2. truncate
      • truncate() 方法用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小

    二. 定义函数

    1. 函数的定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可

      • 特性:
        减少重复代码
        使程序变的可扩展
        使程序变得易维护
      • 注:函数的定义相当于变量的赋值,函数名相当于变量名,函数的代码相当于变量值;且定义阶段只检测函数的语法是否正确,但调用阶段则不同
    2. 函数分类

      1. 内置函数
      2. 自定义函数
      def 函数名(arg1,arg2,arg3):  
          '描述信息'  
          函数体  
          return 1  
      
    3. 函数的定义和调用

      1. 定义无参函数:调用时为函数调用的语句形式foo()
      2. 定义有参函数:定义时有参,调用时必须传参,且一般有返回值;调用时为函数调用的表达式形式res=bar(1,2)
      3. 定义空函数
    4. 函数的返回值

      1. 未在函数中指定return,那这个函数的返回值为None
      2. 如果return返回值为多个,会以元组的形式返回
      3. 总结:
        • 可以返回任意类型
        • return 1 ----> 1
        • return 1,2,3 -----> (1,2,3)
        • 没有return -----> None
        • 函数执行到return就会结束掉
    5. 变量的解压

      • '_'、'*_'
    6. 函数的参数

    7. 形参:在函数定义阶段,括号内定义的参数,本质就是变量名

    8. 实参:在函数调用阶段,括号内定义的参数,必须要有一个明确的值,可被当成变量值

      • 注意:实参的值要为不可变类型
      • 在函数中不要去修改全局的变量
    ```python
    def foo(x,y)        #形参
        print(x)
        print(y)
    
    foo(1,2)        #实参
    ```
    
    1. 在实参的角度的三种传值方式

      1. 按位置传值:
          def foo(x,y):
              print(x)
              print(y)
      
          foo(1,2)
      
      1. 按照关键字传值
          def foo(x,y):
              print(x)
              print(y)
      
          foo(x=1,y=2)
      
      1. 混用
      • 按位置传值必须在按关键字传值的前面
      • 对于一个形参,只能赋值一次,不能重复赋值
          def foo(x,y):
              print(x)
              print(y)
      
          foo(1,y=2)
      
    2. 从形参的角度分析

      1. 位置参数,必须传值的参数
      def foo(x,y):
          print(x)
          print(y)
      
      foo(1,2)
      
      1. 默认参数
        1. 默认参数必须放到位置参数的后面
      def foo(x,y=1):
          print(x)
          print(y)
      foo(2)
      
      • 默认参数在函数定义阶段,他的值就已经确定了
      sex ='male'
      def register(sex=x):        #register-----[sex = 'male']
          print(sex)
      
      sex = None
      register()    #输出为male
      
      • 在函数中不要去修改全局的变量(不推荐下述方式)
      x=[]
      def register(name,name_list=x):
          name_list.append(name)
          
      register('ASB')
      register('YSB')
      register('WSB')
      print(x)        #['ASB','YSB','WSB']
      

    三. 可变参数

    1. *args

      def foo(x,*args):    #args = (2,3,4,5,6,'a','b')
          print(x)        
          print(args)
      foo(1,2,3,4,5,6,'a','b')        #输出为1;(2,3,4,5,6,'a','b') 
      

      1.1 *args 与位置参数和默认参数混用:*args要放到位置参数的后面

      def foo(x,*args,y=2)
          print(x)
          print(args)
          print(y)
      foo(1,2,3,4,5,y=1000)    #>>1;(2,3,4,5);1000
      

      1.2. 从形参的角度

      def foo(*args):    #args=(1,2,3)
          print(args)
      foo(1,2,3)
      

      1.3. 从实参的角度

      def bar (x,y,z)
          print(x)
          print(y)
          print(z)
      bar(*(1,2,3))    #bar(1,2,3)
      
    2. **kwargs

      def foo(x,**kwargs):
          print(x)
          print(kwargs)
      foo(1,y=2,a=3,b=4)    #<<1;{'b':4,'y':2,'a':3}
      
      • 注意:**kwargs (按关键字传值),按位置传之后剩下的会给**,处理结果为{}字典的形式
      • args (按位置传值),按关键字传值剩下的会给*,处理结果为()元组的形式

      2.1. 混用

      def foo(x,*args,**kwargs):
          print(x)
          print(args)
          print(kwargs)
      foo(1,y=1,z=2)    #>>1,(),{'y':1,'z':2}
      

      2.2. 从形参的角度

      def foo(**kwargs):    #{'x': 1, 'y': 2, 'z': 3}
          print(kwargs)
      foo(x=1,y=2,z=3)
      

      2.3.从实参的角度

      def foo(x,y,z=3):
          print(x)
          print(y)
          print(z)
      foo(**{'x':1,'y':2,'z':3})    #foo(x=1,y=2,z=3)
      
    3. 嵌套

      def auth(name,password,sex='male'):
          print(name)
          print(password)
          print(sex)
      def foo(*args,**kwargs):    #args =('egon','123') kwargs= {}
          print('from foo')
          auth(*args,**kwargs)    #auth(*('egon','123'),**{})---------auth('egon','123')
      
      foo('egon','123')    >> 
      
  • 相关阅读:
    快速构建Windows 8风格应用22MessageDialog
    快速构建Windows 8风格应用20MediaElement
    Windows Phone SDK 8.0安装步骤
    快速构建Windows 8风格应用25数据绑定
    快速构建Windows 8风格应用24App Bar构建
    快速构建Windows 8风格应用21构建简单媒体播放器
    快速构建Windows 8风格应用23App Bar概述及使用规范
    sqlyog存储过程
    201751201 输入数字输出汉字读法
    考虑算法的时间效率
  • 原文地址:https://www.cnblogs.com/sama/p/7868161.html
Copyright © 2011-2022 走看看