当前位置: 首页 > news >正文

Python 面试:可变类型和不可变类型作为函数参数,关键字参数

1. 可变类型作为参数

可变对象: list/set/dict

参数会指向可变对象的副本的地址,每次修改的是同一个对象。

def flist(l):l.append(0)print(l)ll = []
flist(ll)
flist(ll)

输出为:
[0]
[0, 0]

# 注意:l只是ll的一个副本,修改l不会改变ll的值
def clear_list(l):l = []ll = [1,2,3]
clear_list(ll)
print(ll)

输出为:
[1, 2, 3]

注意:参数每次指向同一个对象的地址。

def flist(l=[1]):l.append(1)print(l)flist()
flist()

输出为:
[1, 1]
[1, 1, 1]

2. 不可变类型作为参数

不可变对象:bool/int/float/tuple/str/frozenset

每次执行函数,会建立一个不可变对象的副本,因此参数每次指向一个新的不可变对象的地址。

def fstr(s):s += 'a'print(s)s = "hehe"
fstr(s)
fstr(s)

输出为:
hehea
hehea

3. 关键字参数

*args被打包成tuple
**kwargs被打包成dict

def print_multiple_args(*args):print(type(args), args)for idx, val in enumerate(args):print(idx, val)print_multiple_args('a', 'b', 'c')

另一种方式为:

def print_multiple_args(*args):print(type(args), args)for idx, val in enumerate(args):print(idx, val)print_multiple_args(*['a', 'b', 'c'])

输出为:
<class ‘tuple’> (‘a’, ‘b’, ‘c’)
0 a
1 b
2 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, c=3, d=4)

另一种方式为:

def print_kwargs(**kwargs):print(type(kwargs), kwargs)for k, v in kwargs.items():print('{}: {}'.format(k, v))print_kwargs(**dict(a=1, b=2, c=3, d=4))

输出为:
<class ‘dict’> {‘a’: 1, ‘b’: 2, ‘c’: 3, ‘d’: 4}
a: 1
b: 2
c: 3
d: 4

def print_all(a, *args, **kwargs):print(a)if args:print(args)if kwargs:print(kwargs)print_all('hello', 'world', name='Jack')

输出为:
hello
(‘world’,)
{‘name’: ‘Jack’}

http://www.lryc.cn/news/144399.html

相关文章:

  • Web3.0时代什么时候到来,Web3.0有什么机会?
  • vue心得
  • JavaScript—数据类型、对象与构造方法
  • 自定义node-red节点中,如何编写节点的配置信息弹窗
  • 数据之美:探索数据可视化设计的奇妙世界
  • docker初始化
  • 【C语言】结构体变量引用的一个例子
  • 美团笔试题之合并 K 个升序链表
  • C语言(第三十一天)
  • 【C/C++】虚析构 | 抽象类
  • MySQL 的隐式转换导致诡异现象的案例一则
  • 【考研数学】概率论与数理统计 —— 第二章 | 一维随机变量及其分布(2,常见随机变量及其分布 | 随机变量函数的分布)
  • 【2023中国算力大会】《中国综合算力指数(2023年)》出炉,宁夏“资源环境”位列全国第1,“算力”跃入Top10
  • 自动设置服务器全教程
  • Mysql--技术文档--B树-数据结构的认知
  • go gin 自定义验证
  • 掉了无数头发成地中海后,我整理出了这套40+的大屏模板,快收藏!
  • 【从零开始学习JAVA | 第四十六篇】处理请求参数
  • k8s的交付与部署案例操作
  • LVS集群 (四十四)
  • stm32之DS18B20
  • Redis的数据结构与单线程架构
  • c# modbus CRC计算器(查表法)
  • 2023.08.27 学习周报
  • css元素定位:通过元素的标签或者元素的id、class属性定位,还不明白的伙计,看这个就行了!
  • 基于Spring实现博客项目
  • 数据库第十七课-------ETL任务调度系统的安装和使用
  • Qt 动态中英文切换
  • hdfs操作
  • h5分享页适配手机电脑