• python 函数


    def 函数 function

    函数是可以重复执行的语句块,可以重复调用

      作用:

        1. 用于封装语句块,提高代码的重用性

        2. 定义用户级别的函数

    3.函数外部不可以访问函数内部的变量空间,在函数内可以访问函数外的变量,但不能修改此变量,

      出了函数,变量的值又变会全局变量的值

    4.如果函数内部没有return返回值,那么函数调用完毕后默认返回None

    5. 如果函数想要返回其他对象需要返回return语句

    6、以后不要用sum list...做变量名,因为你用完后,sum 函数将不能求和,list函数将不能格式化列表

      x = int(input("请输入数字:"))  当需要返回值是数字时,需要把input的返回值整型格式化

          print()函数输出的时候如果遇到数字,需要将数字str()字符串格式化

    函数没有返回值时:返回None

    函数return返回一个值时:返回object

    函数return返回多个值时:返回tuple

    传参

    位置传参

      实参和形参的位置必须一一对应

    序列传参

      用*,序列拆解的位置与形参一一对应

    def myfun1(a,b,c):
        print('a的值是:', a)
        print('b的值是:', b)
        print('c的值是:',c)
    
    s1 = [11,22,33]
    myfun1(*s1)    #相当于myfun1(11,22,33)    myfun1(s1[0],s1[1],s1[2])
    
    t1 = (44, 55, 66)
    myfun1(*t1)
    
    myfun1(*"ABC")

    关键字传参

      按形参的名子给形参赋值,实参名必须与形参名进行匹配(形参与实参个数必须一一对应,不能不相等)

    字典关键字传参

      指定实参为字典,将字典用’**’,拆解后在进行关键字传参的传参方式

    def myfun1(a, b, c):
        # 这是一个函数的传参示例,此函数以后不会改变代码
        print('a 的值是:', a)
        print('b 的值是:', b)
        print('c 的值是:', c)
    
    
    d = {'a': 100, 'b': 200, 'c': 300}
    myfun1(**d)  # 等同于 myfun1(a=100,b=200,c=300)
    
    # 下是错误做法
    # d2 = {'a': 100, 'b': 200, 'c': 300, 'd': 400}
    # myfun1(**d2)

    说明:位置传参要在关键字传参(字典关键字传参)的左边

      def myfun1(a,b,c):

            pass

      #调用时

      Myfun(100,*[200,300])

      Myfun(*(100,200),300)

      Myfun(*[100],200,*[300])

      Myfun(100,c=300,100)    #错误

      Myfun(100,**{‘c’:300,’b’:200})

    形参

      函数的缺省参数:

      def 函数名(形参名=默认实参1,形参2=默认实参2,…)

    说明:缺省参数必须自左向右依次存在,如果第一个参数有缺省参数,那么其右侧的所有参数必须都为缺省参数

    位置形参

      语法:

          def 函数名(形参名1,形参名2,…)

               语句块

    星号元组形参

      语法:

           def 函数名(*元组形参名)

            语句块

    作用:收集多余的位置传参,如果传入的是关键字,是接收不了的(空元组)

    def func (*args):
        print(“参数个数是:”,len(args))
        print(“args:”,args)
    fun()
    fun(1,2,3,4)
    fun(*”ABC”,1,2,3,None,False)

    命名关键字形参

    语法:

      def 函数名(*,命名关键字形参)  

        语句块

      或

      def 函数名(*args,命名关键字形参)

        语句块

    作用:强制索引的参数都必须用关键字传参或字典关键字传参

    def fa(*, a, b):
        print('a=', a)
        print('b=', b)
    def fb(*args, a, b):
        print("args=", args)
        print('a=', a)
        print('b=', b)
    
    # fa(b=1, a=2)
    fa(**{'b': 200, 'a': 100})
    #fb(1, 2, 3, 4, b=200, a=100)

    双星号字典形参

       语法:

            def 函数名(**字典形参名)

                 语句块

       作用:收集多余的关键字传参

       说明:字典的形参名通常命名为”kwargs”

    def fa(**kwargs):
        print("关键字传参的个数是:", len(kwargs))
        print('kwargs=', kwargs)
    
    
    fa(name='tarena', age=15)
    fa(a=1, b='BBB', c=[2,3,4], d=True)    #传入的是字典

    函数的参数说明:

      位置形参,缺省参数,星号元组形参,双星号字典形参可以混合使用

      def name(位置形参,星号元组形参,命名元组形参,双星号字典形参):

    实例:

           def fx(a,b,*args,c,**kwargs):

                  pass

           fx(100,200,300,400,c=”c”,d=”D”,e=”E”)

    函数的不定长参数:

      星号元组形参,双星号字典形参

    说明:

      可以接受任意的位置传参和关键字传参

      def fn(*aegs,**kwargs):

        pass

    局部变量:local variable

      1、局部变量在函数调用时才能够被创建,在函数调用之后会自动销毁

    全局变量:global variable

      2、全局变量所有函数都可以访问(但函数内不能直接赋值)

    args    作为函数的参数

    locals()  返回局部变量的字典

    globals()      返回全局变量的字典

    作用:可以使用字典键索引来返回全局变量或者局部变量的值

    函数变量

      函数名是一个变量,它在def语句创建函数时绑定一个函数

      函数可以用变量来绑定

    def fa():
        print('你好')
    def fb():
        print("")
    f1 = fa  # 这里没有括号f1绑定的是函数
    f2 = fb
    f1()  # 调用f1绑定的函数
    f2()  # 调用f2绑定的函数
    def f1():
        print('')
    def f2():
        print('')
    f1, f2 = f2, f1
    f1()  # 调用的是f2函数

      把函数当做一个变量来玩

      一个函数,可以作为另一个函数的实参传递

    1 def f1():
    2     print("f1被调用:")
    3 def f2():
    4     print("f2被调用")
    5 def fx(fn):
    6     print(fn)
    7     fn()
    8 fx(f1)  # 这里调用的是fx
    9 fx(f2)
    函数传递
    1 def myinput(fn):
    2     L = [5,6,7,9,2]
    3     return fn(L)
    4 print(myinput(sum))#29
    5 print(myinput(max))#9
    6 print(myinput(min))#2
    7 print(myinput(len))#5
    传递函数

      函数可作为另一个函数的返回值

    def get_op():
        s = input("请输入你要操作的数:")
        if s=="求最大:":
            return max
        elif s=='求最小':
            return min
        elif s == '求和':
            return sum
    L= [2,3,5,7,4]
    f = get_op()
    print(f(L))

      函数的嵌套:

        函数的嵌套定义是指一个函数里用def语句来创建其他的函数的情况

    def fn_outter():
        print("fn_outter函数被调用")
        def fn_inner():
            print("fn_inner被调用")
        fn_inner()
        fn_inner()
        print("fn_outter调用结束")
    fn_outter()

    global 语句

      作用:

      1、告诉解释执行器global语句声明的一个或多个变量,这些变量的作用域为模块级的作用域,也称作全局变量

      2、全局变量(global):

      将赋值语句操作的变量映射到模块文件内部的作用域

      语法:

        global 变量1,变量2,…..

      说明:

      1、全局变量如果要在函数内部被赋值,则必须经过全局变量声明(否则会被认识是创建局部变量)

          2、全局变量在函数内部不经过声明就可以直接访问()

          3、不能先声明局部变量,再声明为全局变量

          4、global变量列表里的变量名不能出现在此作用域的形参列表

    nonlocal语句

          作用:告诉解释执行器,nonlocal语句声明的不是局部变量,也不是全局变量,他是外部嵌套函数内的变量

          语法:nonlocal 变量名1,变量名2,….

          说明:

      1、nonlocal只能被函数嵌套时使用

      2、访问nonlocal变量将对外部嵌套函数作用域内的变量进行操作

      3、访问nonlocal变量只对最近一层变量进行操作

      4、nonlocal语句的变量列表里的变量名,不能出现在此函数的参数列表里

    lambda 表达式(又称匿名函数)

    作用:创建一个匿名函数对象,但不提供函数名

    格式:lambda[参数1,参数2,…..]:表达式

       myadd = lambda x,y:x+y

    说明:

      1、lambda表达式创建的函数只能包含一条表达式

      2、lambda用来创建一个函数对象

    eval()/exec()函数

      eval(srouce,globals=None,local=None)

            把字符串  srouce当成一个表达式来执行,返回表达式执行的结果

    x = 100
    y =200
    s = 'x+y'
    a = eval(s)
    b = eval("x+y",{'x':1,'y':2})
    c = eval("x+y",{'x':1,'y':2},{'x':34,'y':1})
    d = eval("x+y",{'x':1,'y':2},{'y':1})
    print(a)#300
    print(b)#3
    print(c)#35
    print(d)#2

      exec(srouce,globals=None,local=None)

            把一个字符串srouce当成程序来执行,返回表达式执行的结果

    s = """print("hello world")
    x =100
    x += 200
    print("x=",x)
    """
    exec(s)#hello world   x= 300

    函数的文档字符串就是在开始写函数时,先用字符串说明该函数是用来做什么的

      函数内第一次未被赋值给任何变量得字符串是此函数的文档字符串

    语法:

      def 函数名(参数列表):

        '函数文档字符串'

        函数语句块

    示例:

      def myfun(name,x):

        '''这是函数的文档字符串

        name  表示人名

        x  表示钱数

        '''

        pass

    >>>help(myfun)

    说明:

      1、文档字符串通常用来说明本函数的功能和使用方法

      2、在交互模式下输入:help(函数名) 可以查看函数的'文档字符串'

      3、函数的文档字符串绑定在函数的__doc__属性上

    def fun():
        "这是一段文档字符串"
        pass
        
    print(fun.__doc__)  # 这是一段文档字符串
    
    print(help(fun))
    
    # Help on function fun in module __main__:
    
    # fun()
    #     这是一段文档字符串
    
    # None
    fun.__doc__

    函数定义语句(def 语句) 的完整语法:
      [@装饰器1]
      [@装饰器2]
      [...]
      def 函数名([位置形参], [*元组形参], [命名关键字形参], [**字典形参]):
      '''文档字符串'''
      语句块

     注: [] 代表其内部可以省略

  • 相关阅读:
    JavaScript之延迟加载
    Android之adb命令
    Android之所有API汇总
    Android常用系统广播
    CSS之自适应布局webkit-box
    在Go中没有引用传值
    go指针-1
    go如何实现优雅的错误处理,
    Golang中切片复制成本,一个大切片会比小切片占用更多内存吗?
    Go中的Slice有何不同,传递类型,详解切片类型
  • 原文地址:https://www.cnblogs.com/LXP-Never/p/9302597.html
Copyright © 2020-2023  润新知