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语句,函数执行完毕后也会返回结果,只是结果为Nonereturn 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

 

如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收cityjob作为关键字参数

和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*

命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错

 

对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的

 

虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差

 

*args是可变参数,args接收的是一个tuple;

**kw是关键字参数,kw接收的是一个dict。

使用*args**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法

 

命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值

 

posted @ 2021-02-17 12:57  yunqiao  阅读(48)  评论(0)    收藏  举报