zoukankan      html  css  js  c++  java
  • Python函数参数,名称空间与作用域

    函数先定义后调用,分为定义和调用两个阶段。函数的作用域会在定义时确定,也就是在哪定义,作用域在哪个范围

    return函数的返回值:

    1.函数都有返回值,但是没有return时,函数返回为None

    2.return返回的数据类型没有限制,可以返回多个值,以形式,括号可加也可不加,

    return终止函数的运行,当有多个return时只会返回第一个值

    函数的参数:

    1. 位置参数

    def func1(x,y):    #x,y是形参

            return x*y

    func1(33,44)  #33,44是实参

    形参可以理解为变量名,而实参可以理解为变量值

    位置参数中的实参和形参是一一对应,按照从左到右的顺序

    参数在调用时生效,停止调用就失效

    1. 关键字参数

    def func2(x,y):    #按照key=value的形式传值

            print(x,y)

    func2(x=1,y=2) 或者 func2(y=2,x=10),不受顺序的限制

    位置实参和关键字实参可以混用,但是位置实参必须在前,关键字实参在后,一个形参只能被传值一次不能重复传值

    1. 默认参数

    参数在定义阶段就已经被赋值  

    def func3(x,y=3)

           print(x,y)

    func3(x=4),实参y可以不输入对应的形参,如果输入了默认参数就会改变为新的参数。

    注意的问题:默认参数必须放在位置参数后边

    默认参数通常定义为不可变类型

    默认参数只在定义时被赋值一次

    形参:值经常变化的情况下定义为位置参数,值通常不变的定义为默认参数

    1. 可变长参数

    可变长参数是实参的个数不固定

    *定义位置参数

    **定义关键字参数

    def func4(x,y,*args):

           print(x,y)

           print(args)

    func4(1,2,3,4,5,6) =>func4(1,2,*(3,4,5,6)

    def func6(*args,**kwargs): #func6(*(1,2,3),**{‘a’:4,’b’:5,’c’:6})=>func6(1,2,3,b=5,a=4,c=6)

           print(args,kwargs)

    def func5(x,y,**args):
       print(x,y)
       print(args)
    func5(x=1,y=3,z=4,u=7)

    1 3

    {'z': 4, 'u': 7}

    1. 命名关键字参数

    *后面定义的形参必须以关键字形式被传值

    形参:位置形参,默认参数,*args,命名关键字参数,**ksargs

    def register(*args,name='asda',age):
        print(args)
        print(name)
        print(age)

    (1, 2, 2, 3)

    asda

    10

    def func(x,*args,z=1,**kwargs):
        print(x)
        print(args)
        print(z)
        print(kwargs)
    func(1,2,3,4,5,a=1,b=2,c=3)

    1

    (2, 3, 4, 5)

    1

    {'a': 1, 'b': 2, 'c': 3}

    函数的嵌套:

    def f1():
        def f2():
            def f3():
                print('from f3')
            print('from f2')
            f3()
        print('from f1')
        f2()
    f1()

    from f1

    from f2

    from f3

    函数对象:

    可以当作参数

    可以当作函数的返回值

    可以当作容器类型的元素     字典

    名称空间:存放名称和值的绑定关系

    三种:

    1.内置名称空间:python解释器自带的名字,python解释器启动就会生成。

    2.全局名称空间:文件级别定义的名字都会存放于全局名称空间,执行

    python文件时就会生成。

    3.局部名称空间:定义在函数内部的名字,在函数调用时生效。

    三者的加载顺序:内置名称空间——>全局名称空间——>局部名称空间

    取值顺序:局部名称空间——>全局名称空间——>内置名称空间

    作用域:作用范围

    全局作用域:内置名称空间与全局名称空间的名字属于全局范围,

    在整个文件的任意位置都能被引用,全局有效。

    局部作用域:函数调用时

    闭包函数:函数内部定义的函数,成为内部函数,该内部函数包含对外部

    作用域,而不是对全局作用域名字的,那么该函数成为闭包函数。

  • 相关阅读:
    如何定时备份Mysql数据库
    Mysql如何分析慢查询及优化(一)--- EXPLAIN详解
    Mysql如何分析慢查询日志--MysqlDumpSlow详解
    Mysql添加用户及用户权限管理
    Mysql表的横向拆分与纵向拆分及简单案例
    Mysql触发器详解以及简单的案例
    Mysql存储过程详解及案例
    Mysql中如何查看线程
    Nginx命令与配置详解
    SQLSERVER 2008 技术内幕 T-SQL查询 笔记1: SQL 执行顺序
  • 原文地址:https://www.cnblogs.com/c491873412/p/7008415.html
Copyright © 2011-2022 走看看