局部变量;在函数体内部定义参数;在外部定义参数;可变参数

本文介绍了函数参数的使用,强调了局部变量的定义域,并指出未定义的局部变量会导致错误。讨论了传入可变参数时,不同类型的参数(可变与不可变)在函数内部操作对外部参数的影响。同时,提供了几个练习,如使用可变参数实现1-5的求和,以及利用'*'和'**'进行字典类型参数的求和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误示例:
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
>>>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值