无论传递的参数是可变还是不可变,只要针对参数使用赋值语句,会在函数内部修改局部变量的引用,不会影响到外部变量的引用
传递参数时可变类型时,在函数内部,使用方法修改数据,同样影响到外部的数据。
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