zoukankan      html  css  js  c++  java
  • 函数初始后续与进阶

    函数参数

    位置参数

    #位置参数
    def my_sum(a,b):
        return a+b
    my_sum(1,2)

    关键字参数

    #关键字传参
    def my_sum(a,b):
        return a+b
    my_sum(b=1,a=2)
    #关键字参数可以和位置参数混合使用
    # 位置参数一定要在关键字参数之前
    
    def my_sum(a,b):
        return a+b
    #错误使用例子
    my_sum(1,a=2)#报错
    my_sum(a =1,2)#报错
    my_sum(b =1,2)#报错
    #正确使用例子
    my_sum(2,b=1)

    默认参数

    # 默认参数
    def classmate(name,age=18):#默认参数age,可更改,如果不传参默认十八岁
        print('%s :%s '%(name,age))
    #定义函数时 位置参数一定要在默认参数之前
    classmate('jcc')#正确

    动态参数

    #动态参数(用于传多个参数)
    
    #*args 接受的是按照位置传参的值,组织成一个元组
    def my_sum(*args):
        sum = 0
        for i in args:
            sum +=i
        print(sum)
        print(args)
    my_sum(1,2,3,4,5)
    #**kwargs 接受的是按照关键字传参的值,组织成一个字典
    def fun(**kwargs):
        print(kwargs)
    fun(a=1,b=2,c=4)

    两种动态参数混合使用

    #同时用*args,**kwargs
    def func(*args,**kwargs):
        print(args,kwargs)
    func(1,2,3,4,a=1,b=2)#必须先传位置参数,再传关键字参数

    动态参数的另一种传参方式

    #动态参数的另外一种传参方式
    def func1(*args):
        print(args)
    list1 = [1,2,3,4,5]
    func1(*list1)#在实参的角度,给一个序列(列表,元组等)加上*,就是将这个序列按照顺序打散传入

    函数进阶

    命名空间

    内置命名空间:--python解释器
      1.python解释器一启动就可以使用的名字存储在内置命名空间
      2.内置的名字在启动解释器的时候被加载进内存里
    全局命名空间:--我们写的代码但不是函数中的代码
      1.在程序从上到下执行的过程中依次被加入内存中
      2.放置了设置的所有变量名和函数名
    局部命名空间:--函数
      1.定义在函数中的名字
      2.调用函数时才会产生名称空间,随着函数执行的结束,该命名空间也随之被收回
    在局部:可以使用全局,内置命名空间中的名字
    在全局:可以使用内置命名空间中的名字,不能使用局部的
    每一个函数都有自己的名称空间,互不影响

    作用域

    全局作用域--所有代码
    局部作用域--函数

    a = 1
    def func1():
        a=a+1   #报错,对于不可变数据类型,在局部可以查看全局变量,但是不可以直接修改
    
    def func2():
        global a    #加global(声明了一个全局变量)可以修改,尽量避免使用
        a+=1

    locals()  globals()

      locals()
      查看所有本地命名空间中的名字,放在局部命名空间就打印局部命名空间中的名字
      globals()
      查看所有全局命名空间中的名字,和内置命名空间中的名字

    函数的嵌套

    在嵌套函数中,内部函数可以使用外部函数的变量,但不可以修改(对于不可变数据类型)

    # nonlocal:声明一个上层的局部变量,注意 只是局部变量
    a = 1
    def outer():
        a = 1
        def inner():
            nonlocal a
            a=2
            print('inner %d'%a)
        inner()
        print('outer %d'%a)
    outer()
    print('local %d'%a)

    闭包

     闭包:嵌套函数,内部函数要调用外部函数的变量

    def outer():
        a = 1
        def inner():
            print(a)
        print(inner.__closure__)#如果打印出cell,说明是一个闭包函数
        return inner
    inner = outer()
    inner()#调用inner
  • 相关阅读:
    Laravel日志查看器 -- log-viewer扩展
    php对象的实现
    Grpc+MagicOnion的学习和例子(二)
    Grpc+MagicOnion的学习和例子(一)
    Connection open error . Authentication to host xxx' for user 'aa' using method 'mysql_native_password' failed with message: Access denied for user 'aaa' (using password: NO)
    .netcore的配置IConfiguration和IOptions的使用
    C#.NET CORE的AddScoped之容器注入对象和接口实现的区别
    .netcore的微服务学习(四)--网关(gateway)之Ocelot+Consul+polly学习
    .netcore的微服务学习(三)--网关(gateway)之Ocelot+Consul学习
    .netcore学习之startup的IServiceCollection的理解
  • 原文地址:https://www.cnblogs.com/jiangchengcheng/p/9550288.html
Copyright © 2011-2022 走看看