简明python教程-之参数与数据类型

 
来源: 简明 Python 教程(byte-of-python-chinese-edition)
 
一、可变参数*args 与 关键字参数**kwargs
0.参考示例: 
 
 

 

它是如何工作的
 
当我们声明一个诸如 *param 的星号参数时,从此处开始直到结束的所有位置参数(Positional Arguments)
都将被收集并汇集成一个称为“param”的元组(Tuple)。
 
类似地,当我们声明一个诸如 **param 的双星号参数时,从此处开始直至结束的所有
关键字参数都将被收集并汇集成一个名为 param 的字典(Dictionary)。
 
a对应5的是位置参数的第一个,之后的1,2,3被视为元组,
元组之后的Jack=1123,John=2231,Inge=1560被视为字典(键值对)。
 
 
1.什么是可变参数?可变参数怎么调用?
 

 

 

 
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。
在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。
但是,调用该函数时,可以传入任意个参数,包括0个参数
 
*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见。
 
 
2. 什么是关键字参数?关键字参数怎么调用?

 

**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,
kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
 
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
 
***********************************************************************************************************************
另外还有 命名关键字参数,必须传入参数名
 
def person(name, age, *, city='Beijing', job):
  print(name, age, city, job)
 
由于命名关键字参数city具有默认值,调用时,可不传入city参数:
 
>>> person('Jack', 24, job='Engineer')
Jack 24 Beijing Engineer
 
使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符
如果缺少*,Python解释器将无法识别位置参数和命名关键字参数:
 
def person(name, age, city, job):
  # 缺少 *,city和job被视为位置参数
  pass
 
 
3.个人理解:关键字参数就是形式类似字典,以键值对或者赋值(Jack=1123),可以被组装为dict的参数。
 
 

 

 
***********************************************************************************************************************
参数组合
 
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,
这5种参数都可以组合使用。
 
但是请注意,参数定义的顺序必须是:
必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
 
********************************************************************************************************************
 
二、数据结构
 
数据结构(Data Structures)基本上人如其名——它们只是一种结构,能够将一些数据聚合
在一起。换句话说,它们是用来存储一系列相关数据的集合。
 
Python 中有四种内置的数据结构——列表(List)、元组(Tuple)、字典(Dictionary)和集
合(Set)。
 
1.序列
列表、元组和字符串可以看作序列(Sequence)的某种表现形式。
 
序列的主要功能是资格测试(Membership Test)(也就是 in 与 not in 表达式)和索引 操作(Indexing Operations),它们能够允许我们直接获取序列中的特定项目。
 
上面所提到的序列的三种形态——列表、元组与字符串,同样拥有一种切片(Slicing)运算 符,它能够允许我们序列中的某段切片——也就是序列之中的一部分。
 

 

输出:

 

 
(1)列表
  1. 列表 是一种用于保存一系列有序项目的集合,
  2. 项目的列表应该用方括号括起来,
  3. 列表是一种可变的(Mutable)数据类型
 
(2)元组
  1. 元组(Tuple)用于将多个对象保存到一起。
  2. 元组显示指定是加上括号,并在括号内部 用逗号进行分隔。隐式指定,则是只有逗号
  3. 元组的一大特征类似于字符串,它们是不可变的,也 就是说,你不能编辑或更改元组。
  4. 元组通常用于保证某一语句或某一用户定义的函数可以安全地采用一组数值,意即元组内的 数值不会改变。

  

输出
  

 

 
(3)字典
  1. 将键值(Keys)(即姓名)与值(Values)(即地 址等详细信息)联立到一起
  2. 键值必须是唯一的
  3. 只能使用不可变的对象(如字符串)作为字典的键值,可以使用可变或不可变的对象作为字典中的值
  4. 通过使用符号构成 d = {key : value1 , key2 : value2} 这样的形式,来成对地指定键值与值
  5. 字典中的成对的键值—值配对不会以任何方式进行排序
 
2.集合
集合(Set)是简单对象的无序集合(Collection)。当集合中的项目存在与否比起次序或其出
现次数更加重要时,我们就会使用集合。
 
通过使用集合,你可以测试某些对象的资格或情况,检查它们是否是其它集合的子集,找到
两个集合的交集,等等。
 
 

 

 
 

posted @ 2022-02-08 15:13  夜星月涯  阅读(155)  评论(0)    收藏  举报