python之函数参数进阶

无论传递的参数是可变还是不可变,只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用

传递参数时可变类型时,在函数内部,使用方法修改数据,同样影响到外部的数据。

def demo(num_list):
    print("函数内部的代码")
    #使用方法修改列表的内容
    num_list.append(9)
    print(num_list)
    print("函数执行完成")
gl_list=[1,2,3]
demo(gl_list)
print(gl_list)
----------------
D:\Anaconda\python.exe D:/Pycharm/PycharmProjects/python进阶语法/k05_函数内部通过方法修改可变参数.py
函数内部的代码
[1, 2, 3, 9]
函数执行完成
[1, 2, 3, 9]

Process finished with exit code 0

列表的+=的使用是用的extend方法

#使用赋值语句不会影响函数外变量
def demo(num,num_list):
    print("函数开始")
    num+=num
    #列表变量使用+=不会做相加在赋值的操作!
    #本质上是调用 extend 方法
    #num_list=num_list+num_list
    num_list+=num_list
    #num_list.extend(num_list)
    print(num)
    print(num_list)
    print("函数完成")
gl_num=9
gl_list=[1,2,3]
demo(gl_num,gl_list)
print(gl_num)
print(gl_list)
------------------------
D:\Anaconda\python.exe D:/Pycharm/PycharmProjects/python进阶语法/k06_加等于操作.py
函数开始
18
[1, 2, 3, 1, 2, 3]
函数完成
9
[1, 2, 3, 1, 2, 3]

Process finished with exit code 0

缺省参数

具有默认值的参数叫做缺省参数,定义位置必须保证带有默认值的缺省参数在列表末尾

gl_list=[6,3,9]
#升序排序
#gl_list.sort()      默认是false
#如果需要降序排序,需要执行reverse参数
gl_list.sort(reverse=True)
print(gl_list)

def print_info(name,gender=True):
    """

    :param name: 班上姓名
    :param gender: true 男生 false 女生
    """
    gender_text="男生"
    if not gender:
        gender_text="女生"
    print("%s 是 %s"%(name,gender_text))
print_info("xiaom")
print_info("xiaomei",False)
---------------------
D:\Anaconda\python.exe D:/Pycharm/PycharmProjects/python进阶语法/k07_缺省参数.py
[9, 6, 3]
xiaom 是 男生
xiaomei 是 女生

Process finished with exit code 0
def print_info(name,gender=Ture,title):

上面是定义是错误的

调用函数时,如果有多个缺省参数,需要指定参数名,这样解释器才能够知道参数的对应关系

多值参数

参数名前加一个* 可以接受元组

参数名前加两个* 可以接受字典

*args--元组参数

**kwargs--字典参数  键值对参数

def demo(num,*nums,**person):
    print(num)
    print(nums)
    print(person)

demo(1)
demo(1,2,3,4,5,name="xiao",age=18)
-------------------------
D:\Anaconda\python.exe D:/Pycharm/PycharmProjects/python进阶语法/k08_多只参数.py
1
()
{}
1
(2, 3, 4, 5)
{'name': 'xiao', 'age': 18}

Process finished with exit code 0
#def sum_numbers(args):
def sum_numbers(*args):

    num=0
    print(args)
    for n in args:
        num+=n
    return num
result=sum_numbers(1,2,3)
#result=sum_numbers((1,2,3))    args传去1,2,3元组
print(result)
-----------------
D:\Anaconda\python.exe D:/Pycharm/PycharmProjects/python进阶语法/k09_多值参数求和.py
(1, 2, 3)
6

Process finished with exit code 0

元组和字典的拆包

加*

加**

def demo(*args,**kwargs):
    print(args)
    print(kwargs)

gl_nums=(1,2,3)
gl_dicr={"name":"xiaom","age":19}
demo(gl_nums,gl_dicr)    #不使用拆包
#demo(*gl_nums,**gl_dicr)
——————-------------
D:\Anaconda\python.exe D:/Pycharm/PycharmProjects/python进阶语法/k10_元组和字典的拆包.py
((1, 2, 3), {'name': 'xiaom', 'age': 19})
{}

Process finished with exit code 0
-----------------
def demo(*args,**kwargs):
    print(args)
    print(kwargs)

gl_nums=(1,2,3)
gl_dicr={"name":"xiaom","age":19}
#demo(gl_nums,gl_dicr)    #不使用拆包
demo(*gl_nums,**gl_dicr)#使用拆包
------------------
D:\Anaconda\python.exe D:/Pycharm/PycharmProjects/python进阶语法/k10_元组和字典的拆包.py
(1, 2, 3)
{'name': 'xiaom', 'age': 19}

Process finished with exit code 0

猜你喜欢

转载自blog.csdn.net/qq_41761599/article/details/88957568