1、创建函数
def 函数名([参数]):	
//可选参数,有多个时,用逗号隔开即可
//注释,函数体
//有返回值的话,return 即可
2、调用函数
函数名([参数])
//执行函数
3、参数传递
  • 函数参数的作用:传递数据给函数使用

  • 形参:定义函数时的参数
    实参:函数被调用时的参数
    实参按值传递(不可变)或引用传递(可变)给形参

  • 值传递:只改变形参的值,实参的值保持不变
    引用传递:形参和实参的值一同改变

    /*
    def add(num):
        print("原值:",num)
        num +=num
    
    print("值传递")
    num=1
    add(num)
    print("值传递后:",num)
    
    print("引用传递")
    num=[2,1]
    add(num)
    print("引用传递后:",num)
    */
    
    /*
    值传递
    原值: 1
    值传递后: 1
    引用传递
    原值: [2, 1]
    引用传递后: [2, 1, 2, 1]
    */
    
  • 位置参数

    必备参数,必须按照正确的顺序传到函数中,调用时的数量和位置必须和定义时一样

  • 关键字参数

    使用形参的名字来确定输入的参数值。

     def add(num2,num1) 
     add(num1=1,num2=2)
    
  • 为形参设置默认值

    def add(num2=2,num1)
    函数名._defaults_	
    /*
    查看函数的默认值的当前值,其结果是一个元组 
    add._defaults_    ('2',)
    */
    为形参设置默认值,默认参数必须指向不可变对象
    
  • 可变参数

    • 可变参数也称为不定长参数,即传入函数中的实际参数可以是任意多个

    • 主要有两种形式:*参数,**参数

    • *参数

      表示接收任意多个实际参数并将其放到一个元组中

      #定义函数
      def num1(*num):
          for i in num:
              print(i)
              
      #调用函数
      ber=[1,2]
      num1(*ber)	//使用一个已存在的列表作为函数的可变参数,需要在列表的名称前加*
      num1(1,2,3)	//将1,2,3这三个值当成一个元组,传入到函数中
      /*
      1
      2
      */	
      num1(ber)	//[1,2]
      
    • **参数

      表示接收任意多个类似关键字参数一样显式赋值的实际参数,并将其放到一个字典中

      def num1(**num):
          for i in num:
              print(i)
      
      
      ber={'1':'2','3':'4'}
      num1(**ber)
      num1(我='6',是='8')
      
      /*
      1
      3
      我
      是
      */
      
4、返回值
  • 作用:将函数的处理结果返回给调用它的程序

  • 实现

    return [val]	
    /*
    val是可选参数,用于指定要返回的值,可以返回一个值,也可以返回多个值
    可将返回值赋给一个变量,返回一个值,变量可是任意参数,返回多个值,变量保存的是一个元组
    */
    
    /*
    def num1():
        a=[3,4]
        b=2
        return a,b
        
    
    a=num1()
    print(a[0],a[1])	//a[0]=[3, 4] a[1]=2
    
    def test():
      list1=[1,2,3]
      return list1
    
    list2=test()
    print(list2)         //[1,2,3]
    */
    
5、变量的作用域
  • 指程序代码能够访问该变量的区域

  • 局部变量

    • 函数内部定义并使用的变量
    • 函数内部的变量只在函数运行时才会创建,在函数运行结束后系统自动删除
  • 全局变量

    • 能够作用于函数内外的变量
    • 函数外直接定义,函数内外都可以访问
    • 函数内定义,使用关键字global即可
    /*
    def num1():
        a=1
        print('函数体内a=:',a)
        
    a=2
    print('全局变量原值:',a)	//全局变量原值: 2
    num1()					//函数体内a=: 1
    print('调用完函数后',a)	//调用完函数后 2
    允许全局变量和局部变量重名
    */
    
    /*
    def num1():
        global a=1
        print('函数体内a=:',a)
        
    a=2
    print('全局变量原值:',a)	//全局变量原值: 2
    num1()					//函数体内a=: 1
    print('调用完函数后',a)	//调用完函数后 1
    */
    
6、匿名函数
  • 指没有名字的函数,一次性函数,用lambda表达式创建

    result=lambda[可选参数]:必选参数
    /*
    result——用于调用lambda表达式
    可选参数——用于指定要传递的参数列表
    必选参数——用于指定一个实现具体功能的表达式
    */
    
    /*
    r=10
    result=lambda r:r*r
    print('结果是',result)		//结果是 <function <lambda> at 0x000001BE801DE320>
    print('结果是',result(r))	//结果是 100
    */
    
    
    /*
    list1=[('第一',3,4),('第二',1,2)]
    list1.sort(key=lambda x:(x[1],x[1]/x[2]))	//按照指定规则
    print(list1)	//[('第二', 1, 2), ('第一', 3, 4)]
    */
    

emo~