一、函数有可变类型和不可变类型:
1.不可变类型
#!/usr/bin/python3
def ChangeInt( a ):
a = 10
b = 2
ChangeInt(b)
print( b ) # 结果是 2
2.可变类型
在函数里修改了参数,那在调用这个函数时候,原始函数也会改变
def change(a):
a.append([1,2,3,4])
print('调用函数',a)
return
a=[10,20,30,40]
change(a)
print('外部修改',a)
结果为:
调用函数 [10, 20, 30, 40, [1, 2, 3, 4]]
外部修改 [10, 20, 30, 40, [1, 2, 3, 4]]
二、参数有4种
1.必要参数
#可写函数说明
def printme( str ):
"打印任何传入的字符串"
print (str)
return #调用printme函数
printme()
这样会返回错误
2.关键字参数
def keyword(name,age):
print('请输入姓名',name)
print('请输入年龄',age)
return
print(keyword(name='一个个',age=24))
print(keyword('一个个',24))
输出结果:
请输入姓名 一个个
请输入年龄 24
3.默认参数
def keyword(name,age=60):
print('请输入姓名',name)
print('请输入年龄',age)
return
print(keyword('一个个'))
print(keyword('一个个',24))
可以省略,也可以修改
结果如下:
请输入姓名 一个个
请输入年龄 60
None
请输入姓名 一个个
请输入年龄 24
None
4.不定长参数
加一个* 是元祖,两个星是字典
(1):元祖
def nottrue(arg,*args):
print('打印arg',arg)
print('打印args',args)
return
nottrue(60,70,80)
返回结果
打印arg 60
打印args (70, 80)
(2):字典
def nottrue(arg,**args):
print('打印arg',arg)
print('打印args',args)
return
nottrue(60,a=70,b='fanfan')
返回结果:
打印arg 60
打印args {'a': 70, 'b': 'fanfan'}
***声明函数时,参数中星号 * 可以单独出现,如果单独出现星号 * 后的参数必须用关键字传入***
>>> def f(a,b,*,c): ... return a+b+c ... >>> f(1,2,3) # 报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() takes 2 positional arguments but 3 were given >>> f(1,2,c=3) # 正常 6 >>>