python参数

来源:互联网 发布:拓扑算法数学建模 编辑:程序博客网 时间:2024/05/20 09:23

1.传递参数:

参数传递的关键:        A.参数的传递是通过自动将对象赋值给本地变量名来实现的        B.在函数内部的参数名不会影响调用者        C.改变函数的可变对象参数的值会影响调用者参数传递的方式:        可变参数:            通过指针进行传递        不可边参数:            通过值进行传递        *:*对本地变量引用的可变对象进行原处修改时,会改变该   可变对象的值,当该对象的生命周期长于调用它的函数时,会影响到调用者*    避免参数传递过程中对可变对象的原处修改:        在需要共享对象时,对可变对象的原处修改是一个方便的机制,但是当不需要共享对象并且不希望对传入的参数的修改影响到原有的对象时,需要去创建可变对象的拷贝.        对象拷贝:            序列:                obj = seq[:]            copy.copy:                obj2 = copy.copy(obj1)            将可变对象转化为不可变对象传入:                ls1 = [1,2,3,4]                func1(tuple(ls1))

2.参数的匹配模型:

位置匹配: 从左往右匹配关键字匹配:通过name=value进行匹配默认参数: 为没有传入值的参数设定默认值可变参数: 以*开头,收集任意多的参数可变参数解包: 传递任意多的基于位置或关键字的参数keyword-only参数: 参数必须按照名称传递可变参数解包:    调用者:        >>> a = [1,2,3,4,5,6,7,8]        >>> def func(*name):        ...     print(name)        ...         >>> func(*a)        (1, 2, 3, 4, 5, 6, 7, 8)        >>> func(a)        ([1, 2, 3, 4, 5, 6, 7, 8],)        *:*当以*a作为参数传递给函数时,会将列表a解包为位置参数传递给函数,而函数会将位置参数收集为一个元组          当直接将a传递给函数时,函数会将列表a作为整体对待*函数参数匹配表:    语法                     位置       解释    func(value)             调用者      位置参数    func(name=value)        调用者          关键字参数    func(*sequence)         调用者          将序列解包为独立的值作为位置参数传递给函数    func(**dict)            调用者          将字典解包为独立的键值对,并将键值对作为位置参数传递给函数    def func(name)          函数            变量名或位置参数    def func(name=value)    函数            默认参数    匹配    def func(*name)         函数            匹配并收集所有非关键字参数,并封装为元组    def func(**name)        函数            匹配并收集所有关键字或以键值对传入的位置参数,并封装为字典    def func(*args,name)    函数       参数name必须作为关键字参数传递    def func(*,name=value)  函数            仅能传入关键字参数参数匹配模型的顺序:    函数调用:        位置参数        关键字参数        *sequence序列        **dict    函数头部:        任何一般参数        默认参数        *name        关键字参数        keyword-only        **name    python参数匹配检测机制:        1.通过位置分配非关键字参数        2.通过匹配变量名分配关键字参数        3.其它额外的非关键字参数匹配至*name元组中        4.其他额外的关键字参数匹配至**name字典中        5.用默认值分配给在头部未得到分配的参数    *:keyword-only参数只能出现在**args之前,不能出现在**之后,也可能包含在**args之中

3.自定义编写print函数:

import sys     def myprint(*args,*kargs):         sep = kargs.get('sep',' ' ')         end = kargs.get('end', ' ')         files = kargs.get('file',sys.stdout)         output = ""         first = True         for i in args:             output += ('' if first else sep) + str(i)           first = False        files.write(output+end)     def myprint2(*args, end='\n', sep=' ',files=sys.stdout):         output = ""         first = True         for i in args:             output += ('' if first else sep) + str(i)             first = False         files.write(output + end)     #将第一个函数改写,在出现多有参数的情况下抛出异常     def myprint3(*args, *kargs):         sep = kargs.pop('sep',' ')         end = kargs.pop('end','\n')         files = kargs.pop('files',sys.stdout)         output = ""         first = True         for i in args:             output += ('' if first else sep) + str(i)              first = False   files.write(output + end)

4.函数和调用者之间交流结果的三种方式:

    return    global    共享对象
原创粉丝点击