PY学习第二天
list里面的元素的数据类型可以不同
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改
定义一个元素的元素时可能会出现歧义,这时候应该加逗号消除歧义
元组里嵌套列表,则列表里的元素可以变化,这与不变不产生歧义,因为元组不变是指向不变
只要x是非零数值、非空字符串、非空list等,就判断为True,否则为False
Python的循环有两种,一种是for...in循环,另一种是while循环
dict全称dictionary,在其他语言中也称为map
dict就是第二种实现方式,给定一个名字,比如'Michael',dict在内部就可以直接计算出Michael对应的存放成绩的“页码”,也就是95这个数字存放的内存地址,直接取出来,所以速度非常快。
(散列吗?)
通过dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value
请务必注意,dict内部存放的顺序和key放入的顺序是没有关系的
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key
set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集(&)、并集(|)等操作
set和dict的唯一区别仅在于没有存储对应的value,但是,set的原理和dict一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。试试把list放入set,看看是否会报错。
对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的
如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
pass语句什么都不做,那有什么用?实际上pass可以用来作为占位符,比如现在还没想好怎么写函数的代码,就可以先放一个pass,让代码能运行起来。
数据类型检查可以用内置函数isinstance()实现
参数定义的顺序:必选参数、默认参数、可变参数、命名关键字参数和关键字参数
Python的函数返回多值其实就是返回一个tuple。但是,在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,写起来更方便。
设置默认参数时,有几点要注意:一是必选参数在前,默认参数在后,否则Python的解释器会报错
二是当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。
有多个默认参数时,调用的时候,需按顺序提供默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。
定义默认参数要牢记一点:默认参数必须指向不变对象!
定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号
如果已经有一个list或者tuple,要调用一个可变参数怎么办?
在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数,kw将获得一个dict,注意kw获得的dict是extra的一份拷贝,对kw的改动不会影响到函数外的extra。
如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数
和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数
如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了
命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错
对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的
虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差
*args是可变参数,args接收的是一个tuple;
**kw是关键字参数,kw接收的是一个dict。
使用*args和**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法
命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值
浙公网安备 33010602011771号