Python学习笔记——基础知识(函数,切片,迭代,列表生成式)

  1. int()函数接收两个参数,默认base=10,可以将一个string按照base的进制转换成integer,返回的是十进制的数值。
int('100')
=> 100
int('100',8)
=> 64
int('0x1d',16)
=> 29
  1. 当一个函数同时返回多个值时,其实是以tuple形式返回,并且可以同时按顺序赋值给多个变量。
def double(a,b):
	return a * 2, b * 2
double(1,2)
=> (2, 4)
type(double(1,2))
=> <class 'tuple'>
x, y = double(1,2)
print(x,y)
=> 2  4
  1. 定义一个函数可以传入任意个参数,在参数前加星号“*”。
def print_arg(*args):
	print args
print_arg()
=> ()
print_arg(1,)
=> (1,)
print_arg(1)
=> (1,)
print_arg(1,2)
=> (1, 2)
print_arg('a','b')
=> ('a', 'b')

注:Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。

  1. 切片
L = range(1,101) #生成一个list,从1到100的自然数。(不包含区间尾部的101)
L[1:13:2] #从索引为0开始,截至索引为13处(不含13),即截取区间为(13-1)个元素,步长为2。
=> range(2, 14, 2) #等价于[2,4,6,8,10,12]
L = ['Adam', 'Lisa', 'Bart', 'Paul']
L[0:-1]
=> ['Adam', 'Lisa', 'Bart'] #支持倒序索引
L[-4:-1]
=> ['Adam', 'Lisa', 'Bart'] #支持倒序索引
L[:-1]
=> ['Adam', 'Lisa', 'Bart'] #默认start == 1
L[:]
=> ['Adam', 'Lisa', 'Bart', 'Paul'] #默认end到最末尾。想要从开始输出,start可以为0或为空或用倒序形式-len(L)表示。
L[:4]
=> ['Adam', 'Lisa', 'Bart', 'Paul'] #想要输出到末尾,end可以为空或len(L)。
L[::2]
=> ['Adam', 'Bart'] #默认step == 1
  1. Python 的迭代就是指for循环,不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。可以用collections.abc模块中的Iterable来检测。
from collections.abc import Iterable
isinstance('abc',Iterable) #字符串是可迭代对象吗?
=> True
isinstance([1,2,3],Iterable) #list是可迭代对象吗?
=> True
isinstance({'dede':123},Iterable) #字典是可迭代对象吗?
=> True

对于有序集合如list和tuple,如果需要索引,可以用enumerate。enumerate函数可以将一个list或tuple与索引结合,变成一个个(index,value)的tuple集合。

L = ['Adam', 'Lisa', 'Bart', 'Paul']
for i in enumerate(L):
	print(i)
=>
(0, 'Adam')
(1, 'Lisa')
(2, 'Bart')
(3, 'Paul') 

可以看出,这4行输出结果就是enumerate函数作用的效果。它将

['Adam', 'Lisa', 'Bart', 'Paul']

变成

[(0, 'Adam')(1, 'Lisa')(2, 'Bart')(3, 'Paul')]

如果是for i in enumerate(L),i就对应每个tuple,如果是for i, value in enumerate(L),那i就对应0,1等,value就对应’Adam’和‘Lisa’等。因为对于a,b = (1, 2),tuple可以将其内部的值一一对应传给变量。

for index, value in enumerate(L):
	print(index, "-", value, end = ',')
=> 0 - Adam,1 - Lisa,2 - Bart,3 - Paul, 

上例需要注意:
print函数中如果需要同时输出int和str,不能用+,只能用逗号连接。
print函数有一个可选参数end,意即输出隔离符,默认值为换行符’\n’。若想输出结果不换行,end = ’ '即可。

对于dict呢?

d = {'a':'A','b':'B'} #定义一个dict
for i in d:
	print(i)
=>
a
b
for i in d:
	print(d[i])
=>
A
B

上例中,当对dict进行迭代时,i对应的是每一对key-value中的key,d[i]对应的则是value。
enumerate是否可以作用于dict呢?试试看!

>>> d = {'a':'A','b':'B'} #定义一个dict
>>> for i in enumerate(d):
...     print(i)
...    
(0, 'a')
(1, 'b')
>>> for i,value in enumerate(d):
...     print(i,value)
...
0 a
1 b
>>> for i,value in enumerate(d):
...     print('enumerate添加的索引为'+str(i),'对应的dict中的key为'+value,'实际value为'+d[value])
...
'enumerate'添加的索引为0 对应的dict中的key为a 实际value为A
'enumerate'添加的索引为1 对应的dict中的key为b 实际value为B

上例可以看出,enumerate可以作用于dict,只不过仍然对每一对key-value pair额外添加了正整数索引,此方法将来可能用于为key-value类似的键值对添加序号。

那如果只需要dict中的value时,该怎么办呢?难道只能用d[index]的形式吗?

>>> d = {'a':'A','b':'B'} #定义一个dict
>>> for i in d.values():
...     print(i)
...
A
B

类似地,d.keys()返回一个包含所有键的迭代器,d.items()返回一个迭代器,其中以tuple形式包含所有的key-value pair。
(貌似文档中所有的迭代器默认都是以list形式存在的)
注:python2.x版本中的d.itervalues()方法与d.values()效果一样,但在3.x中不再可用。

  1. 列表生成式
    要生成100以内奇数列表:
>>> range(1,101,2)
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89, 91, 93, 95, 97, 99]

要在此基础上对每一项进行操作变换,生成包含每个数的平方的列表:

>>> [x * x  for x in range(1,101,2)]
[1, 9, 25, 49, 81, 121, 169, 225, 289, 361, 441, 529, 625, 729, 841, 961, 1089, 1225, 1369, 1521, 1681, 1849, 2025, 2209, 2401, 2601, 2809, 3025, 3249, 3481, 3721, 3969, 4225, 4489, 4761, 5041, 5329, 5625, 5929, 6241, 6561, 6889, 7225, 7569, 7921, 8281, 8649, 9025, 9409, 9801]

要在上一步基础上添加条件,筛选出其中能被17整除的项:

>>> [x * x  for x in range(1,101,2) if x * x % 17 == 0]
[289, 2601, 7225]

多层表达式:

>>> [m + n for m in 'ABC' for n in '123']
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

猜你喜欢

转载自blog.csdn.net/leavemetomorrow/article/details/88624041