• Python3基础——函数


    ython 函数

    函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

    函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

    定义函数

    def functionname( parameters ):
       "函数_文档字符串"
       function_suite
       return [expression]

    函数文档类似于注释,用于理解函数的功能。可以使用functionname.__doc__打印出函数文档内容。

    调用函数

    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    # 定义函数
    def printme( str ):
       "打印任何传入的字符串"
       print str;
       return;
     
    # 调用函数
    printme("我要调用用户自定义函数!");
    printme("再次调用同一函数");

    注意:在Python中不允许前向引用,即在函数定义之前,不允许调用该函数。即在调用函数前,必须先定义该函数。

    函数参数

    首先理解下形参和实参的概念:

    函数定义过程中的参数叫形参,调用函数时传入的参数叫实参,它是具体的参数值。

    函数定义参数有四种类型:

    1、位置参数

    必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

    2、默认参数

    参数定义过程中为形参赋初值,调用函数时,若未给参数赋值,则使用默认值代替。

    3、关键字参数

    通过参数名来指定需要赋值的参数,使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

    def printme( str ):
       "打印任何传入的字符串"
       print str;
       return;
     
    #调用printme函数
    printme( str = "My string");

    4、可变参数(收集参数)

    def functionname([formal_args,] *var_args_tuple ):
       "函数_文档字符串"
       function_suite
       return [expression]

    加了星号(*)的变量名会存放所有未命名的变量参数。其实python是把收集参数当成一个元组处理的。

    若收集参数后需要加其他定制参数,为其赋值时就需要使用关键字参数赋值。尽量在定义函数时为这些定制参数设置默认值,防止出错。

    函数返回值

    def back():

          return [1,'s',2]

    def back():

         return 1,2,'s'

    用逗号隔开的多个数据,其实是以返回了一个元组

    函数作用域

    全局变量 VS 局部变量

    我们通常把定义在函数外的变量成为全局变量,定义在函数内的变量称为局部变量,顾名思义,全局变量的作用域是整个代码段,局部变量的作用域就只是在它所属的代码段,变量只在它的作用域里有效。

    注意:在函数内可以访问全局变量,但不能修改。如果强行修改全局变量,python会自动在函数内创建一个和全局变量同名的局部变量,被修改的是这个局部变量,全局变量不会改变。

    global关键字

    从上面课的代码中可以发现,如果在函数体内声明的变量名和已经有的全局变量名重复,那么局部变量就会把全局变量覆盖掉。如果想要在函数体内使用全局变量,使用前需要先用global语句来声明下用到的这个变量是全局变量。

    内嵌函数

    内部函数整个作用域都在外部函数之内

      def fun1():
        print('fun1()正在被调用……')
        def fun2():
          print('fun2()正在被调用……')
        fun2()
    fun1()

    fun1()正在被调用……
    fun2()正在被调用……

    fun2()

    报错,提示fun2没有被定义

    内部函数只能在外部函数体之内调用,如果在外部函数外调用会报错。

    闭包(closure)

    如果在一个内部函数里,对在外部作用域的变量进行引用,那么这个内部函数就是一个闭包

      def funx(x):
        def funy(y):
          return x*y
        return funy

    funx(3)返回的是函数类型

    print(funx(3)(4))   打印出12

      def fun1():
        x=5
        def fun2():
          x*=x
          return x
        return fun2()
    fun1()报错,因为在fun2里,调用并更改了外部函数的变量x

      def fun1():
        x=5
        def fun2():
          nonlocal x
          x*=x
          return x
        return fun2()
    print(fun1()) 可以正常执行

    lambda表达式(匿名函数)

    作用主要是:简化代码,还不用考虑函数名问题。

  • 相关阅读:
    OC
    OC
    OC
    OC
    OC
    Oracle wm_concat()函数
    字符串拼接
    easyui扩展数据表格点击加号拓展
    子tab里面新增tab(top.jQuery)
    combox datagrid重复请求问题
  • 原文地址:https://www.cnblogs.com/huluwahaha/p/7492789.html
Copyright © 2020-2023  润新知