python(day007——函数2)

1.函数的返回值

>>> def get_values():
...     return 1,2,3
...
>>> print(get_values())
(1, 2, 3)
#函数的返回值只能是一个值,返回多个内容时会组成一个“tuple”返回
#可用列表实现返回多个值
>>> type(get_values())
<class 'tuple'>
>>> for i in get_values():
...     print(i)
...
1
2
3

2.局部变量和全局变量

>>> def a():
...   x=100
...   print(x)  #x(局部变量)在函数中,在函数外不能访问无意义
...
>>> x   
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined


>>> x=100  #普通变量
>>> def a():
...    print(x)
...
>>> a()
100

>>> x=100
>>> def a():
...     x=6
...     print(x)
...
>>> a()
6
>>> x
100

"""
1 x(局部变量)在函数里面有一个且赋值了,在函数外面也有一个x。
那么两个x都是互相独立,不干扰的。

2 x在函数里面有一个且没有赋值了,在函数外面也有一个x。
这两个x是同一个值。

3 x在函数里面有一个且赋值了,在函数外面也有一个x,
想让这两个x关联在一起,使用global
"""

>>> x=100
>>> def a():
...     global x #全局变量
...     print(x)
...     x=123
...     return x
...
>>> x
100
>>> a()
100
123
>>> x=939
>>> a()
939
123


>>> s=100
>>> def ss():
...    s=s+1
...
>>> ss()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in ss
UnboundLocalError: local variable 's' referenced before assignment

全局变量名和函数名不能相同。此外,若局部变量名与全局变量名或函数名相同,则在该局部变量作用范围内不能使用相应的全局变量或函数。 

3.不可变参数和可变参数

可变类型 Vs 不可变类型

可变类型(mutable):列表,字典

不可变类型(unmutable):数字,字符串,元组

这里的可变不可变,是指内存中的那块内容(value)是否可以被改变

#不可变参数
>>> s='abc'  #不可变类型
>>> def func(a):
...    a=a+'d'
...    return a
...
>>> s
'abc'
>>> print(func(s))
abcd
>>> s
'abc'
>>>
>>>
>>> l=[1,2,3]  #可变类型
>>> def funb(b):
...     b.append(4)
...     return b
...
>>> print(funb(l))
[1, 2, 3, 4]
>>> l  #list改变
[1, 2, 3, 4]

*如何保证传入参数list不变

>>> print(funb(list(l)))  #相当于传入list(l)为参数,不会改变原有l
[1, 2, 3, 4]
>>> l
[1, 2, 3]

*参数有默认值

>>> def func(a=100):
...    print(a)
...
>>> func()  #若没有默认值,则此调用方法会报错
100
>>> func(200)
200

#默认值参数须放在非默认值参数之后
>>> def func(a=100,b):
...     print(a,b)
...
  File "<stdin>", line 1
SyntaxError: non-default argument follows default argument
>>> def func(b,a=100):
...    print(a,b)
...
>>> func(1)
100 1
>>> func(1,2)
2 1
>>> func(a=1,b=2)
1 2

*可变参数

>>> def func(a,b,*c):
...    print(a)
...    print(b)
...    print(type(c))
...    print(c)
...
>>> func(1,2)
1
2
<class 'tuple'>
()
>>> func(1,2,3,4,5)
1
2
<class 'tuple'>
(3, 4, 5)

#所有参数求和
>>> def func(a,b,*c):  #可变参数
...     result=0
...     result+=a
...     result+=b
...     for i in c:
...        result+=i
...     return result
...
>>> func(1,2)
3
>>> func(1,2,4)
7
>>> func(1,2,4,2,3)
12

 

>>> def fund(a,b,**d):
...    print(a)
...    print(b)
...    print(type(d))
...    print(d)
...
>>> fund(1,2,m=3,n=5)
1
2
<class 'dict'>
{'m': 3, 'n': 5}
>>> fund(1,2)
1
2
<class 'dict'>
{}


#所有参数求和
>>> def fund(a,b,**d):
...    result=0
...    result=a+b
...    for i in d.values():
...         result+=i
...    return result
...
>>> fund(1,2,m=3,n=5)
11
>>> fund(1,2,m=3,n=5,c=332)
343

>>> def fund(a,b,*c,**d):
...    result=0
...    result=a+b
...    for i in c:
...         result+=i
...    for i in d.values():
...         result+=i
...    return result
...
>>> fund(1,2,3,4,21,5,m=2,o=3,t=3)
44


#解包:*是list和tuple解包,**是dict解包
>>> fund(1,2,3,4,[1,2,3],m=2,o=3,t=3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in fund
TypeError: unsupported operand type(s) for +=: 'int' and 'list'
>>> fund(1,2,3,4,*[1,2,3],m=2,o=3,t=3)  #list不能直接传,需要用*进行“解包”操作
#以上代码相当于fund(1,2,3,4,1,2,3,m=2,o=3,t=3)
24


>>> s
{'x': 9, 'y': 4}
>>> fund(1,2,3,4,s,m=2,o=3,t=3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in fund
TypeError: unsupported operand type(s) for +=: 'int' and 'dict'
>>> fund(1,2,3,4,**s,m=2,o=3,t=3)
31

4.lambda函数(匿名函数)

>>> y=lambda x:x+1
>>> y   #y只是存储lambda函数的变量
<function <lambda> at 0x0000016D4D6329D8>
>>> y(1)
2
>>> y=lambda x,y:x*y
>>> y(3,4)
12
>>> m=y
>>> m
<function <lambda> at 0x0000016D4D636318>
>>> m(4,5)
20

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值