zoukankan      html  css  js  c++  java
  • python 函数部分

    函数
    
    def fun(形参):  定义函数
    fun(实参)             执行函数
    return           函数的返回值,遇到return不执行下面的代码,无return和直接写return返回的是None,返回值有多个时会放到元组里
    '''
    函数的注释  标明函数的作用以及每个值得意义  使用 函数名.__doc__ 即可查询该函数得注释值
    '''
    函数名  就是变量的功能加上()就能执行(也叫第一对象)
    1、可以相互赋值
    def fun()
        print('123qwe')
    f = fun
    f()
    2、可以当成函数的参数
    def fun():
        print('123')
    def fun2(argc):
        argc()
        print('111')
    fun2(fun)
    3、可以当成容器类数据的参数
    def fun():
        print('123')
    def fun2():
        print('111')
    def fun3():
        print('3333333')
    list1 = [fun, fun2, fun3]
    for i in list1:
        i()
    4、可以当成函数的返回值
    def fun():
        print('123')
    def fun2(argv):         
        print('111')
        return argv          #函数作为返回值
    f = fun2(fun)           #将函数名作为参数
    f()
    说明:此时的argv就是fun就是f       f()实际上执行的是fun()  所以输出为:111     123
    函数的传参
    从实参角度传参顺序: 位置参数=》关键字参数
    def func1(x, y, z):
        print(x, y, z)
    func1(1, 2, 3)             #位置参数 必须一一对应
    func1(x=1, y=2, z=3) #关键字参数可不分顺序
    返回大数 三元运算符
    
    def compare(a, b):
        return a if a > b else b    
    或
    print(a if a > b else b)
    混合参数, 关键字参数必须在位置参数的后面。
    
    def fun(argv1, argv2, argv3):
        print(argv1)
        print(argv2)
        print(argv3)
    fun(1, 2, argv3=3)      #混合参数中位置参数一一对应,关键字参数必须在位置参数最后
    从形参角度传参顺序:  位置参数=》*args=》默认参数=》**kwargs
    1、位置参数 与实参角度一样,必须一一对应,位置参数必须传值
    2、默认参数   默认参数必须在位置参数后面, 默认参数是个可变数据类型
    
    当函数中有默认参数,那么实参使用默认的,如果写就覆盖默认参数。使用方法为sex = 'hhhh'(关键字传参法)
    def register(name, sex=''):
        with open('register.txt', encoding='utf-8',mode='a') as fd:
            fd.write('{},{}
    '.format(name, sex))
    while True:
        print('q exit')
        name = input('name=')
        sex = input('sex=')
        if name.upper() == 'Q':break
        register(name)                                # 不传实参时 形参会自动使用默认参数
    --------------------------------
    def default_param(a, l = [])        # 默认参数是可变数据类型
        l.append(a)
        print(l)
    default_param('hello')
    default_param('world')
    动态参数:fun(*args, **kwargs)万能参实
    当函数的传的参数不定时使用。*args接收的是位置参数,包括空值也不会报错,并存放到元组。     **kwargs接收的是关键字参数,并存放到字典
    def fun(*args, **kwargs):
        print(args)                      #输出类型为元组(针对所有位置参数)
        print(kwargs)                  #输出字典
    fun(1, 2, 3, 4, 5, 6, 7,'alex', '老男孩', a='w', b='q', c='323')
    输出:
    (1, 2, 3, 4, 5, 6, 7, 'alex', '老男孩')
    {'a': 'w', 'b': 'q', 'c': '323'}
    打散、聚合功能,*将形参无论什么格式以单个元素放入元组中。 **将形参聚合到字典中  (不会看这个)
    def fun(*args, **kwargs):                                      #形参加*表示将传参聚合并放入一个元组中, 加**表示聚合到字典中
        print(args)
        print(kwargs)
    list1 = [1, 2, 3, 4]
    tupe1 = (1, 2, 3, 4)
    list2 = ['alex', 'wuser', 4]
    dic = {'qq':1, 'er':'wwe'}
    fun(list1, *tupe1, *list2, cc = 4, **dic)                     #实参加 * 表示将位置参数迭代打散传入,作用域为 str tuple set  list     ** 表示将字典和关键字参数传入
    
    输出:
    ([1, 2, 3, 4], 1, 2, 3, 4, 'alex', 'wuser', 4)
    {'cc': 4, 'qq': 1, 'er': 'wwe'}
    将dic 以*dic打散为实参传入 形参接受 到的是dic的key值
    实参传入的字典key不能使用纯数字,因为传入的参数是当作变量使用的
    
    python的名称空间  
    全局名命空间   临时名称空间 内置名称空间
    运行py代码时,遇到一个变量时python会开辟一段空间,存的是 变量和值的指针的关系,如name与alix的id的关系,当print(name)时,会先找name然后再找对应关系,找到对应指针后重内存中找到alix并打印。
    遇到函数时只是将函数的名字记录到内存空间,其内部如何根本不关心,在函数调用时,python会开辟一段空间将记录函数内部的变量和对应值指针的关系记录,函数中的变量只能在函数内部使用,随着函数结束这块内存也会消失。
    代码的开始 创建的存储‘变量与值的关系’的空间叫全局名命空间(全局名命空间);
    在函数的运行中开辟的临时的空间叫做局部名命空间(临时名称空间)
    系统函数的是  内置名称空间
    加载顺序 :内置名称空间-》全局名称空间-》局部名称空间
    取值顺序: 局部名称空间-》全局名称空间-》内置名称空间
    作用域:
            全局作用域:全局名称空间 内置名称空间
            局部作用域:临时名称空间
    
    
    关键字:   注意如果不调用该函数,即使使用了global和nonlocal修饰   也不会起作用
    #global       在任何作用域  改变一个全局变量  ,如global 修饰的变量名不存在 相当于新建一个全局变量
    
    name = 'hello'
    def fun():
        global name     使用关键字后,调用函数后name变为全局变量
        name = 'abc'
    fun()
    print(name)
    输出:  abc
    #nonlocal   不能修改全局变量;只能在局部作用域中使用nonlocal,只改变当前作用域的变量,如过当前找不到就会像上层函数找,如果每层都找不到会报错。用的少 当py文件特别大时在嵌套过多时用
    
    def fun():
        name = '123'
        print('qq%s'% name)
        def fun2():
            nonlocal name
            name = 'abc'
            print(name)
        fun2()
        print(name)
    fun()
    输出:
    qq123
    abc
    abc
    -----------------
    
    a = 1
    def fun_1():
        a = 2
        def fun_2():
            global 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
  • 相关阅读:
    20175310 《Java程序设计》第3周学习总结
    IDEA学生免费申请教程
    20175310 《Java程序设计》第2周学习总结
    在虚拟机中使用中文输入法
    VMware虚拟机将英文改成中文的方法
    20175310 《Java程序设计》第1周学习总结(1)安装虚拟机
    20175310 《Java程序设计》第1周学习总结(2)
    Java 开源 CMS :magnolia
    开源网络监控管理系统:OpenNMS
    开源摄影机:Axiom Camera
  • 原文地址:https://www.cnblogs.com/Mr-wangxd/p/9449986.html
Copyright © 2011-2022 走看看