3-3 Python函数常考题
Posted WinvenChang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3-3 Python函数常考题相关的知识,希望对你有一定的参考价值。
常考点:
- 参数传递
- (不)可变对象
- 可变参数
一、以下Python
代码分别输出什么?
- 可变类型作为参数
def flist(l):
l.append(0)
print(l)
l = []
flist(l) # [0]
flist(l) # [0, 0]
- 不可变类型作为参数
def fstr(s):
s += 'a'
print(s)
s = 'hehe'
fstr(s) # hehe
fstr(s) # hehe
以上代码考察点:传参方式;可变对象
二、Python
如何传递参数
一个容易混淆的问题
1.传递值还是引用呢?都不是。唯一支持的参数传递是共享传参
2.Call by Object(Call by Object Reference or Call by Sharing)
3.Call by sharing
(共享传参)。函数形参获得实参中各个引用的副本
说明:python
中一切皆对象,一个变量对虾包括它的type
(类型),id
(在内存中的地址),value
(变量的值)
三、Python
可变/不可变对象
搞懂可变和不可变内置对象有利于理解函数参数的副作用
1.哪些是可变对象?哪些不可变?
2.不可变对象 bool
/int
/float
/tuple
/str
/frozenset
3.可变对象 list
/set
/dict
四、一个小测试
检测下你是否理解了刚才说的例子?
# 一个小例题,请问这段代码会输出什么结果?
def clear_list(l):
l = []
ll = [1, 2, 3]
clear_list(ll)
print(ll) # [1, 2, 3]
python
可变参数作为默认参数,记住默认参数只计算一次
def flist(l=[1]):
l.append(1)
print(l)
fl() # [1, 1]
fl() # [1, 1, 1]
五、Python
*args
, **kwargs
函数传递中 *args
,**kwargs
含义是什么
1.用来处理可变参数
2.*args
被打包成 tuple
3.**kwargs
被打包成 dict
代码示例一:
# 什么是 args?
def print_multiple_args(*args):
print(type(args), args)
for idx, val in enumerate(args):
print(idx, val)
print_multiple_args('a', 'b', 'c')
# print_multiple_args(*['a', 'b', 'c']) # 这个输出结果和 上一行 代码一致
运行结果:
代码示例二:
def print_kwargs(**kwargs):
print(type(kwargs), kwargs)
for k, v in kwargs.items():
print('{{}: {}'.format(k, v))
print_kwargs(a=1, b=2)
# print_kwargs(**dict(a=1, b=2)) # 与上一行输出结果一致
运行结果:
代码示例三:
def print_all(a, *args, **kwargs):
print(a)
if args:
print(args)
if kwargs:
print(kwargs)
print_all('hello', 'world', name='muke')
运行结果:
以上是关于3-3 Python函数常考题的主要内容,如果未能解决你的问题,请参考以下文章