错误示例:
func是一个函数,把它赋值为10,就变成了一个整数,整数不可调用
>>> def func():
... n=2
... return n
...
>>> func=10
>>> print(func()) #整数(非函数对象)加括号,不可调用
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
如何修正:
删掉之后也不行,只能再重新定义一遍;但是内置函数不需要重新定于,删掉就行,比如“len”
>>> del func
>>> print(func())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'func' is not defined
>>> def func():
... n=2
... return n
...
>>> print(func())
2
当函数体里面没有定义的时候,会从外面找。
>>> n=1
>>> def func():
... return n+1
...
>>> print(func())
2
局部变量:在函数内部的变量定义叫局部变量,出了这个函数,这个局部变量就不可以被访问了,如果同名,互不干扰。
局部变量n在赋值前被引用,
要么在外面定义n,要么在里面定义,但是不能里面没有定义就直接调用
错误示例:
#要么在外面定义n,要么在里面定义,但是不能里面没有定义就直接调用
>>> n=1
>>> def func():
... n+=1
... return n
...
>>> print(func())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in func
UnboundLocalError: local variable 'n' referenced before assignment
#局部变量n在赋值前被引用 “n+=1”,认为你局部变量没有初始化
>>>
原则1:
如果你传入的参数是个变量,这个变量是可变类型(list、dict、set),那么函数内部对于这个参数的所有操作都会影响外部的参数值。
>>> n={}
>>> def func(a):
... a[1]=1
...
>>> print(func(n))
None
>>> print(n)
{1: 1}
>>>
原则2:
如果你传入的参数是个变量a,这个变量是不可变类型(字符串、整数、小数),那么函数内部对于这个参数的所有操作结果都不会影响外部的参数值。
>>> n="abc"
>>> def func(a):
... a=a+"d"
...
>>> print(func(n))
None
>>> print(n)
abc
可变参数:最后那个值传几个参数都可以。
>>> def add(a,b,*c):
... print(type(c))
... print(c)
...
>>> add(1,2,3,4,5)
<class 'tuple'>
(3, 4, 5)
>>> add(1,2,3,4,5,6,7,8)
<class 'tuple'>
(3, 4, 5, 6, 7, 8)
>>>
练习:用可变参数的方式,把1-5求和并返回
>>> def add(a,b,*c): #*c 传几个参数都可以
... result=a+b
... for i in c:
... result+=i
... return result
...
>>> print(add(1,2,3,4,5))
15
两个‘*’号是字典类型
>>> def add(a,b,**c):
... print(type(c))
... print(c)
...
>>> print(add(1,2,c=3,d=4,e=5))
<class 'dict'> #字典类型
{'c': 3, 'd': 4, 'e': 5}
None
>>>
练习:用**把1-5求和并返回
>>> def add(a,b,**c):
... result=a+b
... for i in c.values(): #遍历字典
... result+=i
... return result
...
>>> print(add(1,2,c=3,d=4,e=5))
15
>>>
练习:用*和**,来求和
>>> def add(a,b,*c,**d):
... result=a+b
... for i in c:
... result+=i
... for i in d.values():
... result+=i
... return result
...
>>> print(add(1,2,3,4,c=5,d=6,e=7))
28
>>>