python学习笔记(二)

怎甘沉沦 提交于 2020-04-07 17:10:56

一、tuple和list数据类型

共同点:

  都是有序集合,集合的元素类型可以是不同的数据类型;

  第1元素索引为0,都可以用 变量[索引] 这样方式访问元素。最后一个元素索引号也可以是-1表示,以此类推。

不同点:list集合的元素可以改变,集合用[]括号;

           tuple集合不可以改变,集合用()括号。

#list定义
>>> classmates = ['Michael', 'Bob', 'Tracy']
#tuple定义
>>> classmates = ('Michael', 'Bob', 'Tracy')

定义只有一个元素的tuple,必须要以,号末尾:

>>> a=(1,)

 

计算元素个数:

>>> a = (1,2)
>>> len(a)
2

 

list元素的操作:

>>> classmates = ['Michael', 'Bob', 'Tracy']
#末尾加元素
>>> classmates.append('Adam')
#插入元素到指定位置
>>> classmates.insert(1, 'Jack')
#删除末尾元素
>>> classmates.pop()
#删除某个指定位置的元素
>>> classmates.pop(1)
#替换元素内容
>>> classmates[1] = 'Sarah'
#元素也可以是另一个list/tuple
>>> s = ['python', 'java', ['asp', 'php'], 'scheme']
#可以用二维数组方式访问
>>> s[2][1]
#tuple的元素也可以是List
>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

 

二、条件判断

if语句完整表达式:

if <条件判断1>:
    <执行1>
elif <条件判断2>:
    <执行2>
elif <条件判断3>:
    <执行3>
else:
    <执行4>

 

注意: 条件判断也可以只是一个变量,只要变量是非零数值、非空字符串、非空list等,就判断为True,否则为False

 

三、循环

1、for...in:把list或tuple的每个元素迭代出来:

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)

 

额外:

range(n)函数:生成0-n的整数序列;

list()函数:转换成list。

2、while:满足条件就不断循环,直至条件不满足为止:

3、break和continue:

  break直接退出循环;

       continue只是跳出此次循环。

 

四、dict和set类型

dict:key-value类型,用{}括号表示。

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']

 

dict优点:能快速根据key查到相应value,缺点是内存占用大。

判断key是否存在,可用in:

>>> 'Thomas' in d
False

 

get方法可以安全地获取指定key的value:

>>> d.get('Thomas')  #key不存在,返回None
>>> d.get('Thomas', -1)   #key不存在,返回-1默认值
-1>>> d.pop('Bob') #删除指定key值

 

set: 一组key集合,没有value,且key不重复。key值也不排序。

  set可以看成是无序和无重复元素的集合。

创建set,要用list或者tuple作为输入:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

 

add方法可以添加元素到set中,可重复添加:

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)  #无效果
>>> s
{1, 2, 3, 4}

 

remove删除元素:

>>> s.remove(4)
>>> s
{1, 2, 3}

两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

 

dict与set的区别:

唯一区别是set没有对应的value,

相同点是不可以放入可变对象。

>>> s=set((1,2))
>>> s
{1, 2}
>>> s.add((1,2))
>>> s
{1, 2, (1, 2)}
>>> s.add((1,[2,3]))  #此代码会报错,因为tuple的元素中包含list,list是可变对象
Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    s.add((1,[2,3]))
TypeError: unhashable type: 'list'

 

 

 五、函数

python的内置函数,可参考:http://docs.python.org/3/library/functions.html

函数定义:

def def_name(param):
    <函数语句体>

 

 

从其他定义好函数的py文件中引入:

>>> from abstest import my_abs  #abstest.py文件中引入my_abs函数
>>> my_abs(-9)
9

 

 

空函数:用pass语句

def nop():
    pass   #pass为占位符,可使代码运行时不出错

 

 

参数类型检查:

python不会自动检查参数类型,所以使用内置函数isinstance()实现:

def my_abs(x):
    if not isinstance(x, (int, float)):
        raise TypeError('bad operand type');
    if (x > 0):
        return x;
    else:
        return -x;

 

 

返回多个值:利用tuple类型返回多个值

import math

def move(x, y, step, angle=0):
    nx = x + step * math.cos(angle)
    ny = y - step * math.sin(angle)
    return nx, ny   #这里返回多个值,实质是返回tuple
>>> r = move(100, 100, 60, math.pi / 6)
>>> print(r)
(151.96152422706632, 70.0)

 

 

六、各种函数的参数定义

1、位置参数:即普通参数。

定义后,调用函数时,位置参数值必须传入。

 

2、默认参数:

def func(x, n=2):  #默认参数要放在位置参数后面
    return x+n

>>>func(1)
3

 

定义了多个默认参数的函数,调用时可按顺序提供参数值。也可以不按顺序提供,这时需要将参数名写上。

def sum(x, y=2, z=3):
    return x+y+z;

sum(1, 10)    #z参数使用默认值

sum(1, z=10)  #y参数使用默认值

 

注:定义默认参数值,一定要指向不变对象。因为Python函数在定义时,默认参数值已经计算出来了。

def add_end(L=[]):
    L.append('END')
    return L

>>> add_end()
['END']
>>> add_end()
['END', 'END']        #第二次的调用开始出问题了。
>>> add_end()
['END', 'END', 'END']

 

以上例子可改为:

def add_end(L=None):
    if L is None:
        L = []
    L.append('END')
    return L

 

 

3、可变参数:

参数定义前加*号,代表可传入0个或任意多个参数。

函数调用时,实际自动组装为一个tuple。

def sum(*numbers):
    result = 0
    for num in numbers:
        result = result + num
    return result

>>>sum(1, 2, 3)
6

>>>nums = [1,2,3]
>>>sum(*nums)   #传入list或tuple元素可变成可变参数传入
6

 

 

4、关键字参数

**号前缀定义的参数,允许可传入0个或任意个含参数名的参数。

函数调用时,会将这些参数组装成dict。

def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)

>>>person('Michael', 30)
name:Michael age:30 orther:{}

>>>person('Mochael', 30, city='Beijing', job='Engineer')
name:Michael age:30 orther:{'city':'Beijing', 'job'='Engineer'}

>>>extra={'city':'Beijing', 'job'='Engineer'}
>>>person('Jack', 24, **extra)   #可以将dict设为关键字参数传入,注意,**kw参数获得的是extra的一个拷贝
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

 

 

5、命名关键字参数

限制传入的关键字参数,明确指定要传入的参数名。

定义方式有两种:

def person(name, age, *, city='Beijing', job):   #*号后的所有参数都是命名关键字参数
    print(name, age, city, job)>>> person('Jack', 24, city='Beijing', job='Engineer') #调用时要明确参数命名

>>> person('Jack', 24, job='Engineer') #命令关键字参数有默认值时,可不传入
def person(name, age, *args, city, job): #args可变参数后的都是命名关键字参数 print(name, age, args, city, job)

 

 

五种参数的组合顺序:位置参数(无默认值)、默认参数、可变参数、命名关键字参数、关键字参数

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!