Python函数的进阶

一  函数的动态参数

*agrs  位置参数动态传参

*args  接收多个位置参数

1 def func(*args):
2     print(args)
3 
4 func("女儿国","西游记","猪八戒","孙猴子","从来如此",)
5 tu = ("女儿国","西游记","猪八戒","孙猴子","从来如此")
6func(*tu)
7
8 返回的是元组

*args 聚合
*tu 打散

**kwagrs  关键字参数动态传参

** 接收多个关键字参数

 1 def func(**kwargs):
 2     print(kwargs)
 3 
 4 func(jj = '林俊杰',jay = '周杰伦',pyy = "彭于晏")
 5 dic = {'jj' : '林俊杰','jay' : '周杰伦','pyy' : "彭于晏"}
 6 func(**dic)
 7 
 8 返回的是字典
 9 
10 
11 **kwargs   聚合
12 **dic 打散

参数的顺序: 位置参数   *agrs   默认值参数   **kwargs

1 def func(*args,**kwargs):   什么都能接收    可以说是无敌
2     pass

形参位置:  *  **   是聚合
实参位置:  *  **   是打散

函数的注释

def func(a , b):
    '''
    计算两个数的和
    :param a: 用户给的第一个数
    :param b: 用户给的第二个数
    :return: 返回两个的和
    '''
    sum  = a+b
    return sum


又称文档注释

 

命名空间

内置命名空间: 存放python解释器为我们提供的名字, int , str ,list ,tuple , dict  这些都是内置命名空间
全局命名空间: 我们直接在py文件中,函数外声明的变量都属于全局命名空间
局部命名空间:函数中声明的变量会放在局部命名空间

局部变量:只在函数内部起作用的变量

全局变量:在整个程序中都起作用

a = 20  # 全局变量
def func():
    a = 10  #局部变量
    print(a)
func()

 

作用域:  全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序;

当全局变量与局部变量同名时: 在定义局部变量的子程序内,局部变量起作用; 在其他地方全局变量起作用

 

globas():  查看全局作用域的内容
locals():  查看局部作用域的内容

a = 20
def func():
    a = 10
    b = 30
    def asd():
        print("哈哈")
    print(a,b)     使用的局部作用域
    print(globals())   打印全局作用域的内容
    print(locals())      打印局部作用域的内容

func()

 

函数的嵌套

函数的可以互相嵌套

a = 1
def fun_1():
    a = 2
    def fun_2():
        nonlocal a
        a = 3
        def fun_3():
            a = 4
            print(a)
        print(a)
        fun_3()
        print(a)
    print(a)
    fun_2()
    print(a)
print(a)
fun_1()
print(a)


结果
1
2
3
4
3
3
1

 

 

 

global 和  nonlocal  关键字

global : 在局部访问全局中的内容

nonlocal : 在局部寻找外层函数中离他最近的那个变量

 












posted @ 2018-08-09 16:51  heshun  阅读(203)  评论(0编辑  收藏  举报